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

时间:2010-08-24 07:07:10

标签: mongodb couchdb cassandra redis non-relational-database

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

  • 键/值:Redis,Tokyo Cabinet,Memcached
  • ColumnFamily:Cassandra,HBase
  • 文档:MongoDB,CouchDB

我已经阅读了很多关于它的博客而没有那么多了解。

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

有人可以告诉我这些与名单上的两位前者之间的主要区别是什么?

2 个答案:

答案 0 :(得分:70)

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

键值存储

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

数据模型:超过键值存储

虽然Cassandra等数据库的正确名称有some debate,但我想称之为列族商店。虽然键值对是Cassandra的重要组成部分,但并不仅限于此。它允许您嵌套键值对,因此键可以引用多个子键值对。

但是,您无法无限地嵌套键值对。您只能使用三个级别(列族)或四个级别的嵌套(超列族)。如果列族不响铃,请参阅WTF is a SuperColumn文章,这是对Cassandra数据模型的一个很好的解释。

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

查询

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

文档数据库也支持按键和map-reduce功能查询,但也允许您按值进行基本查询,例如“为所有用户提供超过10个帖子”。文档数据库以这种方式更加灵活。

答案 1 :(得分:13)

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

  

文档数据库的核心是一个主要的键/值存储   例外。 文档数据库,而不仅仅是在其中存储任何blob   要求数据将以数据库可以的格式存储   理解(即JSON,XML等)。在大多数doc dbs中,这意味着我们   现在可以允许对文档数据进行查询