一、NoSql
NoSql非关系型数据库,目前学到的redis以及在学习的MongoDB都是非关系型数据库.
redis和mongodb的区别
1、MongoDB更类似于Mysql,查询功能强大,支持字段索引、游标操作,数据结构比较单 一支持JSON和BSON格式数据
redis更像是缓存,它以kv的形式可以存储多种数据类型结构
2、redis数据全部存于内存中,定期写入磁盘,搭配LRU算法删除数据
MongoDB数据存于内存,当内存不够时,只将热点数据存入内存,其余存入磁盘
3、MongoDB所有数据实际上是存储在磁盘上的,所有操作的数据通过mmap的方式映射到
内存的某个区域中
redis可以说是一个内存数据库
4、MongoDB不支持事务,redis支持事务但很弱,仅能保证事务中的操作按顺序执行
5、数据量还有性能方面,如果物理内存够用redis>mongodb,不够用时,redis和mongod
b都会使用虚拟内存,使用虚拟内存,redis基本需要添加内存条,而mongodb可以通过
在业务上保证冷热数据比,使得热数据在物理内存中,mmap的交换较少
6、MongoDB内置mapreduce具备数据分析能力,redis不支持
7、MongoDB从1.8以后采用binlog方式支持持久化,增加可靠性
Redis依赖快照进行持久化,通过AOF增强可靠性,但影响访问性能
8、MongoDB集群化成熟,Redis在3.0以后才支持集群
9、性能方面,两者都依赖内存,MongoDB的TPS(每秒钟系统能够处理的交易或事务的
数量)较高,而Redis的TPS非常高.
总结:Redis的缓存性质大于数据存储性质,数据的增删改查操作更像变量操作,简单,主
要把数据存于内存中; MongoDB像SQL数据库一样灵活,支持一些复杂的操作,是 一个存储数据的系统。这也是为什么一般都称呼Redis缓存、MongoDB数据库.
NoSql的使用场景:
1、对数据库高并发读写
2、对海量数据的高效率存储和访问
3、对数据库的高可扩展性和高可用性
NoSql的缺陷:
1、数据库事务一致性需求
2、数据库的写实时性和读实时性需求
3、对复杂的查询,联表查询的需求
二、MongoDB
MongoDB由C++语言编写,是一个基于分布式文件存储的开源数据库系统
MongoDB特点
1、面向文档存储的数据库,操作简单
2、可以在MongoDB设置索引,实现更快的排序
3、可以通过网络或者本地创建镜像,使其有更强的扩展性
4、负载增减,可以分布在计算机网络的其他节点上,分片
5、支持丰富的查询表达式
6、支持各种编程语言
7、允许在服务器端执行脚本
8、内置功能GridFS,可以用于存放大量的小文件
MongoDB概念
基本概念:文档、集合、数据库
术语:
database | 数据库 |
collection | 数据表/集合 类似MySql中的table |
document | 数据记录行/文档 Mysql中的row |
filed | 数据字段/域 Mysql中的column |
index | 索引 Mysql中的index |
primary key | 主键 MongoDB自动将_id字段设置为主键 |
数据库常用指令
use 库名 切换/创建数据库,如果数据库不存在则创建,有则切换;注意新建的数据库无数据不会持久化不显示
show dbs 查询所有数据库
db.dropDatabase(); 删除数据库
db.getName(); 查看当前使用的数据库
db.stats(); 显示当前db的状态
db.version(); 当前db的版本
db.getMongo(); 查看当前db的链接机器地址
文档
文档为一组键值对,不需要设置相同的字段,并且相同的字段不需要相同的数据类型
文档中的键值是有序的
MongoDB区分类型和大小写
文档不能有重复的键
除少数情况外,键通常为字符串,而值可以为其他类型
命名规范
键不能含有\0空字符,该字符表示键的结尾
.和$有特定的意义,只有在特定情况下使用
以下划线开头的键是保留的
集合
集合是MongoDB文档组,集合存在于数据库中但其没有固定的结构,所以可以插入不同格式和类型的数据,通常情况下,我们插入的数据具备一定的关联性
常用命令
db.createCollection("") 创建一个集合
db.getCollection("")得到指定名称的集合
MongoDB支持的数据类型
String、Integer、Boolean、Double、Arrays、Timestamp、Object、Null、Date。
MIN/MAX keys 将一个值与二进制的JSON元素的最大最小值做比较
Symbol 符号,等同于String,一般采用与特殊符号类型的语言
Object ID 对象ID,用于创建文档的ID 添加时自动添加该属性
使用12字节的存储空间每字节二位16进制数字,是一个24位的字符串;前4字节为时间长,中间3、3字节 分别为机器的标识码,PID,后3位为计数器
Code 代码类型,用于文档中存储JS代码
Regular 正则表达式类型
Binary Data 二进制数据
适用场景
1、网站数据,MongoDB适合实时的插入、修改查询,具备网站实时的数据存储所需的复制及高度伸缩性
2、缓存,MongoDB也适合做信息基础设施的缓存层
3、大尺寸、低价值的数据
4、用于对象及JSON数据的存储
5、高伸缩性的场景
不适用场景
1、高度事务性的系统
2、传统的商业智能应用