表中给出了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 不存在数据库模式,可以自由、灵活地定义并存储各种不同类型的数据 |