我聽到了過去的回聲,我想提供一種不同的方法,以防萬一您要重複我的錯誤。它可能會或可能不適用於您的情況。
您寫道,您需要從數據庫中提取大量數據,然後保留回數據庫。
是否可以將需要使用的外部數據臨時插入到數據庫中,並執行數據庫內的所有處理?這將具有以下優點:
- 它消除了需要提取大量數據
- 它消除了需要持續大量的數據
- 它使基於集合的處理(其性能優於程序)的
- 如果您的數據庫支持它,您可以使用並行執行
- 它爲您提供了一個框架(表和SQL)來報告您在過程中遇到的任何錯誤。
舉個例子。很久以前,我實施了一個(java)程序,其目的是將文件中的購買,付款和相關客戶數據加載到中央數據庫中。那時(我對此深感遺憾),我設計了負載以逐個處理事務,併爲每個數據執行多個數據庫查找(sql),最後還有一些插入到適當的表中。當然,這個數量一旦增加就不會縮放。
然後我又犯了一個錯誤。我認爲這是數據庫問題(因爲我有聽說 SELECT慢),所以我決定從數據庫中提取所有數據,並在Java中進行所有處理。然後最後將所有數據保存到數據庫。我用回調機制實現了各種各樣的層,以輕鬆擴展加載過程,但我無法讓它表現良好。
從後視鏡看,我應該做的是在表格中臨時插入(可笑的少量)100,000行,並從那裏處理它們。如果我發揮我掌握的所有技術的優勢,花費將近半天的時間處理最多花費幾分鐘的時間。