簡體   English   中英

如何在Java中獲取170萬條記錄?

[英]How to Fetch 1.7 Million records in Java?

我正在使用MySQL數據庫,其中一個表有170萬條記錄。 通過Java中的Restlet框架,我想獲取這些記錄並將其返回給客戶端。 我使用的是Linux Centos,它是遠程服務器。 我創建了WAR文件並上傳到服務器上。 當我運行服務時,需要花費大量時間來回應。 我等了40分鍾但沒有得到任何輸出。 那么有人可以幫我解決這個問題嗎?

這可能不會起作用:在內存中保留許多行數據可能會導致內存不足異常(你能看一下服務器上的日志,看看到底發生了什么?)。

要做這樣的事情你要么放棄那個計划並做某種分頁,要么你需要一個解決方案,讓你將記錄流式傳輸到客戶端而不將它們保存在內存中。 我不確定Restlet框架是否允許您這樣做:您可能需要自己使用servlet來實現它。

當我有非常多的行時,我使用了內存映射文件。 例如,我有一個數據庫,我必須在大約一分鍾內檢索和處理11億行。 (超過200 GB)

這是一種非常專業的方法,我懷疑有一種方法可以調整SQL數據庫或使用NoSQL數據庫來執行您想要的操作。 雖然你可以在一分鍾內檢索170萬,具體取決於你正在做什么(例如,如果你選擇這個很多的幾個TB,它需要一段時間)

但是,如果確實沒有其他選項,您可以編寫自定義數據存儲。

順便說一句:只生成摘要。 不應該期望任何人閱讀那么多行,當然不會在瀏覽器中顯示它們。 也許您可以做一些事情來生成報告或摘要,因此發送客戶端的次數較少。

我在我的應用程序中成功完成了這種工作。 如果您的客戶已准備好接受大響應,那么該方法沒有任何問題。 重點是您需要流式傳輸響應,這意味着您無法將整個響應構建為字符串。 獲取HTTP響應的輸出流並逐個寫入記錄。 在db-end上,您需要設置一個可滾動的結果集(在JDBC級別以及Hibernate級別都很容易)。

暫無
暫無

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

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