noSQL和规范化数据

JD.*_*JD. 5 couchdb mongodb nosql

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

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

A*--->(1)B

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

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

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

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

JD

mne*_*syn 5

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

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

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

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

  • 同意.我认为有两个主要指标:a)您更改嵌入对象的次数b)每次显示父级时是否需要显示嵌入对象?如果是这样,你在做什么设备(例如,查询可能与否).因为如果它每100000个文档只更改一次,那么嵌入它可能更容易,并且每次将对象显示给用户时更改它与查询 (3认同)