簡體   English   中英

如何用Java處理大數據?

[英]How to Handle Large Data in Java?

我的應用程序需要使用最大5 GB的文本文件中的數據。 我無法將所有這些數據都加載到RAM中,因為它太大了。

數據像表一樣存儲,有500萬條記錄(行)和40列,每列包含將在內存中轉換為字符串,整數或雙精度數的文本。

我嘗試僅在內存中緩存10-100 MB的數據,並在需要外部數據時從文件中重新加載數據,但這太慢了! 當我運行計算時,因為我可以從表中的任何行中隨機跳轉,所以它將經常需要打開文件,讀取並關閉文件。

我需要快速的東西,我在考慮使用某種數據庫。 我知道像這樣的大數據計算可能需要一段時間,這很好。 如果我確實使用數據庫,則需要在啟動桌面應用程序時對其進行設置,而無需先安裝某種服務器組件。

有小費嗎? 謝謝

您可以使用嵌入式數據庫,可以在此處找到比較: Java嵌入式數據庫比較

或者,根據您的用例,您甚至可以嘗試使用Lucene (全文搜索引擎)。

我認為您需要澄清一些事情:

  • 這是桌面應用程序(我想是的),它的內存限制是多少?
  • 您是否以只讀模式使用文件?
  • 您要進行哪種計算? (多長時間訪問一次隨機行,多久讀取一次后續行,是否需要修改數據)

目前,我看到了兩種進一步調查的方法:

  • 使用SQLite 這是小型單文件DB,主要面向桌面應用程序和單用戶使用。 它不需要任何服務器,您只需要擁有適當的jdbc庫即可。
  • 使用例如二叉樹創建某種索引。 第一次讀取文件時,請為文件中各行的開始位置建立索引。 結合永久打開的隨機訪問文件,這將幫助您快速查找和讀取所需的行。 對於二叉樹,您的索引可能約為120M。 (它是RowsCount * 2 *二叉樹的IndexValueSize)

暫無
暫無

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

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