2017-03-31 124 views
-1

我有一個文本文件組成的約4000萬行的鍵/值的形式,我想檢索給定的關鍵值在秒(2-3)最大,我不有足夠的內存將它們全部存儲在JVM內存中作爲散列表,我可以使用系統存儲+一些索引來實現這一點嗎? 我一直在閱讀有關lucene,但不知道它是否是尋找。搜索巨大的文本文件

+0

https://docs.oracle.com/javase/tutorial/essential/io/file.html – Sedrick

回答

0

我認爲Hadoop是一個更好的工具來完成這項任務:只需將原始文件拆分到從屬設備之間即可。 map函數正在對原始文件的每個部分執行搜索,reduce是所有調查結果的組合。如果密鑰是唯一的,則只有一個從機提供答案。

0

Lucene是用於自由文本搜索。如果不需要使用文本文件,最快捷的解決方案就是使用數據庫。 4000萬條記錄非常多,但即使如此,使用唯一索引(在關鍵字上)找到單個記錄的速度也應快於2-3秒。您可以使用像HSQLDB這樣的嵌入式數據庫,只要確保將其配置爲使用磁盤存儲!

如果你需要保留文本文件,如果你能負擔得起的存儲在內存中,從關鍵到創建一個TreeMap的偏移。聽起來很亂。

1

如果您想搜索關鍵字或值中的「文本字符串」,可以使用Apache LuceneLucene是一個全功能的文本搜索引擎庫,但你可以使用它也只是用於搜索完全匹配密鑰值。我使用超過6千萬文件的Lucene,並且我有小於1秒爲每個搜索。

否則,如果你想一個關鍵/商店,你可以使用NoSQL的鍵/值數據庫一樣Redis,但我還沒試過。