【发布时间】:2014-07-23 06:47:22
【问题描述】:
我正在尝试编写一个从数据库读取数据并将其上传到云数据存储的进程。
如何确定数据的分区策略?我想分块查询表并在 10 个线程中处理每个块。每个线程基本上会将数据发送到云上 10 节点集群上的单个节点..
在下面的多线程代码中,数据查询将提取并发送 10 个并发请求以将数据上传到云端?非常重要的是,如果出现故障,我不会松开我的数据库查询迄今为止处理的游标,因此在数据库中,一旦处理了一批 100 条记录,它应该将这些记录状态从 PENDING 更新为 DONE该记录的数据库列。此作业将每 10 分钟运行一次以从源数据库中提取数据。
public class Caller {
public static void main(String[] args) {
ExecutorService executor = Executors.newFixedThreadPool(10);
for (int i = 0; i < 10; i++) {
Runnable worker = new DomainCDCProcessor(i);
executor.execute(worker);
}
executor.shutdown();
while (!executor.isTerminated()) {
}
System.out.println("Finished all threads");
}
}
【问题讨论】:
-
我会做一种循环。不过,这个问题似乎有点模棱两可。
-
这是一个“仅一次”的过程,还是定期运行的过程?
-
我不认为保持光标是一个好主意。改为将 ORDER BY 添加到您的查询中,并保留最后处理的 id(或时间戳,或一些更独特的字段)。在下一个查询设置限制或添加条件,如 WHERE ID>lastProcessedId
标签: java multithreading executorservice threadpoolexecutor