【发布时间】:2016-02-23 21:27:16
【问题描述】:
我遇到了使用休眠将多个线程插入数据库中的单个表的问题。每个线程都会生成一些数据,然后将它们插入到表中。问题是由于数据库锁,插入仅由 1 个线程处理。什么是最好的解决方法,所以线程可以同时插入?我试图让 1 个专用线程写入表,其他线程将生成数据。但是数据的生成速度比插入快得多,所以它不能解决我的问题。
我唯一的想法是为每个线程创建自己的数据库/表,但这对我来说似乎有点奇怪,因为我不知道我将提前创建多少个线程。有没有更好的解决方案?
【问题讨论】:
-
可能是交易。因为如果您插入一点点,那么无论线程如何,您每秒的事务量都会被限制在惊人的低水平。如果将数据捆绑到更大的事务中,则会增加吞吐量,因为每秒事务限制并不关心事务的大小。 docs.jboss.org/hibernate/orm/3.3/reference/en/html/batch.html 更多线程意味着更多争用,这意味着性能下降
-
将数据库更改为 Oracle,它会为每个线程创建重做日志并写入它。
-
如果您生成的数据太快以至于无法正确设置数据库来处理(这意味着您已经适当地调整了硬件和日志,并且您只使用了 READ COMMITTED),那么 SQL几乎可以肯定不是合适的数据存储。
标签: java mysql database multithreading hibernate