翻译自:https://database.guide/what-is-nosql/
NoSQL泛指特定类型的数据库模型或者数据库管理系统
NoSQL是一个非常广泛的概念,不指某一种特定的数据库模型。它指的是所有不适合于关系模型的数据库模型
虽然NoSQL数据库自1960年就已经存在了,但是直到2000年初新的NoSQL系统才开始在市场上流行
大数据问题
NoSQL开始流行的一个主要原因是大数据问题。像谷歌和亚马逊这样的大公司因为巨大的用户量开始处理海量数据。这就导致了如下情况的出现:
- 谷歌开发了Bigtable分布式存储系统,用于管理结构化数据,旨在可靠地扩展到PB级数据和数千台计算机。Bigtable供60多个产品和项目使用,包括搜索、分析、地图和Gmail。Bigtable的目的提供广泛的适用性、可伸缩性、高性能和高可用性
- 亚马逊开发并实施了Dynamo,这是一个高可用的键值存储系统。该系统需要保障亚马逊的核心服务始终在线。但是为了达到要求的可用性,Dynamo在故障情况下会牺牲一致性
除了谷歌和亚马逊外,还有很多其他的公司会处理大数据问题。他们也又许多创新解决方案。这导致了NoSQL系统的爆炸式增长
对于NoSQL的精确定义有很多的讨论:
- 有人叫它"No SQL",也就是不使用SQL,使用其他查询语言
- 有时也表示"不仅是SQL",也就是将SQL和其他查询语言一起使用
- 大多数的观点是它们是非关系型的,可能叫NoREL更合适
NoSQL这个词实际上是Eric Evans在2009年的一次会议上提出的Twitter主题标签,该会议讨论了大数据和线性可扩张的分布式系统
NoSQL数据库的特征
NoSQL通常指的是具有某些特定特征的的一组DBMS,特征如下:
- 非关系
- 开源
- 模式少
- 水平可扩展
- 缺乏对ACID原则的支持
- 没有标准查询语言
不是所有的数据库都具有以上特征,许多数据库只具有上述的几个特征。但是关系型数据库只有以上极少的几种特征
非关系
非关系型DBMS被构建成非关系的一个原因是关系模型不适合要求
数据可能是半结构化和非结构化的或者数据量很大,需要一种有效的方式进行数据存储和检索。也可能是系统需要扩展到数百或者数千台计算机,也有可能完全是其他原因
无论如何都需要建立一种新的方案来解决需求
开源
大多数的NoSQL DBMS是开源的,虽然也有很多开源的关系DBMS。但是NoSQL更倾向于开源
Schema-Less
大多数NoSQL没有固定的schema。关系DBMS在输入任何数据之前需要对schmea进行建模和创建,而NoSQL数据库则没有此要求。
NoSQL数据库只需要给出一个名字,这使得其接受的数据更加灵活,并支持敏捷开发
水平可扩展
大多数NoSQL都是集群模式的,通过在多台计算机上对数据进行分区使得每台计算机都可以独立执行特定的任务。每个进程可以执行其任务,而不需要与其他进程共享内存或者磁盘空间,这叫做无共享架构。
虽然关系型数据库也可以是集群的,但是往往比较困难。而且性能上也会收到影响。关系型数据库更适合扩展,也就是可以通过添加计算机来添加更多的资源
缺乏对ACID的支持
大多数NoSQL在某种程度上对ACID的支持比较松。这是因为大多数的NoSQL都是为了实现高可用性和高扩展性而开发的。当提供高可用性的时候,就需要牺牲一执行和容忍性(或者在三者之间保持平衡)。通过放宽一致性可以提供可用性。
但是有些NoSQL系统(MarkLogic,Neo4j和OrientDB)确实支持ACID事物
没有标准查询语言
当前没有所有NoSQL都支持的查询语言。尽管已经尝试为所有NoSQL数据库引入标准查询语言,但是都没有成功。某些NoSQL DBMS具有自己的查询语言,而另一些支持各种语言,例如JSON,XQuery,SPARQL等。
第一个NoSQL数据库
这些年来有许多“non SQL”数据库,甚至在1974第一次提出SQL,在1979年第一个RDBMS诞生之前就已经存在数据库了。
这是有史以来第一次构建的三个(NoSQL)数据库管理系统:
- MultiValue:是NoSQL数据库,最早于1965年作为Pick操作系统的一部分开发。
- MUMPS:(马萨诸塞州总医院公用事业多程序系统)自1966年以来一直存在。MUMPS是无模式的,使用键值数据库引擎,是NoSQL数据库的经典示例
- IBM IMS:是于1996年开发的联合分层数据库和信息管理系统。
当然,没有人称这些为“ NoSQL”数据库,甚至还没有发明SQL。直到2009年之后,这些旧的DBMS才与NoSQL相关联。
NoSQ - 关系型数据库
NoSQL是最初由Carlo Strozzi在1998年开发的关系数据库管理系的名称。
之所以命名为NoSQL(RDBMS),是因为它不使用SQL作为其查询语言。 NoSQL(RDBMS)与2009年开始的NoSQL运动没有任何联系。