【发布时间】:2013-10-13 22:09:01
【问题描述】:
meteor 有什么方法可以在服务器端对已发布的集合进行批量更改?...比如更新/插入数百或数千条记录,而不将每条记录一一发送给所有订阅者?
我定期提取第三方数据,只想将所有更新或插入作为一批更新一次拉取,以便所有客户将其作为一个更改包接收,而不是数千个小型更新。一个一个地做会在我的应用 atm 中造成很大的瓶颈。
如果流星不支持此 atm,那么我是否应该直接对 mongo 进行更新并让流星在下一次 mongo 民意调查中获取它?
// imagine myChanges array with 1000 items
myChanges.forEach(function(change){
// this will trigger the sync with clients immediately... 1000 times
// currently this will practically hang my server
// i want to gather the changes here instead
MyCollection.update({_id: change.docId}, change);
});
// and trigger the sync here instead
谢谢, 雷欧
【问题讨论】:
-
您是否有任何代码/示例来描述该问题? Meteor 已经只将差异发送给客户端。与您要发布的所有数据进行初始同步,然后在您编辑数据时对客户端进行任何更改(仅限差异)。
-
diff 对我没有帮助,因为这些是真正的变化,文档正在发生变化,因此必须将它们发送给客户。问题是它们是一一发送的。例如,如果我使用某种 foreach 或循环在服务器端更改 100 个文档,那么每个循环周期将立即触发将更改发送给客户端。我想要的是保持发送直到循环完成并触发“刷新”以发送包含此循环期间完成的所有更改的批处理更新。
-
我看到客户端在 minimongo 中有类似的未记录功能:
beginUpdate()、endUpdate()、.pauseObservers()和.resumeObservers(),但在服务器端找不到任何东西
标签: meteor