背景:開發一個匯入校驗的功能,由于資料量大,為了方便批處理,所以前臺通過匯入單據號來實作對資料庫對應單據資訊的批處理。
目前專案存在的問題:由于資料量大,前期沒考慮到這樣一個問題,導致匯入功能出現長時間未回應而報錯,甚至占用記憶體爆炸,GC自動回收都不行了。所以想通過呼叫存盤函式來將這10W級別的單號通過傳入oracle存盤函式進行批處理,校驗,同時對單據的資訊進行處理后,把需要的資訊合并成一條記錄回傳。
------------------------------------------------------
各位大佬們,我這邊遇到倆問題需要大佬們幫我:
1、對于這個存盤函式,傳參是一個List陣列,我要怎么在oracle這塊定義呢?還有回傳值,我想要以一條記錄回傳,這樣我在java那邊就能以一個物件來接收相應的欄位資訊,可是目前有個問題,回傳資訊來了,欄位名不知道怎么在oracle去定義。
2、以上的優化記憶體的思路正確嗎?--這樣直接傳單號到存盤函式去處理,我就不需要在java里面定義那么多的物件,不需要for回圈那么多,然后做加減運算最后再保存了。
uj5u.com熱心網友回復:
用前臺處理資料成檔案,然后檔案匯入資料庫這樣不行嗎uj5u.com熱心網友回復:
使用sqlldr把資料直接加載到臨時表,然后再批處理臨時表的資料,而不是用存盤程序接收資料。uj5u.com熱心網友回復:
記憶體不夠,虛擬機記憶體占用太多,因為匯入的單號查詢回傳的資料量太大了
uj5u.com熱心網友回復:
這種不適合回圈調存盤程序,可能反而更慢增加后臺負擔。可以全部資料都加載到資料庫的臨時表中,然后呼叫存盤程序去判斷最終插入正式表。校驗失敗的資料在表后面標記一下uj5u.com熱心網友回復:
沒有用過你說的這個方法,有沒有例子給一個來呢?
uj5u.com熱心網友回復:
意思是在資料庫建一個表作為臨時存盤資料的,先把匯入的資料全部存進臨時表,然后再到資料庫去操作處理是嗎?
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/76469.html
標籤:開發
上一篇:oracle基礎知識分享
下一篇:請教一個簡單的查詢問題
