我正在尝试编写一个从数据库中读取数据并将其上传到云数据存储区的进程。
如何确定数据的分区策略?我想以块的形式查询表并处理10个线程中的每个块。每个线程基本上都会将数据发送到云上10节点集群上的单个节点。
在下面的多线程代码中,dataquery将提取并发送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");
}
}
答案 0 :(得分:0)
在启动worker之前执行select操作,以确定要处理的记录的所有主ID的设置或范围(第一个ID - 最后一个ID)。为每个工人分配一个子集或范围部分。确保工人在设定或范围内永远不会到外面。