java - executorservice 以 block 的形式从数据库中读取数据并在其上运行进程

标签 java multithreading executorservice threadpoolexecutor

我正在尝试编写一个从数据库读取数据并将其上传到云数据存储区的过程。

如何决定数据的分区策略?我想分块查询表并在 10 个线程中处理每个 block 。每个线程基本上会将数据发送到云上 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");
        }


    }

最佳答案

在启动 worker 之前进行选择以确定要处理的记录的所有主要 ID 的集合或范围(第一个 ID - 最后一个 ID)。给每个 worker 一个子集或范围部分来工作。确保 worker 永远不会离开指定的集合或范围。

关于java - executorservice 以 block 的形式从数据库中读取数据并在其上运行进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24006595/

相关文章:

java - 应用程序未在启动时启动

ios - Metal 性能调试

java - 线程堆栈的内部 Java 内存模型

java - 当一项 future 任务有预期结果时继续

java - Java中有什么方法可以在不传输或下载的情况下获取图像的宽度和高度?

java - 如何在 Windows 上编译具有 GPU 支持的 Tensorflow Java API?

multithreading - 在可能出现异常(exception)情况的将来应用 future

java - 如何使用 ExecutorService 轮询直到结果到达

java - 如何从 map 中获取数据?

java - 如何使用java.io.File浏览RMI服务器磁盘文件系统?