一、两种数据库的比较
1. 数据库原理方面
关系数据库:有非常完备的代数理论基础。
NoSQL:没有统一的理论基础。它分为很多大类,不同类的产品有不同的理论基础。
2. 数据规模方面
数据规模的升级分为:
(1) 横向扩展(Scale-out):即提高并行处理数量,如增加节点。
(2) 纵向扩展(Scale-up):即提高单点处理能力,如增强CPU。
关系数据库:很难实现横向扩展,纵向扩展也有限。如关系数据库管理系统(Relational Database Management System:RDBMS)
NoSQL:很好的水平扩展性(即横向扩展),增加节点数非常容易。
3. 数据库模式方面
关系数据库:事先要严格定义数据库模式,且使用时要严格遵守。
NoSQL:一般没有固定的数据库模式,且数据模型非常灵活,可存储多种类型的数据。
4. 查询效率方面
关系数据库:有非常好的索引机制和查询优化引擎,在普通数据量时查询效率高,即便查询很复杂。(但对大规模数据的查询效率反而降低)
NoSQL:没有应对复杂查询的索引机制,复杂查询能力差
5. 事务一致性方面
关系数据库:强事务一致性,遵循ACID事务模型。
NoSQL:只能保证最终一致性,采用BASE模型(NoSQL三大理论基础之一)
6. 数据完整性方面
关系数据库:设置各种约束,如主键外键等,来实现三大完整性(实体完整性、参照完整性和用户自定义完整性)。
NoSQL:不能实现这些完整性约束。
7. 可用性方面
关系数据库:对小规模数据集,可用性很好。但规模增大时,为优先保证一致性(它的设计原则),所以可用性下降。
NoSQL:就是从提高可用性角度设计的,会牺牲一定的一致性来保证可用性,能快速返回结果。
8. 标准化方面
关系数据库:遵循统一的SQL标准,不同产品使用同一套标准接口,可以互相导入导出。
NoSQL:目前为止没有通用的行业标准。而且因为数据库类别很多,难以统一。
9. 技术支持方面
关系数据库:商业化成熟,服务完善。
NoSQL:多为开源产品,处于发展初期。(未来可期~)
10. 可维护方面
关系数据库:管理员维护,较简单。
NoSQL:没有完备的操作规范,维护较复杂。
二、优劣总结
从上述分析可见,两种数据库各有优劣。
1. 关系数据库
优势:
(1) 具有非常完备的关系代数基础
(2) 有严格而统一的标准
(3) 支持事务一致性
(4) 可以借助索引机制实现非常高效的查询
劣势:
(1) 可扩展性差,尤其不具备水平可扩展性,所以难以支持海量数据存储
(2) 数据模型定义过于严格,无法满足Web2.0灵活的需求
2. NoSQL数据库
优势:
(1) 支持超大规模的数据存储
(2) 数据模型非常灵活,可以随时增加各种类型的字段
劣势:
(1) 缺乏底层基础理论支撑
(2) 大多不支持事务的强一致性,不适用于关键业务系统(如银行账号管理)
三、应用场景
关系型数据库常用于关键业务系统,如电信、银行等,因为它们容错低,要求事务的强一致性。
NoSQL数据库常用于非关键业务系统,处理容错较高的任务。
其实当代企业大多使用混合架构,对合适的任务使用合适的数据库。比如亚马逊,对临时性数据(如购物篮)采用简单高效的键值存储;但对于关键业务(如产品订单信息)则使用关系数据库以保证数据安全准确;而做历史订单分析,会使用NoSQL产品,如文档数据库MangoDB。
Reference:
https://www.icourse163.org/learn/XMU-1002335004#/learn/content?type=detail&id=1214310134&sm=1