Meteor游标是否从后台更改更新到数据库?

时间:2016-08-23 16:39:12

标签: mongodb meteor cursor

我目前正在使用Meteor 1.4.1和Mongo v3.2。

我在Meteor服务器端做一些夜间后台任务(通过调用方法),主要是更新记录。这可能涉及大约100万条记录,可能需要几个小时才能完成。

目前,我在数据记录上有一个标志,在更新完成时设置为true。我的代码看起来像这样:

collection: {completed: boolean, [various other fields]}

var cursor = Collection.find({completed: false});
cursor.forEach(function(record) {
   [some work]
   Collection.update({_id: record._id},{$set: {completed: true}});
});

我的问题是:

  • 如果我要在两台机器上运行此任务,游标是否会更新 在后台,这两台机器互不相遇 并处理相同的记录?
  • 如果一台机器标记了记录,则更改为 传播到另一台机器的光标,以便该记录 从它的集合中移除?
  • 假设两台机器的速度大致相同,有多高 他们是否有可能同时获得相同的记录 时间(即第二台机器将开始在同一记录上工作 在第一台机器完成其任务并将记录标记为 完成)?
  • Bottomline,这是否会引入太多竞争条件才能可靠?

目前我的数据库服务器并没有以容量运行,所以理想情况下我想在晚上启动一些额外的机器并在所有这些机器上完成工作以更快地完成。

我的另一个选择是使用一个额外的查询术语(可能会将另一个术语传递给该方法)并使用它来实质上将记录集划分为每台计算机的一个切片,以便他们不会接收相同的记录。但理想情况下,我希望尽可能避免这种情况。

0 个答案:

没有答案