如何存储关系POCO';nosql世界里有什么?

如何存储关系POCO';nosql世界里有什么?,nosql,couchdb,Nosql,Couchdb,我们正在进行一个具有关系对象模型的项目,我们希望对数据存储的某些部分使用no/sql解决方案(couchdb)。例如,有些用户和应用程序通过应用程序用户ID字段(或DDD世界中的用户属性)相互关联 将couchdb中的“用户”数据存储在“应用程序”文档中的正确方法是什么?使用id表示关系,还是将整个“用户”对象放在“应用程序”文档中?如果我将整个“用户”对象放在应用程序文档中,更新用户将导致更新所有包含整个用户信息的应用程序文档 我们有点困惑,所以我很高兴听到一些关于这方面的想法 谢谢。这两种方

我们正在进行一个具有关系对象模型的项目,我们希望对数据存储的某些部分使用no/sql解决方案(couchdb)。例如,有些用户和应用程序通过应用程序用户ID字段(或DDD世界中的用户属性)相互关联

将couchdb中的“用户”数据存储在“应用程序”文档中的正确方法是什么?使用id表示关系,还是将整个“用户”对象放在“应用程序”文档中?如果我将整个“用户”对象放在应用程序文档中,更新用户将导致更新所有包含整个用户信息的应用程序文档

我们有点困惑,所以我很高兴听到一些关于这方面的想法


谢谢。

这两种方法都是有效的,这取决于您需要的读写操作-如果用户对象几乎从未更改,那么缓慢/复杂的写入过程并不重要,您可以通过将其包含在应用程序文档中来避免大量额外的读操作。如果它变化很大,缓慢/复杂的写操作将成为主要问题,在应用程序文档中添加一个引用将更有意义。这实际上是SQL和NoSQL之间更大的区别之一——SQL有一个正确的规范化结构,使用NoSQL,您需要更多地考虑您的需求


也就是说,用户作为一个独立的对象几乎总是有意义的。但是,您不仅限于在应用程序文档中使用用户id,包括显示名称(很少更改)可能会消除几乎与包含整个用户对象一样多的读取。

感谢您的详细回答!你知道twitter、facebook等社交巨头使用的是什么样的模式吗。?例如,当我检查twitterapi文档时,大多数API函数都返回没有id的“documents”。这是否意味着他们在运行时用实际的“相关文档(对象)”替换id,并在转换为json后将其返回给用户?或者他们将实际的“相关对象”存储在文档中,并使用功能强大的服务器解决缓慢/复杂的写入等问题?非常感谢。您在这样的api中看到的与底层结构没有太多关系-对于大型公共api,您通常有要保持私有的数据或不需要公开的内部优化。事实上,巨人并不是寻找干净架构的最佳去处——他们有几年的代码更新带来的所有复杂性,我认为mysql的核心仍然有大量的缓存和优化,其中包括nosql组件,如果从头开始就可以独立使用。所以,在文档中为关系放置id或某些标识符字段是可以接受的。您认为如何做一些额外的工作来用实际的对象值替换id?我认为我们必须在运行时设置一些自定义属性来检测替换情况……像在关系数据库中那样使用id链接并没有什么错——区别在于,您不需要很多id链接,因为您有更好的方法来处理多值/复杂字段。如果您不能只获取一个文档,那么您的代码将更加复杂,但它不太可能接近从sql表中获取复杂对象所需的内容。我不想太在意替换文档中的值——如果它是一个单独的文档,则单独处理它通常是有意义的。