【问题标题】:MongoDb slow aggregation with many collections (lookup)具有许多集合的 MongoDb 慢速聚合(查找)
【发布时间】:2021-02-05 21:40:24
【问题描述】:

我正在开发一个 MEAN 堆栈项目,我在聚合中使用了太多集合,因此我使用了大量查找,这会对性能产生负面影响,并使聚合的执行非常缓慢。我想知道您是否有任何建议,我发现我们可以通过为每个集合创建我需要将一组对象放入全局集合中来减少查找,但是,我正在寻找一个最佳且安全的解决方案。 作为信息,我将所有集合的索引定义到 mongo 中。

感谢您分享您的想法!

【问题讨论】:

  • 物化视图可能是要走的路。

标签: node.js mongodb typescript performance mongoose


【解决方案1】:

这是一个非常复杂的问题。即使您提供了所有架构和查询,也需要很长时间才能回答,并且非常针对您的情况(即,对以后出现的其他人没有用处)。

如果这个查询是您项目的核心,我建议您阅读非规范化并考虑重新设计一些数据库。

这里有一个很好的 article 可以帮助您入门。

非规范化允许您避免一些应用程序级连接,但代价是更新更复杂、更昂贵。如果这些字段的读取频率远高于更新频率,则对一个或多个字段进行非规范化是有意义的。

一个简单的例子来概括它:

假设您有一个带有评论集合的博客和一个用户集合 您想显示带有用户名的评论。所以你必须为每条评论加载播放器。 相反,您可以将用户名保存在评论集合和用户集合中。 然后您将有一个快速查询来显示 cmets,因为您也不需要加载用户。但是如果用户更改了他们的名字,那么你将不得不用新名字更新所有的 cmets。这是主要的权衡。

如果数据库重新设计太困难,我建议拆分为多个聚合并将它们组合在内存中(即在您的节点服务器端代码中)

【讨论】:

    猜你喜欢
    • 2020-02-16
    • 2019-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多