讓我先簡要介紹一下這個場景。數據庫是Sybase。有大約2-3 k個存儲過程。存儲過程可能會返回大量數據(約百萬條記錄)。將會有一個服務(servlet/spring controller)調用所需的過程並以xml格式將數據清回客戶端。用Java過濾/排序大量數據
我需要appy過濾(在多列&多個條件)/排序(基於一些動態標準),這一點我已經完成。
問題是,由於數據量巨大,因此在內存中進行所有過濾/排序並不好。我想到了以下選項。
選項1: 一旦我得到ResultSet對象,請閱讀一些X號。的記錄,過濾它,將其存儲在某個文件中,重複此過程直到讀取所有數據。然後,只需讀取文件並將數據刷新到客戶端即可。
我需要弄清楚如何對文件中的數據進行排序以及如何在文件中存儲對象以便過濾/排序速度很快。
選項2: 尋找一些Java的API,這需要數據,過濾它,它基於給定的標準&排序,並使其返回作爲流
選項3: 使用中 - 內存數據庫像hsqldb,h2database,但我認爲這將開銷,而不是幫助。我將需要先插入數據然後查詢數據,這也將使用文件系統。
注意我不想修改存儲過程,因此在數據庫中進行過濾/排序的選項不是選項,或者如果沒有其他方法可以作爲最後一個選項。
此外,如果它有幫助,我從ResultSet讀取的每條記錄,我將它存儲在一個Map中,鍵是列名,並且此Map存儲在List中,我將應用篩選&排序。
您認爲哪種選擇對於內存佔用空間,可擴展性,性能方面或其他任何可以滿足該場景的選項都有好處?
謝謝
修改存儲過程或添加新的調用它們,將結果保存在臨時表中,然後返回臨時表的子列表 – artbristol
聽起來像這樣過濾和排序是數據庫的責任。在傳輸數據之前,爲什麼不在那裏?畢竟這是數據庫的優點。正如我們在我的國家所說的那樣:這聽起來像是你想再次發明開水。 –