0
我有一个ruby守护进程,它从数据库中选择100条记录并使用它执行任务。如何在Ruby中的多个进程之间分配任务?
为了使速度更快,我通常创建3个相同守护进程的实例。每个人使用mysql LIMIT
和OFFSET
来选择不同的数据。
问题是有时一个任务在相同的数据记录中执行2或3次。
所以我认为仅仅信任数据库LIMIT
和OFFSET
是不够的......因为有时候2个或更多的守护进程可以同时收集相同的数据。
我该如何安全地做到这一点?避免2个实例选择相同的数据
- 守护程序1 =>选择从1至100
- 守护程序记录2 =>选择从101到200
- 守护程序记录3 =>选择从201到300的记录
目前我正在使用ruby的守护进程gem(github.com/mikehale/daemons)。我所做的是检查有多少实例正在运行,并将带有LIMIT和OFFSET的PARAMS传递给每个守护进程实例。所以......如果我发送1000封电子邮件,每个守护进程实例将选择diferents 100数据库的行。但有时候我会收到一行或两封或三封电子邮件。这意味着2守护进程的实例正在选择相同的数据库行。 – newx 2011-04-27 13:00:46
我明白你的问题是什么。我想说的是,你不应该浪费你的时间来处理这个逻辑。人们已经投入了数百小时的时间来创建适合处理后台工作的图书馆。你应该专注于自己的工作。这就是说,我相信你刚刚在你的SQL中遇到了一个错误。 – bloudermilk 2011-04-27 18:35:03
感谢您的回答......我正在审阅Resque以了解如何改进我的应用程序......非常感谢 – newx 2011-05-05 19:46:07