SQL与NOSQL的比较
数据模型
关系模型对数据进行了规范化,使之成为一种表格结构,也叫做表。这类表由多个行和列组成。采用一种架构来严格定义表、列、索引、各个表之间的关系及其他数据库元素。
非关系 (NoSQL) 数据库一般不会实施任何架构。一般使用分区键来检索值、列集或半结构化 JSON、XML 或其他包含相关项目属性的文档。
ACID 属性
传统关系数据库管理系统 (RDBMS) 支持由 ACID(原子性、持续性、隔离性和一致性)定义的一组属性。原子性表示“全有或全无”,即完全执行或完全不执行某项事务。一致性表示事务提交之后,数据必须符合数据库架构。隔离性要求并发事务应分别执行,互不干扰。持续性即能够从意外系统故障或断电情况中恢复到上一个已知状态。
为了获得更为灵活的可水平扩展的数据模型,NoSQL 数据库通常会放弃传统关系数据库管理系统 (RDBMS) 的部分 ACID 属性。凭借这些特性,NoSQL 数据库成了传统 RDBMS 在面临架构方面的挑战时的最佳选择。它可用来克服一系列问题,包括性能瓶颈、可扩展性、运营复杂性和不断增加的管理和支持成本。
性能
SQL 数据库性能一般取决于磁盘子系统。要获得最佳性能,就需要优化查询、索引和表结构。
NoSQL 数据库性能通常由底层硬件集群大小、网络延迟以及调用应用程序来决定。
扩展
SQL 数据库进行纵向扩展最简单的方式是利用运行更快的硬件。 要获得跨分布式系统的关系表,就需要追加更多投资。
NoSQL 数据库旨在利用低成本硬件的分布式集群进行横向扩展,从而在不增加延迟的前提下提高吞吐量。
API
SQL 数据库对存储和检索数据的请求由符合结构化查询语言 (SQL) 的查询来传达。
这些查询由关系数据库管理系统 (RDBMS) 来解析和执行。借助基于对象的 API,应用开发人员可以轻松存储和检索内存数据结构。通过分区键,应用可以查找键值对、列集或包含序列化应用对象和属性的半结构化文档。
工具
SQL 数据库一般会提供一组丰富的工具,用于简化数据库驱动型应用程序的开发流程。
而 NoSQL 数据库一般会提供多种工具来管理集群和扩展。应用程序是底层数据的主要接口。