2013-02-25 58 views
0

我還沒有交出細節,但我正準備在Java中實現一個命令行搜索工具來搜索包含兩個字段(docid,orgid)的文件。我已經瞭解到這個文件開始很小,並且一直在增長。我需要能夠通過docid並取回組織。快速搜索大型平面文件的最佳方法是什麼?

有誰可以告訴我 - 什麼可能是最好的技術來搜索像我上面提到的平面文件?目前,我們只處理5萬行(超過兩個月)的文件中的數據,但一旦系統安裝到位後,它的增長速度會更快。

它似乎將這個存儲在一個可搜索的二進制系統中,但我不確定開始時需要注意什麼。

我可以將其轉儲到數據庫中,但這似乎是矯枉過正。另外要做到這一點,我將不得不安裝在服務器上的數據庫,這將是困難的。

+2

爲什麼它會過度殺傷? – 2013-02-25 19:31:58

+0

您會偶爾進行一次搜索,還是希望能夠爲多個查詢提供快速答案的服務?如果a)在第二種情況下查看是否不能使用grep,egrep或awk,請考慮數據庫 - 因爲這正是數據庫首先發明的原因。 – Ingo 2013-02-25 19:36:03

+2

我認爲這將有助於提供更多的細節。多久添加一次以及添加多少次?一天一次?一天幾千?連續地,在白天每秒幾秒?像這樣的東西。然後,每天有多少次搜索? 10,1000,100000?搜索單個項目還是組?它有多大?百萬?十億?什麼? – 2013-02-25 19:36:05

回答

0

嘛最快的工具,這取決於關於docid和orgid的大小以及你擁有的ram數量可以使用,你可以簡單地使用一個哈希表。將所有內容讀入哈希表,然後根據哈希表進行查詢。當然,不知道你需要對這個文件進行多少次查找,也不知道需要多長時間運行一次,以及它是否需要駐留在內存中。

其他選項(如先前建議的)將使用預先存在的數據庫。最有效的方法是將文件讀入數據庫並截斷文件,以便後續讀取不必重新讀取現有記錄。再加上你的文件仍然可以管理。當然,如果你嘗試這樣做,會產生很多問題。例如:你能截斷文件嗎?另一個進程是否期望文件存在?當你嘗試截斷時,你如何管理競爭條件?等

使用類似hsqldbh2將是巨大的,因爲它們可以嵌入到您的應用程序,你不必擔心他們獨立安裝。當然,你需要爲它們提供一個持久空間,否則它不會提供大量的幫助。

+0

是的,謝謝。我結束瞭解決服務器問題,並與hsqldb,謝謝你的建議。 – user1901482 2013-03-18 16:46:28

1

如果有可能我會去從一開始(也許是輕的東西像hsqldbh2在一些數據庫中插入數據。

你的數據的行爲像地圖,所以也許像mapdb會更好(但你必須以確保您的架構是不可能改變的)。

如果你仍然需要去與該平面文件,也許grep的是最好的主意(這是搜索平面文件)

相關問題