【问题标题】:Denormalization vs Parent Referencing vs MapReduce非规范化 vs 父引用 vs MapReduce
【发布时间】:2015-10-04 03:45:27
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

    标签: mongodb mapreduce denormalization dbref


    【解决方案1】:

    非规范化您的数据。

    MongoDB 不做 JOIN 的 - 句号。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-01
      • 1970-01-01
      • 2018-04-05
      • 1970-01-01
      • 2011-06-09
      • 2011-08-14
      • 2010-09-13
      • 2011-01-19
      相关资源
      最近更新 更多