第5章 NoSQL数据库
NoSQL简介

1 | 通常,NoSQL数据库具有以下几个特点: |
NoSQL兴起的原因
1 | 关系数据库已经无法满足Web2.0的需求。主要表现在以下几个方面: |
1 | (主从机制实现读写负载分离,同步或异步传输)--到--->分库分表 |

1 | “One size fits all”模式很难适用于截然不同的业务场景 |
1 | 关系数据库的关键特性包括完善的事务机制和高效的查询机制。但是,关系数据库引以为傲的两个关键特性,到了Web2.0时代却成了鸡肋,主要表现在以下几个方面: |
NoSQL与关系数据库的比较
1 | ACID,是指数据库管理系统(DBMS)在写入或更新资料的过程中,为保证事务(transaction)是正确可靠的,所必须具备的四个特性:原子性(atomicity,或称不可分割性)、一致性(consistency)、隔离性(isolation,又称独立性)、持久性(durability)。 |
1 | RDBMS:关系型数据库管理系统 |

1 | 总结 |
NoSQL的四大类型
1 | NoSQL数据库虽然数量众多,但是,归结起来,典型的NoSQL数据库通常包括键值数据库、列族数据库、文档数据库和图形数据库 |
键值数据库

1 | 关系型数据库管理系统(Relational Database Management System)RDBMS |
列族数据库
文档数据库
1 | “文档”其实是一个数据记录,这个记录能够对包含的数据类型和内容进行“自我描述”。XML文档、HTML文档和JSON 文档就属于这一类。SequoiaDB就是使用JSON格式的文档数据库,它的存储的数据是这样的 |


1 | 关系数据库: |
1 | •数据是不规则的,每一条记录包含了所有的有关“SequoiaDB”的信息而没有任何外部的引用,这条记录就是“自包含”的 |

图形数据库
NoSQL的三大基石

CAP
1 | C(Consistency):一致性,是指任何一个读操作总是能够读到之前完成的写操作的结果,也就是在分布式环境中,多点的数据是一致的,或者说,所有节点在同一时间具有相同的数据 |
1 | CAP理论告诉我们,一个分布式系统不可能同时满足一致性、可用性和分区容忍性这三个需求,最多只能同时满足其中两个,正所谓“鱼和熊掌不可兼得”。 |
1 | 当处理CAP的问题时,可以有几个明显的选择: |
BASE
1 | 说起BASE(Basically Availble, Soft-state, Eventual consistency), |
1 | 一个数据库事务具有ACID四性: |
1 | BASE的基本含义是基本可用(Basically Availble)、软状态(Soft state)和最终一致性(Eventual consistency): |
最终一致性
1 | 最终一致性根据更新数据后各进程访问到数据的时间和方式的不同, |
1 | 如何实现各种类型的一致性? |
1 | 对于分布式系统,为了保证高可用性,一般设置N>=3。不同的N,W,R组合,是 |
从NoSQL到NewSQL数据库
1 | 关系型数据库:适用事务型 |
1 | newsql数据库同时具备关系型数据库和非关系型数据库的优点(事务和水平拓展) |
文档数据库MongoDB
文章标题(可选)MongoDB简介
1 | •MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据 |
主要特点
1 | •提供了一个面向文档存储,操作起来比较简单和容易 |
MongoDB概念解析
1 | 在mongodb中基本的概念是文档、集合、数据库 |
1 | 举例2:在一个关系型数据库中,一篇博客(包含文章内容、评论、评论的投票 |

1 | 关系数据库中的其中一条记录,在文档数据库MongoDB中的存储方式类似如下: |
数据库
1 | •一个mongodb中可以建立多个数据库。 |
文档
1 | 文档是一个键值(key-value)对(即BSON)。MongoDB 的文档不需要设置相 |

集合
1 | •集合就是 MongoDB 文档组,类似于 RDBMS (关系数据库管理系统: |
MongoDB 数据类型
安装MongoDB
Window平台安装 MongoDB
1 | MongoDB提供了可用于32位和64位系统的预编译二进制包,你可 |
Linux平台安装MongoDB
1 | MongoDB提供了linux平台上32位和64位的安装包,你可以在官网下载安装包。 |
访问MongoDB
使用 MongoDB shell访问MongoDB
1 | mongodb://localhost |
MongoDB 创建数据库
1 | MongoDB 创建数据库的语法格式如下: |
创建集合
1 | MongoDB没有单独创建集合名的shell命令,在插入数据的时候,MongoDB会自动创建对应的集合。 |
MongoDB 插入文档
1 | 文档的数据结构和JSON基本一样。 |
使用Java程序访问 MongoDB
1 | 环境配置 |
(1)连接数据库
1 | import com.mongodb.MongoClient; |
(2)创建集合
1 | 可以使用com.mongodb.DB类中的createCollection()来创建集合 |
(3)插入文档
1 | 可以使用com.mongodb.DBCollection类的 insert() 方法来插入一个文档 |