【问题标题】:Many-to-many relationships in CouchDB or MongoDBCouchDB 或 MongoDB 中的多对多关系
【发布时间】:2023-03-29 04:35:02
【问题描述】:

我有一个 MSSQL 数据库,我正在考虑将其移植到 CouchDB 或 MongoDB。我在 SQL 数据库中有一个多对多的关系,它在外部参照表中有数十万行,对应于关系每一侧的表中的数万行。 CouchDB 和/或 MongoDB 是否能够处理这些数据,以及格式化相关文档以进行高性能查询的最佳方式是什么?非常感谢。

【问题讨论】:

标签: mongodb many-to-many couchdb


【解决方案1】:

对于 CouchDB,我强烈建议阅读 this article 关于实体关系。

我在 CouchDB 中要注意的一件事是要小心尝试“规范化”非关系数据模型。基于文档的存储为您提供了极大的灵活性,将所有内容抽象为您能想到的尽可能多的“文档类型”很少是最好的主意。很多时候,最好将大部分数据保留在同一个文档中,除非您有明确的案例存在单独的实体。

多对多关系的一个常见用例是实现标记。 articles 介绍了您可以在 CouchDB 中使用的不同方法。它可能适用于您的要求,也可能不适用,但可能值得一读。

【讨论】:

  • 非常有趣的文章。我的关键文档类型是人员和公司,这两种类型之间是多对多的。如果我每种类型都有几万或几十万个文档,每个关系都有一个单独的文档,你认为性能会好吗?非常感谢。
  • 不会创建单独的文档来定义关系。我要么让公司文档包含人员列表,要么让人员文档包含公司列表。我认为第一个选项在大多数情况下更有意义,但您可能会做出不同的决定。
  • 您认为这样的解决方案性能会好吗?我不熟悉 CouchDB 的表现,但我的意思是,数十万家公司包含数十万人? (对我来说似乎很大:)
  • 不幸的是,您必须自己进行基准测试并查看。总是可以选择将公司列表放在每个人身上,这可能更适合像这样的大型收藏。
【解决方案2】:

由于 MongoDB 的“集合”模型类似于您当然可以维护的表 专用映射集合内的 m:n 关系(使用来自其他集合的引用文档的相关文档的 _id)。

如果可以:考虑使用嵌入式文档重新设计您的应用程序。

http://www.mongodb.org/display/DOCS/Schema+Design

一般来说:在使用 MongoDB 时,请尝试关闭对 RDBMS 的记忆。 盲目地将数据库设计从 RDBMS 复制到 MongoDB 既没有帮助,也没有建议,一般也不会奏效。

【讨论】:

  • 谢谢。我的两个主表是单独的“筒仓”,并通过外部参照表连接,我完全受限于这两个核心集合。我想使用 Mongo 的原因是主要筒仓的结构可以灵活。
猜你喜欢
  • 1970-01-01
  • 2020-12-05
  • 2013-01-02
  • 2018-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-21
  • 2014-08-15
相关资源
最近更新 更多