使用多线程将数据从Excel文件复制到数据库

时间:2018-06-29 02:39:54

标签: java multithreading synchronization blockingqueue

我需要将大量数据从excel(5,00,000)行复制到数据库。我应该使用多线程的Blocking Queue方法还是有其他方法可以更有效地利用多线程?

2 个答案:

答案 0 :(得分:1)

如今,

500.000行对于数据库来说已经不是那么大了。 我认为您首先应该优化数据库访问,如果您没有期望的性能,请使用更高级的技术。 您已经说过Java,想到了这样的2种优化方法:

  1. 使用Prepared Statement而不是JDBC的Statement(或者,如果您通过JDBC使用任何抽象,请确保确实如此)。这将使DB不必每次都重新解析查询
  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。对于线程管理,您可以使用执行程序服务,线程池执行程序等。