英文原文:A Comparison Of NoSQL Database Management Systems And Models
简介NoSQL数据尝试着提供那些关系数据库所不能提供的功能,无论是为了存储简单的键值对(key-value),更短的时间长度,高速缓存,还是保持数据的非结构化集合(比如collections),这些都是在关系型数据库和SQL(Structured Query Language)中很难实现的。 在这篇DigitalOcean的文章中,我们将介绍各种流行的NoSQL数据库系统,介绍他们的作用以及功能,因而帮助你,根据你的易用系统的需求来决定选择哪一个NoSQL数据库。 |
术语表1. 数据库管理系统2. NoSQL 数据库管理系统
3. 基于键/值的 NoSQL 数据库管理系统
4. 基于列 NoSQL 数据库管理系统
5. 基于文档的 NoSQL 数据库管理系统
6. 基于图形的 NoSQL 数据库管理系统
7. NoSQL数据库管理系统与关系型数据库管理系统的比较
数据库管理系统数据库是为各种不同的信息(数据)提供逻辑上模型化的存储空间。除了无模式以外的每个数据库,都有一个模型为所处理的数据提供结构。数据库管理系统是管理各种形状,大小和类型的数据库的应用程序(或库)。 注: 要学习更多数据库管理系统知识, 请查阅我们的文章: 了解数据库(http://link_to_10_1_understanding_databases). |
NoSQL 数据库管理系统 在过去的十年里,针对各种应用,基于各种理由,大部分开发人员或系统管理员都选择了关系型数据。尽管没有足够的灵活性,但是由于非常多的关系型数据库(RDBMS)的强大的特性,允许创建,查询以及使用复杂的数据库,已经足以应对绝大多数的需求。但是一直到不久前,各种不同的需求开始大量上升。 "NoSQL"这个概念是在十年前提出的,很有意思的是NoSQL被认定为另外一种关系数据库,然而在NoSQL背后是有不同的想法的,就是摈弃标准化SQL的使用。把各种其他的非关系型数据库作为NoSQL数据库的这种想法,在未来的几年里,这种思想会持续的增长的。 |
从设计上,NoSQL 数据库和管理系统都是非关系型(也称非范式型)的。它们并非基于同一种模型(如关系型数据库的关系模型),而是每种数据库依据其不同的功能目标,选择了不同的模型。 NoSQL 数据库不同的操作模型和功能系统几乎有一大把:
如 Redis,MemcacheDB等。
如 Cassandra,HBase等。
如 MongoDB,Couchbase等。
如 OrientDB,Neo4J等。 为了更好地理解每种数据库管理系统的不同角色和底层技术,我们快速地过一遍这4种操作模型吧。 |
基于键 / 值在我们了解 NoSQL 模型的旅程中,第一站先来到基于键/值对的数据库系统,因为这可以说是最基础和最骨干的 NoSQL 实现。 这一类的数据库的原理在于键值对应,类似字典类型(dictionary)。其中没有结构,也没有关系。在连接上数据库服务器(如 Redis)后,应用程序可以声明一个键(如 the_answer_to_life),并且给出对应的值(如 42)。此后只要提供同样的键,就能检索出这个值。 键/值数据库系统一般是用来快速存储基础信息的,有时也用来存储不那么基础的信息——之前经过处理,例如,CPU 和内存的密集计算。这类数据库极其快速,效率很高,并且通常很容易扩展。 注:在计算机术语中,字典类型通常指的是一种特定的数据对象。这种类型由一系列独立的键值对集合组成。 | |
基于列的存储
|
基本上,基于列的NoSQL数据库就是个二维数组,每个键(即 行/记录)都连接有一个或多个 键/值对,这些管理系统允许非常巨大和非结构化的数据被保存和使用(例如有非常多信息的记录)。 这些数据库通常用在当必须存储大量信息记录,简单的 键/值对 不足以应对时。基于列实现的数据库管理系统,模式自由的模型,扩容性非常好。 |
基于文档基于文档的 NoSQL 数据库系统,就像一波瞬间席卷了许多人的最新潮流。这类数据库系统工作原理与基于列的数据库类似;然而,它们支持更深层的嵌套,能得到复杂的结构(例如,文档包含在一个文档里,而这个文档又包含在另一个文档里)。 文档克服了基于列的数据库中键/值嵌套只能有一级或两级的限制。基本上,无论多么复杂、无论什么形态的结构都能形成一个文档,而文档就可以用这类数据库系统来储存。 尽管它们有这样强大的特性,并且支持以独立的键来查询记录,基于文档的数据库系统相比其他系统仍然有自己的问题和不足之处。例如,检索记录中的一个值就需要牵扯出整个记录,update 也是如此,而这都会严重地影响性能。 |
基于图形最后来看看 NoSQL 数据库系统中的奇葩——基于图形的系统。 基于图形的数据库系统模型表示数据的方式与上文提到的三种模型截然不同。他们使用树形的结构(也就是所说的“图形”),包括结点和通过关系(relation)相互连接的边。 与数学类似,某些特定操作在这类模型上会格外简单。这要感谢树形结构能链接信息、将相关信息(例如相关联的人)分组的本质。 这类数据库通常应用于关系(connection)需要建立明确边界的场景。例如,当你注册随便一个社交网络时,你朋友与你的关系,和他们朋友的朋友与你的关系,使用基于图形的数据库系统来处理会简单很多。 |
基于键 / 值的 NoSQL 数据库系统键/值型的数据存储往往表现很好,容易使用,并且通常有很好的扩展性。 流行的基于键 / 值的数据库一些流行的基于键/值的数据存储如下:
内存中的键/值存储,附有可选的持久化功能。
高度分布式的,自我复制(replicated)的键/值存储。
基于内存的分布式键/值存储。 何时使用?基于键/值的数据存储一些常见的使用场景有:
快速缓存数据,以供将来——可能是频繁地——使用。
部分键/值存储(例如 Redis)支持list,set,queue等类型。
可以用来实现观察者/发布订阅(Pub/Sub)模式。
需要维护一个状态的应用很适合使用键/值存储。 基于列的 NoSQL 数据库系统基于列的数据存储非常强大,它们能够可靠地存储非常大规模的重要数据。尽管在数据的组成方面并不“灵活”,这类数据库仍然功能强大,性能良好。 |
流行的基于列的数据库一些流行的基于列的数据存储有:
建立在 BigTable 和 DynamoDB 基础上的基于列的数据存储。
为 Apache Hadoop 设计的数据存储,创意来自 BigTable。 何时使用?基于列的数据存储的一些流行用例:
如果需要长时间保存一个巨大的属性和值的集合,基于列的数据存储是非常方便的。
基于列的数据存储天生是高度可扩容的。他们可以处理那些有可怕数量的信息。 基于文档的 NoSQL 数据库管理系统基于文档的数据存储非常适于保存许多不相关的复杂信息,不同结构之间可以有高度的可变性。 |
流行的基于文档的数据库流行的一些基于文档的数据存储:
基于JSON, 兼容“内存缓冲”的基于文档的数据存储。
一个冲破性的基于文档的数据存储。
一个非常流行和功能很好的数据库。 使时使用:使用基于文档的数据存储的一些普遍情况:
基于文档的数据存储允许很深的嵌套,和复杂的数据结构。
基于文档的数据存储的最具决定性的功能之一是他们与应用程序交互的方式:利用对JS友好的JSON。 基于图形的NoSQL数据库管理系统基于图形的数据存储提供了一个非常独特的功能,是任何其他数据库管理系统无法相比的。 |
流行的基于图形的数据库一些流行的基于图形的数据库如下:
一个非常快速的基于图形和文档的混合 NoSQL 数据存储,使用 Java 编写,包含几种不同的操作模式。
一个非范式的,基于图形的 Java 编写的数据存储,非常热门而强大。 何时使用?基于图形的数据库一些常见的使用情景如下:
如同在简介中说过的一样,图形数据库在处理复杂但相关联的信息方面极其高效而易用。例如两个实体和与它们不同层次间接连接的实体之间的关联。
图形数据库尤擅牵涉到关系的各种情形。以关系的方式来建模数据、为各种数据分类,用这类数据库可以处理得很好。 | |
NoSQL数据库与关系数据库管理系统的比较为了对NoSQL解决方案不同于关系数据库管理系统之处有一个清晰画面,让我们创建一个快速的比较表: 何时使用NoSQL数据库
如果数据集将会非常大,来自NoSQL家族的数据库管理系统更容易实现持续扩容。
NoSQL数据库通常更快,对于写入来说有时非常快。读取也可以很快,这取决于NoSQL数据库的类型和查询的数据。
| |
关系数据库管理系统从一开始就需要结构化。NoSQL解决方案提供了大量的灵活性。
NoSQL数据库正在迅速增长,今天他们正在积极建立-厂商试图解决共同的问题,其中一个显然是复制和缩放。不像关系数据库管理系统那样,NoSQL解决方案可以很容易的在簇上扩容和工作。
当来选择一个NoSQL数据存储时,正如我们已经讨论的,有多种模式,你可以从中选择获得最满意的数据库管理系统——这取决于你的数据类型。 |