Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 多线程写入单个数据库表_Java_Mysql_Database_Multithreading_Hibernate - Fatal编程技术网

Java 多线程写入单个数据库表

Java 多线程写入单个数据库表,java,mysql,database,multithreading,hibernate,Java,Mysql,Database,Multithreading,Hibernate,我在使用hibernate将多个线程插入数据库中的一个表时遇到了一个问题。每个线程生成一些数据,然后将它们插入表中。问题是,由于数据库锁定,插入操作只由一个线程处理。最好的解决方法是什么,这样线程可以同时插入?我试着让一个专用线程写入表中,其他线程生成数据。但是数据生成的速度比插入的快,所以它不能解决我的问题 我唯一的想法是为每个线程创建自己的数据库/表,但这对我来说似乎有点奇怪,因为我不知道我将提前创建多少线程。有更好的解决方案吗?您必须保留一个队列以保留要插入的数据。所以所有处理线程都可以将

我在使用hibernate将多个线程插入数据库中的一个表时遇到了一个问题。每个线程生成一些数据,然后将它们插入表中。问题是,由于数据库锁定,插入操作只由一个线程处理。最好的解决方法是什么,这样线程可以同时插入?我试着让一个专用线程写入表中,其他线程生成数据。但是数据生成的速度比插入的快,所以它不能解决我的问题


我唯一的想法是为每个线程创建自己的数据库/表,但这对我来说似乎有点奇怪,因为我不知道我将提前创建多少线程。有更好的解决方案吗?

您必须保留一个队列以保留要插入的数据。所以所有处理线程都可以将数据插入队列。一旦插入线程将数据插入数据库,就可以将其从队列中删除。

可能是事务。因为如果你插入一点点,不管线程是什么,你每秒的事务量都会非常低。如果将数据捆绑到更大的事务中,则会增加吞吐量,因为每秒事务数的限制并不关心事务的大小。更多的线程意味着更多的争用,这意味着将performanceChange数据库降级到Oracle,它会为每个线程创建重做日志并写入其中。如果您生成数据的速度太快,无法处理正确设置的数据库(这意味着您已经适当地调整了硬件和日志记录,并且只使用了READ COMMITTED),SQL几乎肯定不是合适的数据存储。您缺少的是
数据生成速度比插入速度快得多的
,因此即使没有代码,此注释也不能解决问题。@nikpon我没有像您所说的那样缺少它。这就是为什么我建议在插入数据库之前使用队列来处理生成的数据。