我有一个包含大量行的 MySQL 数据库。
我想在Java中初始化多个线程(每个线程都有自己的数据库连接)并同时读取/打印数据。
如何在多个线程之间分区数据,以免两个线程读取相同的记录?可以使用什么策略?
最佳答案
这取决于您的线程要执行什么类型的工作。例如,我通常对某种大型数据集执行单个 SELECT,将任务添加到线程安全任务队列并提交工作人员,从队列中选取适当的任务进行处理。我通常在不同步的情况下写入数据库,但这取决于工作单元的大小和数据库约束(如唯一键等)。就像魅力一样起作用。 其他方法是简单地运行多个线程并让它们自行工作。然而,我强烈反对使用一些花哨的 LIMIT、OFFSET。它仍然需要数据库获取比实际从查询返回更多的数据行。
编辑: 由于您添加了您拥有相同数据的评论,所以我的解决方案就是您在寻找什么
- 通过单个查询获取数据集
- 将数据添加到队列
- 为您的线程提供午餐(由执行者或新线程)
- 从队列中选取数据并进行处理。
关于java - 在 Java 线程之间分配数据库读取作业的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18095630/