【发布时间】: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