1

我有一个高度规范化的数据模型。目前,我通过存储_id和运行顺序查询来使用手动引用来从最深的集合中获取详细信息。

引用是单向的,流程大约有 5-6 个集合。对于一个特定的用例,我必须通过从更高级别的集合中查询后续的“_id”来查询最深的集合。所以从技术上讲,我每次运行时都会访问数据库

db.collection_name.find(_id: ****). 

我的主要目标是在不极大影响其他集合的原子性的情况下优化读取。我已经阅读了关于反规范化的内容,这对我来说没有意义,因为我想保留一个选项来更改基数,因此想完全维护一个单独的集合。

我最初是在考虑使用 MapReduce 从后面进行聚合,并主要针对特定​​用例创建一个集合。但即使这样听起来也不是那么好。

在关系数据库中,我将中断子查询中的查询并执行连接以获取与初始结果相交的数据集。由于 mongodb 不支持连接,我很难弄清楚任何事情。

如果您之前遇到过类似的事情或知道如何解决它,请提供帮助。

4

1 回答 1

2

非规范化您的数据。

MongoDB 不执行 JOIN 的 - 期。

数据库上没有从多个集合中获取数据的操作。不是find(),不是aggregate(),不是MapReduce。当您需要将来自多个集合的数据拼凑在一起时,除了在应用程序层上进行之外别无他法。出于这个原因,您应该以一种可以通过查询单个集合来解决任何常见且与性能相关的查询的方式来组织数据。

为此,您可能必须创建冗余和传递依赖项。这在 MongoDB 中很正常。

当您觉得这很“肮脏”时,您应该接受这样一个事实,即您的性能将不是最佳的,或者使用不同类型的数据库,例如经典的关系数据库或图形数据库。

于 2015-07-15T08:43:35.247 回答