第二章(考点在2.1.3、2.1.4、2.1.5)
一. NoSQL与关系数据库的对比
- 数据库原理方面:关系数据库具有完备的关系代数理论作为基础;NoSQL数据库缺乏理论基础
- 数据规模方面:关系数据库纵向扩展有限;NoSQL数据库具有非常好的水平可扩展性
- 数据库模式方面:关系数据库要定义并遵守严格的数据库模式;NoSQL数据模型非常灵活
- 查询效率方面:关系数据库在适当数据量级查询效率高,数据量级增大,查询效率下降;NoSQL数据库未构建面向复杂查询的索引,查询性能差
- 事务一致性方面:关系数据库遵循ACID事务模型保证事务强一致性(原子性、一致性、独立性、持久性);NoSQL数据库不保证事务一致性
- 数据完整性方面:关系数据库具有保证完整性的完备机制(实体完整性、域完整性、参照完整性、用户定义完整性);NoSQL数据库不能实现完整性约束
- 可扩展性方面:关系数据库扩展性差;NoSQL数据库水平扩展性非常好;
- 可用性方面:关系数据库随着规模增大,可用性被削弱;NoSQL数据库具有非常好的可用性,能够在短时间内返回所需结果
- 标准化方面:关系数据库遵守SQL标准,标准化完善;NoSQL数据库没有形成通用的行业标准
- 技术支持方面:关系数据库很多商业数据库,有强大的技术支持;NoSQL数据库很多开源产品,处于发展初期阶段
- 可维护方面:关系数据库需要管理员维护;NoSQL数据库没有成熟的基础和实践操作规范,维护复杂
二. 两种数据库的应用场景
- 关系数据库:电信银行的关键业务系统(需要保证强一致性)
- NoSQL数据库:互联网企业及一些传统企业的非关键业务
三.NoSQL的四大类型:
- 键值数据库:扩展性和灵活性好,吞吐量高;无法存储结构化信息
- 列族数据库:查找速度快,水平扩展性强,复杂性低;功能少,不支持事务强一致性
- 文档数据库:性能好,高并发,灵活性高;查询性能不高,缺乏统一的查询语法
- 图数据库:灵活性高,支持复杂的图形算法;复杂性高,只能支持一定的数据规模
四.NoSQL的理论基石-CAP
- Consistency:一致性,任何一个读操作总数能够读到之前完成的写操作的结果
- Availability:可用性:快速获取数据,可以在确定的时间内返回操作结果,保证每个请求都有响应
- Partition Tolerance:分区容忍性:当出现网络分区的情况(系统中一部分节点无法和其他节点进行通信),分离的系统也能正常运行
- 一个系统不可能同时满足三个需求。
五. NoSQL的理论基石-BASE
- Basically Avaiable:基本可用,分布式系统的一部分不可用时,其他部分依然正常使用,允许损失部分可用性
- Soft-State:软状态:状态可用有一段时间不同步,允许具有一定的滞后性
- Eventual Consistency:最终一致性,是弱一致性的特例
六.NoSQL的理论基石-最终一致性
- 一致性分为强一致性和弱一致性,区别在于后续操作能否获取最新数据
- 强一致性:W+R>N
弱一致性:W+R<=N
N为最终要求保持一致的节点个数,W为通过写操作成功更新的节点数,R为需要读取的节点数 - BASE思想主要强调基本的可用性,如果需要高可用性就需要牺牲一致性