非规范化与父引用与 MapReduce

Denormalization vs Parent Referencing vs MapReduce

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

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

都会访问数据库
db.collection_name.find(_id: ****). 

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

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

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

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

非规范化您的数据。

MongoDB 不执行 JOIN 的 - 句点。

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

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

中是正常的

当您有这种感觉时 "dirty",那么您应该要么接受您的性能将不是最佳的事实,要么使用不同类型的数据库,例如经典关系数据库或图形数据库。