noSQL和规范化数据

时间:2011-12-02 14:30:50

标签: mongodb couchdb nosql

我正在考虑启动我的第一个CouchDB项目并来自ORM背景我担心如何创建可能难以维护的文档。

例如,如果我有以下型号:

A * --->(1)B

这意味着每个A对象都有一个B对象,并且有许多A可以共享一个B对象。在这种情况下,A到B中有指针/外键。

我可以创建一个包含所有A数据和B数据的文档。但是,我遇到的问题是,如果在稍后阶段(创建10000个文档之后),我可能需要更改一些数据,这意味着我必须更新所有文档。

在ORM /规范化数据库世界中,我会简单地更新B,所有我的引用现在都是数据库。

如何在CouchDB中处理这个问题,或者NoSQL方法不适合这些类型的情况?

JD

1 个答案:

答案 0 :(得分:5)

这个问题的一般答案:这个问题没有一般性答案。

关键是在NoSQL中,数据结构不是由数据决定的,而是由数据结构必须支持的查询决定的。因此,NoSQL方法不是对1:N或M:N关联问题的每个实例使用相同的模式,而是根据您的特定需求使用不同的模式。例如,这些可能是:

  • 写入/读取比率
  • 使嵌入更容易或更难的特定数据库功能
  • 您需要支持的查询类型
  • 有关如何对数据进行索引,分片,联合或以任何其他方式拆分或缓存的性能注意事项

一般来说,我的感觉是初学者倾向于“过度嵌入”,但我只能代表MongoDB发言。嵌入是一个强大的功能,但嵌入对象不是“一等公民”,因此它不应该用作每个1:n关系的替代品。仅限于某些人:)