本文概要
- NoSQL与关系数据库的比较
- NoSQL的四大类型、三大基石
- NoSQL和NewSQL数据库的区别
- 文档数据库MongoDB编程实践
一、NoSQL概述
NoSQL = Not Only SQL
关系型数据库不可能被完全取代,但是在许多业务场景中,非关系型数据库更有益
1. NoSQL数据的特点
-
灵活的可扩展性
:支持在多个节点进行水平扩展,可以存储海量数据 -
灵活地数据模型
:(HBase)在使用过程中可以动态增删列族 -
和云计算的紧密结合
:云计算可以根据负载动态地纳入或移出集群中的机器,来达到负载均衡,非关系型数据库由于支持水平扩展,可以与云计算机制紧密结合
传统的关系型数据库特点:
- 非常完备的关系理论基础(占据主流市场三四十年)
- 具有事务性机制的支持
- 高效的查询优化机制
传统关系数据库的缺陷:
- 无法满足海量数据的管理需求
- 无法满足高并发的需求
- 无法满足高可扩展性和高可用性的需求
大多企业都通过MySql集群方式解决负载需求:
- 主从服务器实现读写分离,异步方式更新数据
- 分库分表
Mysql集群的缺陷:
- 复杂性:集群部署和配置非常复杂
- 延迟性:主从同步存在延迟
- 扩容问题:向集群增加机器时,需要对数据集进行重新划分,非常复杂,人工划分数据集时难以平衡负载
二、NoSQL数据的四大类型
1. 键值数据库
键值数据库是理想的缓冲层解决方案
2. 列族数据库
3. 文档数据库
是键值数据库的一种,value值是一个文档,多使用JSON数据类型
4. 图数据库
三、NoSQL的三大基石
1. CAP理论
CAP不可能兼得,只能取其二,一般有以下几种选择:
- CA:放弃分区容忍性,将所有数据放在同一台服务器上,以获取数据的一致性和可用性(传统数据库,扩展性差)
- CP:放弃可用性,成就一致性和分区容忍性,使用网络分区,短时间内数据不一致,等数据一致后再去取数据
- AP:放弃一致性,即使数据不一致,也要取用,成就可用性和分区容忍性
2. BASE
3. 最终一致性
实现强一致性的最低要求为W+R=N+1
四、从NoSQL到NewSQL
代表产品:亚马逊的RDS和微软的SQL Azure
五、文档数据库MongoDB
MongoDB中的数据格式叫做BSON,是binary形式的JSON数据