1.概述
1.1 表示关系和非关系型数据库。
1.2 特点
- 灵活的可扩展性:支持在多个节点上的水平扩展,海量的数据存储。
- 灵活的数据模型
- 和云计算紧密结合:充分利用底层的云计算基础设施。
1.3 传统关系型数据库
-
具有非常完备的关系理论基础。
-
具有事务性机制的支持。
-
高效的查询优化机制。
-
缺点:
- 无法满足海量数据的管理需求;
- 无法满足高并发的需求;
- 无法满足高可扩展性和高可用性需求。传统的采用主从服务器来实现读写分离,采用异步或同步方式更新数据。
- mysql集群方式的缺陷:
- 复杂性:整个集群部署配置管理都非常复杂;
- 延迟性:当主库压力较大时,就会带来较大的延迟。
- 扩容问题:压力过大,需要增加机器,对整个数据分区复杂;
1.4 NoSQL数据库
- 数据模型要求宽松;
- 高吞吐率;
2.NoSQL与关系型数据的对比
2.1 关系型数据库
- 数据库原理:具备完备的关系代数理论作为基础;
- 数据规模:很难实现横向扩展,纵向扩展能力有限;
- 查询效率:适当数据量级查询效率高,数据量增大查询效率增大;
- 事务一致性:遵循ACID事务模型,可以保证事务强一致性;
- 在数据完整性:具有保证完整性的完备机制;
- 扩展性:水平扩展性差;
- 可用性:随着数据规模增大,为保证严格的一致性,可用性降低;
- 标准化方面:遵循SQL标准;
- 技术支持方面:商业数据库,可以获得非常强大的技术和后续服务支持;
- 可维护方面:需要管理员维护;
2.2 NoSQL数据库
- 数据库原理:缺乏理论基础;
- 数据规模:具有非常好的水平可扩展性;
- 查询效率:为构建面向复杂查询的索引查询性能差;
- 事务一致性:未构建面向复杂查询的索引查询性能差;
- 数据完整性:无法保证;
- 可扩展性:水平扩展性好;
- 可用性:具有非常高的可用性,能在短时间内迅速返回所需结果;
- 标准化方面:没有统一标准;
- 技术支持方面:开源产品,处于发展初期;
- 没有成熟的基础和实践操作规范维护较为复杂 ;
3.总结
- 传统数据库:
- 优点:具备完善的关系代数理论作为基础、有严格标准、支持事务一致性、可以借助索引机制实现高效查询;
- 缺点:可扩展性差、无法支持海量数据存储、数据模型定义严格;
- NoSQL数据库:
- 优点:支持超大规模数据存储、 数据模型非常灵活;
- 缺点:缺乏理论支撑、不支持事务强一致性;
4.键值数据库和列族数据库
- NoSQL数据比较多,分为以下几类:
- 键值数据库:键值对;
- 数据模型:键值对
- 设计频繁读写,拥有简单数据模型的应用,内容缓存、存储配置和用户数据信息,就可以选择该类数据库;如Redis;
- 扩展性好,灵活;
- 缺点:无法存储结构化信息,条件查询效率低;
- 写操作性能高;
- 列族数据库:HBase根据列族进行垂直划分,根据行键进行水平划分;
- hbase,适合分布式数据存储与管理,拥有动态增加字段;
- 扩展性高;
- 文档数据库:键值数据库,值为文档;
- 能够将它自己包含的数据内容和类型进行自我描述;
- 文档数据库的数据结构是JSON数据格式;
- 具有更好的并发性;
- MongoDB,CouchDB;
- 存储、索引并管理面向文档的数据或类似的半结构化数据;
- 缺乏统一查询语法;
- 图数据库:以图结构存储数据;
- 图结构数据模型;
- 用于处理具有高度相互关联关系的数据,如模式识别、依赖分析等;
- 灵活性高;
- 键值数据库:键值对;
5.NoSQL三大理论
5.1 CAP理论
- 一致性:指如何一个读操作总能读到之前完成的一个写操作的结果;
- 可用性:指快速获取数据,可以在确定时间内返回操作结果,不管成功还是失败;
- 分区容忍性:指当网络区分的情况时,分离的系统也能正常运行。
5.2 上述所有特性不能同时实现,只能取其二;
5.3 BASE和最终一致性
- 基本可用:指一个分布式系统的一部分发生问题变得不可用时,其他部分仍然可以正常使用,也就是允许分区失败的情形出现;
- 软状态:指状态可以有一段时间不同步具有一定的滞后性。
- 最终一致性:可以有一段时间数据不一致,但是最终达到一致。
6. NoSQL到NewSQL数据库
6.1 传统数据库主要用于事务性的应用,NoSQL主要用于互联网应用,NewSQL主要用于分析型应用。
6.2 NewSQL同时具备了传统数据库和NoSQL数据库各自的优点。
- SQL Azure;
- RDS;
7.MongoDB文档数据库
7.1 C++语言编写,是一个基于分布式文件存储的开源数据库系统。
7.2 高负载下,添加更多节点,可以保证服务性能,MongoDB旨在为web应用提供可扩展的高性能数据存储解决方案。
7.3 文档结构类似JSON格式。
7.4 特点
7.5 MongoDB数据相关知识