【问题标题】:Performance of large collection in Meteor 1.0.XMeteor 1.0.X 中大集合的性能
【发布时间】:2015-03-03 07:09:15
【问题描述】:

Meteor 世界已经有了很大的发展,因此很难找到适用于当前版本的答案,因为您可以为旧的过时版本找到过多的答案。

我有一个应用程序,它在特定集合中包含大量数据。很多我的意思是介于 10k-100k 之间,而且很有可能更多。本质上它是日志数据,我需要在没有分页的表中显示结果(如尾部)。在研究优化大型集合的方法时,我不断遇到类似this 之类的东西,这些东西似乎适用于旧版本的 Meteor。

所以,在我看来,我的选择是:

  • 使用快速渲染插件在订阅之前显示页面(至少这是我对其工作原理的理解)。
  • 使用某种渐进式发布功能,它首先加载有限的更多相关数据位,然后通过扩展窗口/限制渐进式加载剩余数据(但不确定这是否会导致服务器负载更重)。似乎有一个“渐进式发布”插件,但它似乎不再处于积极开发中。
  • 通过索引优化查找(创建集合时如何指定?)
  • 进一步分析和优化模板(不确定如何)。
  • 其他一些我还没有想到的方法...
  • 以上所有内容的某种组合。

以这种方式发布和呈现大量数据的正确方法是什么?

【问题讨论】:

  • 所有这些数据都需要反应吗?如果没有,那么我将跳过 Meteor DDP 进行这部分。只需使用常规 ajax 调用来获取您的数据并呈现您的表格。使用 Meteor DDP,所有数据都将进入客户端上的 MiniMongo,然后尝试使用反应性数据更新 100k+ 行,这对大多数客户端来说可能是一个问题,无论发布查询的优化程度如何。索引 MongoDB:joshowens.me/how-to-optimize-your-mongo-database-for-meteor-jsdocs.mongodb.org/manual/reference/method/…
  • 现有数据根本不会改变,但新文档会实时添加到集合中。有没有办法静态加载部分数据,其余部分通过 DDP 加载?也许我可以加载数据,然后发布“仅在此之后查找条目”的出版物?
  • 我之前没有意识到这一点,但再次阅读文档我看到你可以将集合设置为不响应 (docs.meteor.com/#/full/find)、collection.find({}, {reactive: false}); 但我认为它仍然会拉新记录.然后使用查询调优/索引它可能对你有用。
  • 我尝试关闭集合的反应性,但这似乎没有多大帮助。由于我的加载时间根本没有改变,我没有继续确定是否仍然有新记录。我正在研究编写一些东西将负载分成两部分需要什么,一个允许新内容的“反应性”部分流入,以及一个简单地读取旧数据的非反应部分。

标签: meteor meteor-publications


【解决方案1】:

我将假设“优化”意味着减少查询时间。

始终从最大的收益开始。 除非您要发布整个集合,或者在_id 上进行查询,否则您希望使用_ensureIndex 创建索引。在 mongodb 网站上或通过搜索其他问题获取更多信息。 http://docs.mongodb.org/manual/reference/method/db.collection.ensureIndex/

其次,将字段限制为您需要的信息。例如{fields: {a:1, b:1}}http://docs.meteor.com/#/full/fieldspecifiers

第三,不要排序。

如果这还不够好,请提出另一个关于架构和查询详细信息以及所需 UI 的问题,以便我们更好地了解反应性以及为什么您不能使用某种形式的分页。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-25
    • 1970-01-01
    • 2019-09-17
    • 2015-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-30
    相关资源
    最近更新 更多