当前位置:  开发笔记 > 数据库 > 正文

多线程处理数据库记录的最佳实践

如何解决《多线程处理数据库记录的最佳实践》经验,为你挑选了1个好方法。

我有一个进程查询表中的记录,其中PROCESS_IND='N',进行一些处理,然后更新PROCESS_IND为'Y'.

我想允许运行此进程的多个实例,但不知道避免并发问题的最佳实践是什么.

我应该从哪里开始?



1> MarkR..:

我使用的模式如下:

创建"lockedby"和"locktime"列,分别是线程/进程/计算机ID和时间戳(当您在多台计算机之间拆分处理时,您将需要计算机ID)

每个任务都会执行以下查询:

UPDATE taskstable SET lockedby =(我的id),locktime = now()WHERE lockedby IS NULL ORDER BY ID LIMIT 10

其中10是"批量大小".

然后每个任务执行SELECT以找出它被"锁定"以进行处理的行,并处理这些行

每行完成后,将lockedby和locktime设置为NULL

所有这些都是在循环中完成,因为存在的批次数量很多.

cron作业或计划任务会定期重置锁定时间过长的任何行的"lockedby",因为它们可能是由挂起或崩溃的任务完成的.然后其他人会接他们

LIMIT 10是MySQL特定的,但我认为其他数据库具有等价物.导入ORDER BY是为了避免查询不确定.

推荐阅读
LEEstarmmmmm
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有