java - 在 Java 线程之间分配数据库读取作业的最佳方式

标签 java multithreading jdbc

我有一个包含大量行的 MySQL 数据库。

我想在Java中初始化多个线程(每个线程都有自己的数据库连接)并同时读取/打印数据。

如何在多个线程之间分区数据,以免两个线程读取相同的记录?可以使用什么策略?

最佳答案

这取决于您的线程要执行什么类型的工作。例如,我通常对某种大型数据集执行单个 SELECT,将任务添加到线程安全任务队列并提交工作人员,从队列中选取适当的任务进行处理。我通常在不同步的情况下写入数据库,但这取决于工作单元的大小和数据库约束(如唯一键等)。就像魅力一样起作用。 其他方法是简单地运行多个线程并让它们自行工作。然而,我强烈反对使用一些花哨的 LIMIT、OFFSET。它仍然需要数据库获取比实际从查询返回更多的数据行。

编辑: 由于您添加了您拥有相同数据的评论,所以我的解决方案就是您在寻找什么

  1. 通过单个查询获取数据集
  2. 将数据添加到队列
  3. 为您的线程提供午餐(由执行者或新线程)
  4. 从队列中选取数据并进行处理。

关于java - 在 Java 线程之间分配数据库读取作业的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18095630/

相关文章:

java - “订单”实体 bean

iphone - 可以从其他后台线程启动后台线程吗? (NSObj)

kotlin - 使用 Kotlin Exposed 创建数据库后连接到数据库

postgresql - 用于 jdbc 的 postgres hba.conf

java - 只有加密图像应保存在文件中并解密图像以供预览

java - Android 中的 AppWidget 动画

GWT 的 Java 数据库抽象(或 : Is Hibernate a good choice? )

Cocoa 核心数据 - 后台线程

C - 本地线程变量是共享的

java - 使用 Oracle jdbc 的 Apache Drill 查询速度极慢