我的数据库中有以下数据。
LOGANAME DOWNLOADED
LOGNAME 字段告诉我要下载和处理哪些日志,DOWNLOADED 是一个标志,当我成功下载日志时,我将其设置为 true。由于有很多日志需要下载,我希望运行下载过程并将其标记为通过多个主机下载。所以基本上我进行数据库查询来获取所有 DOWNLOADED='false' 的日志名,然后下载它们并设置 DOWNLOADED='true' 。现在,当我在多个主机上运行相同的进程时,所有主机都会下载所有日志。有没有某种方法可以对此进行编码以确保主机不会下载相同的日志?
最佳答案
在从进程下载任何日志之前,通过触发 Update
SQL 将 DOWNLOADED
标志标记为 true
UPDATE TABLENAME SET DOWNLOADED = `true` where DOWNLOADED = `false` AND LOGNAME = LOG_NAME_TO_DOWNLOAD
并检查UPDATE
语句的输出,了解有多少行受到影响。如果受影响的行数大于 0,则继续从该进程下载日志,否则跳过该日志文件并处理另一个日志文件。
我认为LOGNAME
是唯一的,即该列是主键
或具有所有不同的值。
关于java - 在多个主机上并行执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20392305/