一、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、传统的商业智能应用