表中给出了NoSQL和关系数据库( Relational DataBase Management System, RDBMS )的简单比较,对比指标包括数据库原理、数据规模、数据库模式、查询效率、一致性、数据完整性、扩展性、可用性、标准化、技术支持和可维护性等方面。从表中可以看出,关系数据库的突出优势在于,以完善的关系代数理论作为基础,有严格的标准,支持事务 ACID 四性,借助索引机制可以实现高效的查询,技术成熟,有专业公司的技术支持;其劣势在于,可扩展性较差,无法较好地支持海量数据存储,数据模型过于死板,无法较好地支持Web 2.0应用,事务机制影响了系统的整体性能等。NoSQL数据库的明显优势在于,可以支持超大规模数据存储,灵活的数据模型可以很好地支持Web 2.0应用,具有强大的横向扩展能力等;其劣势在于,缺乏数学理论基础,复杂查询性能不高,一般都不能实现事务强致性,很难实现数据完整性,技术尚不成熟,缺乏专业团队的技术支持,维护较困难等。

NoSQL和关系数据库的简单比较

比较标准

关系数据库

NoSQL

备注

技术支持



关系数据库经过几十年的发展,已经非常成熟,Oracle等大型厂商都可以提供很好的技术支持 NoSQL在技术支持方面仍然处于起步阶段,还不成熟,缺乏有力的技术支持

数据库原理

完全支持

部分支持

关系数据库有关系代数理论作为基础 NoSQL没有统一的理论基础

数据规模


超大

关系数据库很难实现横向扩展,纵向扩展的空间也比较有限,性能会随着数据规模的增大而降低 NoSQL 可以很容易通过添加更多设备来支持更大规模的数据

查询效率


可以实现高效的简单查询,但是不具备高度结构化查询等特性,复杂查询的性能不尽人意

关系数据库借助于索引机制可以实现快速查询(包括记录查询和范围查询) 很多 NoSQL 数据库没有面向复杂查询的索引,虽然 NoSQL 可以使用 MapReduce 来加速查询,但是在复杂查询方面的性能仍然不如关系数据库

一致性

强一致性

弱一致性

关系数据库严格遵守事务ACID模型,可以保证事务强一致性 很多 NoSQL 数据库放松了对事务ACID四性的要求,而是遵守 BASE 模型,只能保证最终一致性

可维护性

复杂

复杂

关系数据库需要专门的数据库管理员(DBA)维护 NoSQL 数据库虽然没有关系数据库复杂,但也难以维护

标准化



关系数据库已经标准化( SQL ) NoSQL 还没有行业标准,不同的 NoSQL 数据库都有自己的查询语言,很难规范应用程序接口

可用性


很好

关系数据库在任何时候都以保证数据一致性为优先目标,其次才是优化系统性能,随着数据规模的增大,关系数据库为了保证严格的一致性,只能提供相对较弱的可用性 大多数 NoSQL 都能提供较高的可用性

数据完整性

容易实现

很难实现

任何一个关系数据库都可以很容易实现数据完整性,如通过主键或者非空约束来实现实体完整性,通过主键、外键来实现参照完整性,通过约束或者触发器来实现用户自定义完整性,但是在 NoSQL 数据库却无法实现

扩展性

一般


关系数据库很难实现横向扩展,纵向扩展的空间也比 NoSQL 在设计之初就充分考虑了横向扩展的需求,可以很容易通过添加廉价设备实现扩展

数据库模式

固定

灵活

关系数据库需要定义数据库模式,严格遵守数据定义和相关约束条件 NoSQL 不存在数据库模式,可以自由、灵活地定义并存储各种不同类型的数据