java - 在多个主机上并行执行

标签 java mysql multithreading parallel-processing

我的数据库中有以下数据。

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/

相关文章:

php - fatal error : Call to a member function query() on null

c# - 当我没有可用的控件时如何调用()

c# - UI Thread .Invoke() 导致句柄泄漏?

java - 将递增值插入 ArrayBlockingQueue 和线程安全

java - 在 Java 中的 JSON 对象中使用 JSON 数组

java - Vaadin EasyUpload 插件有时无法打开或找不到指定的文件

java - 为什么在 Java 中创建 'const' 关键字?

java - 循环访问对象数组并访问特定的键/值字段

mysql - 如何将 SELECT + WHERE 查询与 INSERT 查询结合起来?

php - 使用 php 和 mysql 上传多个图像并插入到表中的单独字段中