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

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

  • 键/值:Redis、Tokyo Cabinet、Memcached
  • 列族:Cassandra、HBase
  • 文档:MongoDB、CouchDB

我已经阅读了关于它的长篇博客,但并不了解。

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

谁能告诉我这些和列表中的前两个之间的主要区别是什么?

最佳答案

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

键值存储

第一种很简单,大概不需要解释了。

数据模型:不仅仅是键值存储

虽然有some debate关于 Cassandra 等数据库的正确名称,我想将它们称为 column-family stores。尽管键值对是 Cassandra 的重要组成部分,但不仅限于此。它允许您嵌套键值对,因此一个键可以引用多个子键值对。

您不能无限期地嵌套键值对。您仅限于三个级别(列族)或四个级别的嵌套( super 列族)。如果术语列族没有响起,请参阅 WTF is a SuperColumn文章,很好的解释了 Cassandra 的数据模型。

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

查询

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

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

https://stackoverflow.com/questions/3554169/

相关文章:

ruby-on-rails - Mongodb:使用前需要了解什么?

javascript - Mongoose,使用查找选择特定字段

javascript - 如何跨 NodeJs 应用程序和模块正确重用与 Mongodb 的连接

javascript - 在 Mongoose 中引用另一个模式

mongodb - 什么是 Mongoose 错误 Cast to ObjectId failed

mongodb - 如何查看 mongodb 从 mongo shell 监听的端口?

windows - MongoDB 新手无法运行命令 mongo

mongodb - 如何从 Mac OS 终端连接到远程 mongo 服务器

mongodb - Meteor 有哪些安全机制?

node.js - 在 Mongoose 中填充嵌套数组