因業務需要,要對Excel文檔進行解析與入庫,先期寫的代碼是使用poi解析一行入庫一行
后續業務越來越多,解析的excel文檔越發大,導入時間變得很長。
剛開始時是考慮使用異步的方式進行數據入庫,后臺收到了文件直接響應前端,然后開始進行文件的解析入庫。,這里就涉及到一個用戶體驗的問題,因為用戶角度看過去,文檔已經上傳完成。對應的,上傳完成的東西應該已經可用。實際上..............
后來則采用了jdbc批處理來進行操作:
Connection conn = null; PReparedStatement ps = null; //單次處理個數 int count = 1000; try { conn = JdbcUtils.getConnection(); String sql = "insert into user(name,age) values (?, ?) "; ps = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); int i = 0; for (Object object : list) { ps.setString(1, object.getName()); ps.setInt(2, object.getAge()); ps.addBatch(); i++; //防止列表sql太多,出現outOfMemory if(i==count){ //執行列表中的sql ps.executeBatch(); //清空當前sql命令列表 ps.clearBatch(); i=0; } } if(list.size()<count){ ps.executeBatch(); ps.clearBatch(); } } finally { 關閉各種連接 }時間變短,說明效果還是有的。原理說明:
在大部分的應用當中,最耗時的操作應該是操作數據庫(特殊不計),數據庫操作中最耗時的是建立連接的過程。6000次的插入操作如果不做處理,需要做6000次的數據庫連接操作。如果是批處理,則連接操作個數大大減小,自然速度變快
新聞熱點
疑難解答