2014-04-05 60 views
1

我有一個1兆字節大小的Json文件。每個Json Object是一個500-600字的文本。有五千萬個Json對象。在循環內執行文本數據

現在這是我必須做的這個Json文件。我需要在網頁中插入200-300個字和一個百分比值。一旦完成,Web應用程序將讀取整個Json文件,檢查插入的單詞是否在任何Json對象中可用,以及可用性的百分比是多少。如果可用性百分比高於插入的百分比,那麼此應用程序還會跟蹤Json對象中可用的單詞與輸入列表以及Json對象與輸入列表相比缺少的輸入列表和單詞。

我覺得閱讀1TB太大了,所以我做了一個竅門。我將每個Json Object中的文本轉換爲散列(此散列表示任何帶有3個字符的單詞)並將其保存到文本文件中。現在這個文本文件的每一行都有散列表示該特定Json對象中的文本。這個文本文件是120GB大。 5000萬線。

我的問題是閱讀和執行上述工作仍然比較困難。需要數小時才能完成!爲什麼?由於該應用程序讀取該散列中的「每一行」,因此搜索哪些單詞可用,哪些單詞不可用。所以這個「檢查」算法運行5000萬次!

有沒有什麼辦法可以減少這個操作的時間,並在幾秒鐘內完成?我知道化學和遺傳醫學應用在幾秒鐘內完成同樣的事情!無論是大數據解決方案,數據挖掘還是簡單修復,我都樂於接受所有解決方案。

PS:我想到了一個基於Hadoop的解決方案,但購買了很多電腦。這是一個巨大的成本,即使在亞馬遜運行是雙重成本!

回答

0

當然,你必須朝着像lucene這樣的逆向索引的方向前進。反向索引的大小受不同文檔數量影響。在查找單詞時,您直接獲取包含該單詞的文檔的ID,從而獲得該對象的編號以及百分比。迄今爲止很簡單。我想一個10-30機器左右的小羣應該沒問題。也許彈性搜索在這裏是一個很好的喜悅。

+0

我沒有錢有10臺機器,目前的主要問題。 –

+0

我會說,一個顛倒的索引,你比現在好得多,不管有多少臺機器。一般的臺式機應該可以達到分鐘。經過幾個小時的建設索引當然。更多機器將改善索引建立以及訪問時間。 –