我想遍歷數據庫中的記錄並進行更新。但是,由於更新過程需要一些時間並且容易出錯,所以我需要a)在每次更新之後,不要讓db等待(例如使用)和b)提交。 第二件事是這是在多個線程中完成的,所以我需要確保如果線程A正在處理記錄,線程B正在獲得另一個記錄。 我怎樣才能用hibernate實現這個合理的?如何在休眠狀態下正確地迭代db記錄
爲了給出一個更好的主意,下面的代碼會被多個線程,所有線程共享RecordIterator
的單個實例執行:
Iterator<Record> iter = db.getRecordIterator();
while(iter.hasNext()){
Record rec = iter.next();
// do something lengthy here
db.save(rec);
}
所以我的問題是如何實現RecordIterator
。如果在每個next()
我執行查詢,如何確保我不返回相同的記錄兩次?如果我沒有,哪個查詢用來返回分離的對象?在一般方法中是否存在缺陷(例如,使用每個線程一個RecordIterator
並讓db以某種方式處理同步)?附加信息:有很多記錄可以在本地保存(例如,在一組處理過的記錄中)。
更新:由於整個過程需要一些時間,可能會發生記錄狀態更改。由於查詢結果的排序可能會發生變化。我想解決這個問題,我不得不在數據庫中標記記錄,一旦我將它們返回給他們進行處理...
嗨,謝謝你的回答。我很抱歉,但我沒有想到我在問題更新中描述的另一個問題。我想解決這個問題,我不得不在數據庫中標記記錄,一旦我將它們返回進行處理... – roesslerj 2011-12-21 13:34:01
我在過去做了類似的事情。我最終做的是創建一個標記表,用於存儲已更新的條目。我正在使用SpringBatch BTW來處理排隊和分頁。 – greyfairer 2011-12-21 15:15:56