0

我有一个 ruby​​ 守护程序,它从数据库中选择 100 条记录并使用它执行任务。

为了让它更快,我通常创建同一个守护进程的 3 个实例。并且每一个都使用 mysqlLIMITOFFSET.

问题是有时一项任务会使用相同的数据记录执行 2 或 3 次。

所以我认为只信任数据库是不够的……因为有时两个或更多守护进程实际上可以同时收集相同的数据LIMITOFFSET

我怎样才能安全地做到这一点?避免2个实例选择相同的数据

  • 守护进程 1 => 选择从 1 到 100 的记录
  • 守护进程 2 => 选择从 101 到 200 的记录
  • 守护进程 3 => 选择从 201 到 300 的记录
4

1 回答 1

3

与其推出自己的解决方案,不如查看现有的处理后台作业的解决方案,例如Resque(个人最爱)。使用 Resque,您可以使用在您的应用程序中有意义的触发器(如果没有任何上下文就很难说)为您的每一行排队一个作业,例如您网站上的链接。在任何时候,您都会保持 X 数量的工作人员(在您的情况下为三个)运行,并且 Resque 将为您完成队列管理工作。Resque 使用 Redis 作为后端,因此它支持原子推送/弹出门(不再需要双重处理)。

Resque 还带有一个非常直观且易于使用的 Web 界面,用于监控您的工作和工人。

于 2011-04-27T03:39:15.507 回答