我正在考虑启动我的第一个CouchDB项目并来自ORM背景我担心如何创建可能难以维护的文档.
例如,如果我有以下型号:
A*--->(1)B
这意味着每个A对象都有一个B对象,并且有许多A可以共享一个B对象.在这种情况下,在A到B中有指针/外键.
我可以创建一个包含所有A数据和B数据的文档.但是,我遇到的问题是,如果在稍后阶段(创建10000个文档之后),我可能需要更改一些数据,这意味着我必须更新所有文档.
在ORM /规范化数据库世界中,我会简单地更新B,所有我的引用现在都是数据库.
我如何在CouchDB中处理这个问题,或者NoSQL方法不适合这些类型的情况?
JD
这个问题的一般答案是:这个问题没有一般性答案.
关键是在NoSQL中,数据结构不是由数据决定的,而是由数据结构必须支持的查询决定的.因此,NoSQL方法不是对1:N或M:N关联问题的每个实例使用相同的模式,而是根据您的特定需求使用不同的模式.例如,这些可能是:
写/读比率
特定的数据库功能,使嵌入更容易或更难
您需要支持的查询类型
有关如何对数据进行索引,分片,联合或以任何其他方式拆分或缓存的性能注意事项
一般来说,我的感觉是初学者倾向于"过度嵌入",但我只能代表MongoDB.嵌入是一个强大的功能,但嵌入的对象不是"一等公民",因此它不应该用作每个1:n关系的替代品.只为一些:)