首先來說批量處理數(shù)據(jù)的優(yōu)點(diǎn):
代碼優(yōu)化蜈垮,提高程序執(zhí)行性能
降低了java程序代碼(客戶端)和數(shù)據(jù)庫之間的 網(wǎng)絡(luò)通信的次數(shù)。
大數(shù)據(jù)量的插入問題:(jdbc,hibernate,ibatis)
1.每次只插入一條和數(shù)據(jù)庫交互多次(很耗時間)
2.批量插入和數(shù)據(jù)庫只交互一次(內(nèi)存溢出)
解決辦法:分段批量插入(推薦)
?jdbc批量處理數(shù)據(jù)是通過PreparedStatement對象的 addbatch(), executebatch() clearbatch()進(jìn)行和數(shù)據(jù)庫的交互河爹。通常我們使用分段批量處理的方式 這樣可以提高程序的性能 榛做,防止內(nèi)存溢出。
1.每個sql語句都和數(shù)據(jù)庫交互一次(非批量操作)
2.只和數(shù)據(jù)庫交互一次(批量操作)(內(nèi)存溢出)
當(dāng)數(shù)據(jù)達(dá)到一定額度的時候就和數(shù)據(jù)庫進(jìn)行交互刀森,分多次進(jìn)行(分段批量操作)(500或者1000)
pst.addBatch();
if (i > 0 && i%1000 == 0) {
pst.executeBatch();
pst.clearBatch();
}
JDBC分段批量提交的時候出現(xiàn)異常怎么處理:
解決方案:
通過Map來解決性能問題逝薪。首先在分段批量提交的時候隅要,我們不采用事務(wù),這樣就保證了合法的數(shù)據(jù)就自動提交董济,不合法的數(shù)據(jù)就自己自動進(jìn)行回滾步清,為了避免不合法數(shù)據(jù)影響后續(xù)合法數(shù)據(jù)的提交,采用定義業(yè)務(wù)規(guī)則字典表虏肾,實(shí)現(xiàn)對數(shù)據(jù)的驗(yàn)證廓啊,將不合法的數(shù)據(jù)記錄下來,供用戶進(jìn)行后續(xù)處理封豪,而合法的數(shù)據(jù)就全部提交谴轮。