使用线程插入mysql
Posted
技术标签:
【中文标题】使用线程插入mysql【英文标题】:insertion in mysql using threads 【发布时间】:2013-09-16 03:37:07 【问题描述】:我是线程新手,对 Java 知之甚少 我在 mysql 中插入数据时遇到了一些严重的性能问题。数据是巨大的块并且需要大量的时间,即使是使用批处理准备好的语句。
我想从哈希表中读取键和值,并使用线程划分要插入到 mysql 表中的特定 say-5 索引。我认为这会提高我的表现。 假设有 100 个索引;所以我想创建 5 个线程,每个线程在数据库中插入 20 个值。 我可以创建一个线程数组并将它们传递给执行程序池并提交,但是我被困在之后如何继续进行。
我有以下疑问: 我如何跟踪线程插入了多少或如何限制线程插入 20 个? 我可以进一步将每个线程的 20 个插入工作分成 4 个批次吗?
我不是在寻找代码,而是在寻找可能有帮助的正确指导。
【问题讨论】:
使用ExecutorService
同时处理多个线程。在线教程中有一个很好的解释,这里有一个例子:vogella.com/articles/JavaConcurrency/article.html#threadpools
“我是线程新手” - 所以不要。
@MitchWheat 不要什么?
线程!数据插入速度比 CPU 更可能受 I/O 限制。奇怪的是,引入线程将导致零加速。
@MitchWheat 您是否使用分析器对此进行了测试,以真正说即使使用数据库连接池的优势,多线程也无济于事?
【参考方案1】:
我个人会使用Executor
API。
基本上,我会创建一个固定池执行器,只需将您要执行的任务提交给它,并允许它在现有线程可用时管理任务池。
查看Executors tutorial了解更多详情
【讨论】:
@MadProgrammer - 我会试试这个。另外,如何限制哈希表中的索引数量? 我可能不会。我会简单地创建有数字的“插入任务”的数量并将它们提交给执行程序,并允许它管理在线程可用时将它们分发给线程...... @MadProgrammer - 可能,创建linkedhashmap 代替hashmap 可以帮助我跟踪位置并从该特定位置插入mysql。如果我错了,请纠正我。以上是关于使用线程插入mysql的主要内容,如果未能解决你的问题,请参考以下文章