簡體   English   中英

有沒有一種方法可以將流數據檢索與休眠結合起來?

[英]Is there a way to combine streaming data retrieval with hibernate?

出於處理非常大的集合的目的(我的意思是“很可能拋出OutOfMemory異常”),使用Hibernate似乎有問題,因為通常集合檢索是在一個塊中完成的,即List values = session.createQuery(“從X“)。list()中,您將在其中整體獲取所有N百萬個值,然后對其進行處理。

我更喜歡做的是將值作為迭代器進行檢索,這樣我一次可以抓取1000個左右(或任何合理的頁面大小)。 除了編寫自己的迭代(似乎很可能是在重新發明輪子)之外,還有冬眠的本地方式來處理此問題嗎?

實際上,在這種情況下,session.scroll()可能比迭代更好。 迭代運行一個查詢以獲取所有ID,然后在處理它們時一一讀取全部項目。 Scroll使用底層的JDBC滾動功能,該功能可檢索完整的對象,但使游標對數據庫保持打開狀態。 使用滾動,您可以設置批處理大小,以找出每次返回的最佳數量。 如果加載數百萬個ID仍然占用太多內存,那么滾動就是答案,我懷疑這兩種情況下效率都更高。

兩者都不會自動關閉會話。

你可以做

Iterator iter = session.createQuery("from X").iterate();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM