【发布时间】:2011-03-23 13:00:51
【问题描述】:
我听说过很多关于像 CouchDB 这样的面向文档的数据存储。我了解 BigTable 的用途,例如 Cassandra 等商店。在阅读this question 之后,我想知道使用文档存储的条件是什么?
【问题讨论】:
标签: sql nosql couchdb cassandra document-based
我听说过很多关于像 CouchDB 这样的面向文档的数据存储。我了解 BigTable 的用途,例如 Cassandra 等商店。在阅读this question 之后,我想知道使用文档存储的条件是什么?
【问题讨论】:
标签: sql nosql couchdb cassandra document-based
Bigtable 和 Cassandra 等列族存储的查询能力非常有限。应用程序负责维护索引以查询更复杂的数据模型。
文档数据库允许您查询内容,而不仅仅是键。它还将为您管理索引,从而降低您的应用程序的复杂性。
Domain-driven design 宣传使用聚合和值对象。 As Ayende points out,(复杂)聚合是存储为单个文档的非常自然的候选者,而不是在多个表或列族上规范化它们。这将降低持久层的复杂性。相关数据分散在多个节点上的可能性也较小,因为所有数据都包含在一个文档中。
如果您的应用程序需要存储多态对象,文档数据库也是不错的选择。当然,这也可以存储在 Cassandra 中,但您不会有那么多查询功能。至少不是开箱即用。
将文档数据库想象成一辆豪华跑车。它不需要专业的司机(阅读:复杂的应用程序)将您从 A 带到 B,它具有空调和舒适座椅等功能,并且可以在可接受的时间内完成高可扩展性赛道。但是,如果您想在高可扩展性赛道上创造单圈记录,您将需要一名专业车手和一辆高度优化的汽车(例如 Cassandra),而这辆车缺乏空调等功能。 p>
【讨论】:
CouchDB 的另一个特性是您可以创建这些聚合,而不是手动存储的文档,而是作为视图(从存储的数据派生并自动更新。)
这就像电动车窗、加热座椅或踢脚音响。
【讨论】: