5.1NoSQL数据库简介
- NoSQL是一种不同于关系型数据库的数据库管理系统设计方式,是对于非关系型数据库的统称,它采用的数据模型并非传统关系数据库,而是类似键值、列族、文档等非关系模型。
- NoSQL数据库具有的特点:
- 灵活的可扩展性
- 灵活的数据模型
- 与云计算紧密融合
5.2NoSQL兴起的原因
- 关系型数据库无法满足Web2.0的需求
- 无法满足海量数据的管理需求
- 无法满足高并发的需求
- 无法满足高可扩展性和高可用性的需求
5.3NoSQL与关系数据库的比较
- NoSQL没有统一的理论基础,NoSQL可以很容易通过添加更多设备来支持大规模数据。
- NoSQL不存在数据库模式,可以灵活、*的定义各种不同类型数据。
- 关系型数据库可以借助于索引机制可以实现快速查询,但是NoSQL可以借助于MapReduce但是在查询性能方面仍然不如关系型数据库。
- 关系型数据库严格遵守ACID模型,可以保证事务的强一致性。而NoSQL放松了对于ACID的四性要求,遵守BASE模型,只能够保证最终一致性。
- NoSQL很难实现数据完整性。
- NoSQL充分考虑了横向扩展的能力。
- 关系型数据库保证以数据一致性作为优先目标,但大多数NoSQL都能提供较高的可用性。
- 关系型数据库已经标准化,但是NoSQL还没有行业标准化。
- NoSQL缺乏技术支持
- 可维护性都比较复杂。
5.4NoSQL的四大类型
1. 键值数据库
- 键值数据库(Key-Value Database)会使用一个哈希表,这些表中有一个特定的Key和一个指针指向的特定的Value。键值数据库可以进一步划分内存键值数据库和持久化(Persistent)键值数据库。
- 内存键值数据库会把数据保存在内存中,如:Memcached、Redis,但是持久化键值数据库会把数据存放在磁盘中。如:BerkeleyDB、Voldmort、Riak。
- 条件查询就是键值数据库的弱项。
2. 列族数据库
- 列族数据库一般采用列族模型,数据库由多个行构成,每行数据包括多个列族。每行数据通过行键进行定位,一个列族也可以被放进内存中,以内存消耗作为代价,来换取更好的性能。
- BigTable、HBase、Cassandra、HadoopDB、GreenPlum、PNUTS,代表
3. 文档数据库
- 在文档数据库中文档是最小单位。文档数据库通过键来定位一个文档,文档数据库既可以根据键(Key)来构建索引,也可以基于文档内容来构建索引。值是不能够用来构建索引的,值对于数据库是不透明的。
- 代表CouchDB、MongoDB、Terrastore、ThruDB、RavenDB、SisoDB、RaptorDB、CloudKit、Perservere、Jackrabbit,缺乏统一的查询语法。
4. 图数据库
- 图数据库以图论为基础,可以高效的存储不同顶点之间的关系。有些图数据库可以很好的兼容ACID(Neo4J)
- 代表产品:Neo4J、OrientDB、InfoGrid、Infinite Graph、GraphDb
5.5NoSQL的三大基石
NoSQL的三大基石包括CAP、BASE和最终一致性
1. CAP
- C(Consistency)一致性。它是指任何一个读操作总是能够读到之前完成的读写操作
- A(Availability)可用性。它是指快速获取数据,可以在确定的时间返回操作结果
- P(Tolerance of Network Partition)分区容忍性。它指出现网络分区情况的时候,分离的系统也能够正常运行。
- CAP理论告诉我们,一个分布式系统不可能同时满足一致性、可用性、分区容忍性这三个需求。
- CA,把事务相关的内容都放到同一台机器上。
- CP,当出现网络分区的情况时受影响的服务需要等待数据一致性,因此在等待期间就无法提供对外服务。
- AP,允许系统返回不一致的数据。
2. BASE
说起BASE,就不得不谈到ACID,一个数据库事务具有ACID四性
- A(Atumicity):原子性。它指事务必须是原子工作单元,对于其数据的修改,要么全都执行,要么全都不执行。
- C(Consistency):一致性。它指事务完成是必须保持所有数据都保持一致性。
- I(Isolation):隔离性。它是指由并发事务所做的修改必须与任何其他并发事务所做的修改隔离。
- D(Durability):持久性。它是指事务完成后,对于系统的影响是永久的,该修改就是出现致命的系统故障也将一直保持。
- 基本可用(Basically Availble)
- 软状态(Soft-state),软状态是指可以有一段时间不同步,具有一定的滞后性。
- 最终一致性(Eventual consistency),一致性包括强一致性和弱一致性,二者的区别在于高并发的数据访问操作之下,后续操作能否获取最新的数据。强一致性就可以在更新操作后保证读到最新的数据,弱一致性允许延迟获取最新数据。也是ACID最终目的。
3.最终一致性
最终一致性的要求更低,只要经过一段时间后能够访问到更新后的数据即可
- 因果一致性
- “读己之所写”一致性
- 会话一致性
- 单调读一致性
- 单调写一致性
5.6从NoSQL到NewSQL数据库
- NewSQL不仅具备NoSQL的特性,还保持对于传统数据库的ACID和SQL特性。
- 最后关注的是Spanner,它是一个可扩展、多版本、全球分布式并且支持同步复制的数据库。