NoSQL 是一个用于描述高扩展高性能的非关系数据库的术语。NoSQL 数据库提供的 schemafree 数据模型使应用无需预先定义表结构,更适应业务的多元化发展,且其对超大数据规模和高并发的支持让 NoSQL 数据库得到了广泛的应用。
SQL 与 NoSQL 数据库对比
关系型数据库 | NoSQL 数据库 | |
数据模型 | 关系模型对数据进行了规范化,严格定义了表、列、索引以及各个表之间的关系及其他数据库元素,使一张数据表的所有数据都具有相同的结构。 | 非关系(NoSQL)数据库一般不会对表的结构进行严格的定义,通常使用分区键及键值来检索值、列集或者半结构化数据。 |
ACID | 传统关系型数据库支持由 ACID(原子性、一致性、隔离性和持久性)定义的一组属性。其原子性体现在一个事务“全部成功或者全部失败”,即完全执行成功或完全不执行某项事务。一致性表示数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。隔离性要求并发事务应分别执行,互不干扰。持久性指一旦事务提交后,它所做的修改将会永久保存在数据库上,即使出现宕机也不会丢失。 | 为了获得更为灵活的可水平扩展的数据模型, NoSQL 数据库通常会放弃传统关系数据库的部分 ACID 属性。凭借这些特性,NoSQL 数据库可用来克服一系列包括性能瓶颈、可扩展性、运营复杂性以及不断增加的管理和支持成本的问题,这也让 NoSQL 数据库成了传统关系型数据库在面临海量数据及高并发挑战时的最佳选择。 |
性能 | 性能一般取决于磁盘子系统、数据集大小、查询优化、索引和表结构。 | 写性能通常受限于磁盘子系统,读性能则受限于结果集的大小。 |
扩展 | 进行纵向扩展最简单的方式是使用更快的 CPU、磁盘等硬件设备。要获得跨分布式系统的关系表,就需要增加使用成本及技术复杂度。 | 能够利用低成本硬件的分布式集群进行横向扩展,从而在不增加延迟的前提下提高吞吐量和数据规模。 |
API | 对存储和检索数据的请求由符合结构化查询语言(SQL)的查询来传达。这些查询由关系数据库系统来解析和执行。 | 应用开发人员可以使用 NoSQL 数据库的开放 API 轻松进行存储和检索数据。通过分区键及键值,应用可以查找键值对、列集或者半结构化数据。 |
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。