当前位置:  开发笔记 > 后端 > 正文

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

如何解决《基于文档和基于键/值的数据库之间的区别?》经验,为你挑选了2个好方法。

我知道有三种不同的,流行的非SQL数据库类型.

键/值:Redis,Tokyo Cabinet,Memcached

ColumnFamily:Cassandra,HBase

文档:MongoDB,CouchDB

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

我知道关系数据库,并掌握基于文档的数据库,如MongoDB/CouchDB.

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



1> Niels van de..:

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

键值商店

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

数据模型:超过键值存储

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

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

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

查询

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

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


@ajsie:正确的键值存储不支持嵌套的键值对.他们中的大多数确实支持专门的值,例如列表.Cassandra与RDBMS非常不同,因为它们都旨在解决非常不同的问题.RDBMS系统针对需要复杂查询的关系数据,而Cassandra旨在处理大量非关系数据.当然,有可能*将RDBMS数据库移动到Cassandra,但确实不是很聪明.他们每个人都有自己的用途.
因此,像redit这样的键值存储不允许您存储嵌套的key:values?从您的描述出发,然后将整个数据库(来自RDBMS)存储到Cassandra中听起来不是很聪明,因为它不允许灵活的查询并且嵌套深度有限,对吗?

2> Ashraf Alam..:

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

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

推荐阅读
云聪京初瑞子_617
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有