我听说过很多关于像 CouchDB 这样的面向文档的数据存储。我了解 BigTable 的用途,例如 Cassandra 等商店。读完这个问题后,我想知道使用文档存储的条件是什么?
问问题
5595 次
2 回答
30
Bigtable 和 Cassandra 等列族存储的查询能力非常有限。应用程序负责维护索引以查询更复杂的数据模型。
文档数据库允许您查询内容,而不仅仅是密钥。它还将为您管理索引,从而降低应用程序的复杂性。
领域驱动设计提倡使用聚合和价值对象。正如 Ayende 指出的那样,(复杂的)聚合是存储为单个文档的非常自然的候选者,而不是在多个表或列族上对其进行规范化。这将降低持久层的复杂性。相关数据分散在多个节点上的可能性也较小,因为所有数据都包含在单个文档中。
如果您的应用程序需要存储多态对象,文档数据库也是不错的选择。当然,这也可以存储在 Cassandra 中,但您不会有那么多查询功能。至少不是开箱即用。
将文档数据库想象成一辆豪华跑车。它不需要专业的司机(阅读:复杂的应用程序)将您从 A 带到 B,它具有空调和舒适座椅等功能,并且可以在可接受的时间内完成高可扩展性赛道。但是,如果你想在高可扩展性赛道上创造单圈记录,你将需要一名专业的车手和一辆高度优化的汽车(例如 Cassandra),它缺乏空调等功能。
于 2010-07-31T13:28:22.220 回答
9
CouchDB 的另一个特性是您可以创建这些聚合,而不是手动存储的文档,而是作为视图(从存储的数据派生并自动更新)。
这就像电动车窗、加热座椅或踢脚音响。
于 2010-07-31T17:22:56.053 回答