作为meteor应用程序的一部分,我有一个服务器端,它通过插入/更新集合来获取信息的POST消息,以馈送到web客户端。到目前一切尚好。然而,有时这些更新可能相当大(一次50K条记录,每5秒)。在我开始使用批插入包,然后是Mongo的低级batch.find.update()和batch.execute()之前,我一直很难跟上这一步。
然而,即使有50K的记录,仍然有大量的处理工作在进行(它会进行一些计算、分析等)。我希望能够“处理”这个逻辑,这样主事件循环就可以继续下去了。然而,我不确定是否有一种真正简单的方法来在Meteor中创建“真正的”线程。因此,我想知道至少“批处理”工作的最佳/适当方式,以便每N个(例如1K左右)记录我可以释放事件循环,以处理其他事件(如一些客户端DDP消息等)。然后再做1K记录,等等,直到我需要的记录完成。
我认为解决方案在于使用光纤/期货--这似乎是流星方式--但我不能肯定这是正确的,或者像"setTimeout()“和/或"setImmediate()”这样的低级想法更合适。
蒂娅!
发布于 2015-12-09 19:45:17
Meteor不是一刀切的工具。我认为您应该将meteor应用程序与批处理分离。设置一个单独的meteor实例,或者更好地设置一个纯node.js服务器来处理这些请求和批处理。它看起来像这样:
如果您在此实例中使用(https://www.npmjs.com/package/mongodb).
mongo中的更新将很快反映在meteor中。我遇到了类似的情况,使用节点服务器进行一些批量数据收集,然后将其传递到cassandra数据库中。然后,我使用pig拉丁语对这些数据运行了一些批处理操作,然后将其插入到mongo中。我的meteor应用程序几乎可以立即反应地显示新数据。
发布于 2015-12-10 10:55:42
您可以在服务器方法中调用this.unblock()
,以允许代码在后台运行,并立即从该方法返回。请参见下面的示例。
Meteor.methods({
longMethod: function() {
this.unblock();
Meteor._sleepForMs(1000 * 60 * 60);
}
});
https://stackoverflow.com/questions/34187156
复制