在谈论MongoDB与Cassandra时,"面向文档"与键值的含义是什么意思?

tes*_*akt 108 mongodb cassandra nosql

使用基于文档的NoSQL选项会让您在KV商店购买什么,反之亦然?

Pas*_*ent 134

一个key-value存储提供了最简单的数据模型和正是顾名思义:它是存储由键索引值的存储系统.你受限于键查询,值是不透明的,商店不知道任何关于他们.这允许非常快速的读写操作(简单的磁盘访问),我将此模型视为一种非易失性缓存(即,如果需要通过密钥快速访问长期数据,则非常适合).

面向文档的数据库延伸先前模型和值被存储在一结构化的格式(文件,因此得名),该数据库可以理解.例如,文档可以是博客文章,评论标签以非规范化方式存储.由于数据是透明的,因此商店可以执行更多工作(例如索引文档的字段),并且您不仅限于按键查询.正如我所暗示的,这样的数据库允许通过单个查询获取整个页面的数据,并且非常适合面向内容的应用程序(这就是像Facebook或亚马逊这样的大型网站喜欢它们的原因).

其他类型的NoSQL数据库包括面向列的存储,图形数据库甚至对象数据库.但这超出了这个问题.

也可以看看

  • 这个定义可能有点用词不当。基本上两者都只是键值存储。在一种情况下,“值”是不透明的,数据库对值中放入的内容一无所知——只能通过键进行查询。在另一种情况(“文档”)中,数据库可以更好地理解值中的内容,并且可以根据值的某些属性生成索引等并供以后查询。 (3认同)
  • 键值存储不必通过磁盘访问来完成,在某些实现中将它们称为非易失性是不正确的。您可以在内存中创建键值存储,而无需直写或回写到非易失性存储介质。将数据称为长期存在也是一种误导,因为数据的生命周期与您检索它的方式无关。 (2认同)
  • @Skocdopole DynamoDB“真的”不允许对非键列进行查询,不是吗?它基本上扫描整个数据库并根据查询过滤结果。我了解 DynamoDB 允许我们创建二级索引,但这些索引需要单独的时间来创建 - 这让我认为 DynamoDB 然后会单独索引所有记录 - 本质上可能是创建一个新的“键值”表示形式? (2认同)

小智 16

好吧,我在过去一个月左右一直在调查NoSQL.我认为它通常可以说是类似的东西

  • KV商店不知道实际为密钥存储的价值内容
  • 基于文档允许您在值内容中定义二级索引,因为数据库知道文档结构(例如博客文章的标签).
  • NoSQL解决方案每个都有特定的功能,应该加以考虑,例如
    • KV商店中的特殊数据类型(例如,使用redis中的左/右pop/push设置)
    • 像riak所说的那样容易扩展/缩小集群(我还没试过......)
    • 可插拔数据存储,如Voldemort
    • 内置Web配置和Web应用程序支持,如CouchDB/couchapp


mdi*_*olf 5

最大的区别是面向文档的数据库支持二级索引,而K/V不支持。一般来说,面向文档的数据库倾向于允许更丰富的查询,允许范围查询、排序和其他类型的“高级”操作。