基于文档的数据库和基于键/值的数据库之间的区别?

我知道有三种不同的、流行的非 sql 数据库类型。

  • 键/值: Redis,东京内阁,Memcached
  • ColumnFamily: Cassandra,HBase
  • 文档: MongoDB,CouchDB

我读了很多关于它的博客,但是没有理解那么多。

我了解关系数据库,并熟悉 MongoDB/CouchDB 等基于文档的数据库。

有人能告诉我,这两者之间的主要区别是什么?

58888 次浏览

主要区别在于数据模型和查询能力。

键值存储

第一种类型非常简单,可能不需要任何进一步的解释。

数据模型: 超过键值存储

虽然对于像 Cassandra 这样的数据库来说,正确的名称上有 一些争论,但是我想把它们称为 专栏-家庭式商店。虽然键值对是 Cassandra 的重要组成部分,但它并不仅限于此。它允许您嵌套键值对,这样一个键可以引用多个子键值对。

但是,您不能无限期地嵌套键-值对。您被限制为三级(列族)或四级嵌套(超级列族)。如果您对术语列族没有印象,请参阅 WTF is a SuperColumn文章,它很好地解释了 Cassandra 的数据模型。

文档数据库 ,例如 CouchDB 和 MongoDB 以 JSON objects的形式存储整个文档。您可以将这些对象视为嵌套的键-值对。与 Cassandra 不同,您可以随意嵌套键-值对。JSON 还支持数组并理解不同的数据类型,如字符串、数字和布尔值。

正在查询

我相信列族存储只能通过键查询,或者通过编写 map-reduce 函数来查询。不能像在 SQL 数据库中那样查询值。如果应用程序需要更复杂的查询,则应用程序必须创建和维护索引以访问所需的数据。

文档数据库也支持按键查询和 map-reduce 功能,但也允许按值进行基本查询,如“给我所有发帖超过10次的用户”。文档数据库在这方面更加灵活。

Ayende 对 Key-Value 和 Document 数据库之间的区别给出了一个很好的解释:

A document database is, at its core, a key/value store with one major 而不是仅仅存储任何 blob,< strong > 一个文档 db requires that the data will be store in a format that the database can 在大多数 doc dbs 中,这意味着我们 现在可以 允许查询对文档数据。