在谈论MongoDB vs Cassandra时,“面向文档”与“键值”是什么意思?

使用基于文档的NoSQL选项可以使您通过KV商店购买什么,反之亦然?

键值存储提供了最简单的数据模型,正如其名称所暗示的那样:存储系统存储由键索引的值。 您仅限于通过键进行查询,而且值不透明 ,商店对其不了解。 这允许非常快速的读写操作(一个简单的磁盘访问),我将这个模型看作是一种非易失性caching(即,如果您需要快速访问长时间数据的密钥,非常适合)。

面向文档的数据库扩展了以前的模型,数值以结构化格式(文档,名称)存储,数据库可以理解。 例如,文档可以是博客post 并且以非规范化的方式存储评论标签。 由于数据是透明的 ,商店可以做更多的工作(比如索引文档的字段),而且不限于按键查询。 正如我所暗示的,这样的数据库允许通过单个查询获取整个页面的数据,非常适合于面向内容的应用程序(这就是为什么像Facebook或Amazon这样的大型网站喜欢它们)。

其他types的NoSQL数据库包括面向列的存储graphics数据库甚至对象数据库 。 但是这超出了这个问题。

也可以看看

  • 比较文档数据库和键值存储
  • NoSQL景观分析
  • 关于NoSQL数据库的思考(分类和用例)

那么在过去一个月左右我就一直在调查NoSQL。 我认为一般可以这样说

  • KV商店不知道实际存储的密钥的价值内容
  • 基于文档,您可以在值内容中定义二级索引,因为db知道文档结构(例如博客文章的标签)。
  • 每个NoSQL解决scheme都有一些特定的function需要考虑,比如
    • KV商店中的特殊数据types(例如像redis中的左/右popup/推送)
    • 容易放大/缩小集群riak说,它(我还没有尝试过呢…)
    • 可插拔的数据存储在Voldemort中
    • 内置的Webconfiguration和Web应用程序支持,如CouchDB / couchapp

面向文档的数据库或文档存储器用于存储,检索和pipe理面向文档的信息,这是半结构化的数据。键值存储是面向文档数据库的inheritance。 不同之处在于数据的处理方式。 在键值存储中,数据被认为对数据库本身是不透明的,而面向文档的系统依赖于文档中的内部结构来提取数据库引擎用于进一步优化的元数据。

如果我们处理MOngoDb和Cassandra之间的区别。 MongoDB的行为很像一个关系数据库。 它的数据模型由顶层的数据库,然后是像MySQL中的表(例如)中的表,然后包含集合中包含的文档(如MySQL中的行)组成。 每个文档都有一个字段和一个值,这与MySQL中的列和值类似。 字段可以是简单的键/值,例如{'name':'David Mytton'},但也可以包含其他文件,例如{'name':{'first':David,'last':'Mytton'}}。 在卡桑德拉文件被称为“列”,这实际上只是一个关键和价值。 例如{'key':'name','value':'David Mytton'}。 还有一个时间戳字段,用于内部复制和一致性。 该值可以是单个值,但也可以包含另一个“列”。 这些列存在于列族中,它们根据列中的特定值(通过键引用)对数据进行sorting。

但是,在顶层有一个密钥空间,类似于MongoDB数据库。