我有一个数据库表,其中包含一些要处理的记录。该表有一个标志列,表示以下状态值。1 - 准备好处理,2 - 成功处理,3 - 处理失败。
.net 代码(重复过程 - 控制台/服务)将获取准备好处理的记录列表,并遍历它们并尝试处理它们(不是很长),根据成功或失败更新状态。
为了获得更好的性能,我想为此进程启用多线程。我正在考虑产生 6 个线程,每个线程抓取一个子集。
显然我想避免让不同的线程处理相同的记录。我不想在数据库中有一个“正在处理”标志来处理线程崩溃导致记录挂起的情况。
我看到这样做的唯一方法是获取可用记录的完整列表并为每个线程分配一个组(可能是 id)。如果一个单独的线程失败,它的未处理记录将在下一次进程运行时被拾取。
在将组分配给线程之前,是否有其他替代方法可以划分组?