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

我知道有三种不同的stream行types的非sql数据库。

  • 重点/价值:Redis,东京内阁,Memcached
  • Column Family:Cassandra,HBase
  • 文档:MongoDB,CouchDB

我读了很长一段时间的博客,却没有太多的理解。

我知道关系数据库,并且可以像MongoDB / CouchDB那样处理基于文档的数据库。

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

主要区别是数据模型和查询function。

重要价值商店

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

数据模型:比关键值存储更多

尽pipe对Cassandra等数据库的正确名称存在一些争议 ,但我想称之为专栏商店 。 虽然键值对是Cassandra的重要组成部分,但并不仅限于此。 它允许你嵌套键值对,所以一个键可以引用多个子键值对。

不能无限期地嵌套键值对。 限于三个层次(柱系列)或四个层次(超柱系列)。 如果专栏名称没有响起,请参阅WTF是一篇SuperColumn文章,这是对Cassandra数据模型的一个很好的解释。

文档数据库 (如CouchDB和MongoDB)以JSON对象的forms存储整个文档。 您可以将这些对象视为嵌套的键值对。 与Cassandra不同,您可以根据需要嵌套键值对。 JSON也支持数组并理解不同的数据types,比如string,数字和布尔值。

查询

我相信只能通过关键字查询专栏商店,或者通过编写map-reducefunction。 你不能像在SQL数据库中那样查询值。 如果您的应用程序需要更复杂的查询,您的应用程序将不得不创build和维护索引才能访问所需的数据。

文档数据库还支持通过键和map-reduce函数进行查询,还允许您按价值进行基本查询,例如“给我所有用户10个以上的职位”。 文档数据库以这种方式更加灵活。

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

文档数据库的核心是一个关键/值存储,但有一个主要的例外。 文档数据库不是只存储任何数据块,而是要求数据以数据库可以理解的格式 (即JSON,XML等)存储。 在大多数文档中,这意味着我们现在可以允许查询文档数据。