2012-04-13 53 views
0

有沒有Java中的任何內置庫在大約100GB的大文件中搜索字符串在Java中。我目前使用二進制搜索,但效率不高。建立在圖書館的100GB文件進行有效搜索

+0

告訴我們關於100GB數據集的信息。它由什麼組成,任意字符串?這些琴絃是否以特定方式排列?你允許預處理數據集嗎?你需要執行什麼類型的搜索,完全匹配整個字符串?就目前而言,問題是*方式*不明確。 – NPE 2012-04-13 15:51:46

+0

@aix感謝您的回覆。數據集由任意字符串組成。是的,我想對整個字符串做精確匹配 – 2012-04-13 15:54:05

+1

如果數據行的定位比想象中使用MapReduce ...特別是在數據大小上。 – khmarbaise 2012-04-13 15:56:53

回答

0

據我所知,Java不包含任何文件搜索引擎,有或沒有索引。這也有一個很好的原因:搜索引擎實現與輸入數據集搜索模式格式固有地相關。兩者之間的微小變化都可能導致搜索引擎的巨大變化。

對於我們能夠提供你需要一個更具體的答案:

  • 描述正是數據集:文件的數量,路徑結構和平均大小,每個條目的格式以及每個包含的令牌的格式。

  • 描述究竟您的搜索模式:是那些固定的字符串,glob模式,或者說,正則表達式?你期望這個模式在每一行中都匹配一整行或一個特定的標記嗎?

  • 描述確切您想要的搜索結果:你想要精確或近似匹配?你想獲得文件中的位置,還是提取特定的令牌?

  • 描述正是您的要求:你能事先建立索引?數據集是否預期會實時修改?

  • 說明爲什麼不能使用專爲這類工作設計的第三方庫,如Lucene。

  • 解釋爲什麼當前的二進制搜索,它應該有一個的O(logn)複雜性是不太有效。 可能是會更快,並且具有恆定的複雜度將涉及使用散列表。

這可能是最好的,如果你從更廣泛的角度來描述你的問題。例如,可以從您的樣本數據集中假設您擁有的是一組單詞以及相關的偏移量或文檔標識符列表。在這樣的一個集合中進行搜索的簡單方法是將一個字/文件位置索引存儲在散列表中,以便能夠在恆定時間訪問每個關聯列表。

0

如果你不想使用爲搜索而構建的工具,那麼將數據存儲在數據庫中並使用sql。

相關問題