我正在尝试编写一个从数据库读取数据并将其上传到云数据存储的过程。
如何决定数据的分区策略?我想以块为单位查询表,并在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");
}
}发布于 2014-06-03 22:59:40
在启动工作器之前执行select,以确定要处理的记录的所有主要ID的集合或范围(第一个ID-最后一个ID)。给每个工人一个子集或范围部分来工作。确保工人不会在给定的设置或范围内外出。
https://stackoverflow.com/questions/24006595
复制相似问题