我需要将大量数据从excel(5,00,000)行复制到数据库。我应该使用多线程的Blocking Queue方法还是有其他方法可以更有效地利用多线程?
答案 0 :(得分:1)
500.000行对于数据库来说已经不是那么大了。 我认为您首先应该优化数据库访问,如果您没有期望的性能,请使用更高级的技术。 您已经说过Java,想到了这样的2种优化方法:
使用批处理操作。仅此一项,就可以将速度提高一个数量级左右,具体取决于您的RDBMS设置:
PreparedStatement pstmt = connection.prepareStatement(<YOUR_INSERT_SQL>);
for(...) { // chose batch size like 500 to 2000
pstmt.setXXX(<bind the parameters here>)
pstmt.addBatch(); // add to the batch
}
pstmt.executeBatch(); // does bunch of inserts at once
执行所有这些操作可能不到一分钟,或者需要1-2分钟,但不是说几小时(当然,这取决于插入数据的位置和网络质量,但是通常是这种情况)
如果这还不够,那么当然可以并行访问,同时使用多个连接。但是再说一次,如果它是一次性的,那我就不会打扰,毕竟,编写这种多线程代码将花费更多的时间,而不是您将获得的性能差异:)
答案 1 :(得分:1)
如果您想使用多线程来更好地提高性能,则可以为每个表创建一个线程,并尝试对表执行db-operation。对于线程管理,您可以使用执行程序服务,线程池执行程序等。