2009-03-30 7 views
3

Linuxでインデックスを使用してファイル検索プログラムを実装すると思います。私はビーグルのようないくつかのファイル検索プログラムがあることを知っています。私は研究目的のためにこれをやっています...私はインデックス作成をする方法に打たれています..私はあなたがmaemo-mapperアプリケーションから取った以下のアイデアを持っています.. 例えば "uresh"ファイルシステムとしてファイル...Linuxでインデックスを使用するファイル検索アルゴリズム

/home/$USERNAME/.file_search_index/s/u/r/e/s/h/list.txt ..このlist.txtには、名前を持つすべてのファイルの場所が含まれています= "suresh" ... Plsは、それを実装するためのよりよいアイデア/アルゴリズムを提案しています...そして、さまざまなファイル検索テクニックplsに資料があれば....

+0

これがなぜ落とされたのか分かりませんが、それは有効な質問のようです。 –

+0

誰かがこれを閉じるのに投票した理由をよく分かりません。してください、ペンギンを恐れないでください。私たちも質問があります:) –

答えて

4

locateコマンドfindutilsに付属していますか? beagledのように、それはフリーソフトウェアなので、コードを勉強することができます。

findutilsパッケージは常に寄稿者を探しています。データベース形式で

情報は、ビーグルはinotifyで非常に興味深いアプローチを使用していますhttp://www.gnu.org/software/findutils/manual/html_node/find_html/Database-Formats.html

+0

http://slocate.trakker.ca/とhttp://carolina.mff.cuni.cz/~trmac/blog/mlocate/もあります。 (ただし、GNU Findutilsの位置は最も広くインストールされている可能性があります) – ephemient

+0

こんにちは、あなたはどのようにintrenalsを見つけ出すのか知っていますか?なぜ私はこれを求めているのですか?それは、locateとupdatedbのコードビューを避けることによって時間を節約します。 – suresh

+0

はい、ドキュメントがあります。追加されました。 – ashawley

1

です。開始され、親ディレクトリで監視を確立し、再帰スキャンを実行する別のスレッドを開始します。より多くのディレクトリにアクセスすると、親はそれらを見て、すでに知っていることを見ながらより多くの時計を追加します。

それが始まったとき、あなたは非常に安価にツリー全体を見ていて(ディレクトリごとに1つの時計)、すべてを索引付けしています。これはまた、スキャン中にファイルが「見逃している」ことを確実にするのに役立ちます。

これはあなたの戦いの大部分です。通常、FS検索プログラムはインデックス作成の際に、「updatedb」のような低調なポイントに当たっていました。

インデックスの格納に関しては、ディレクトリ内でインデックスを分割することをお勧めしません。基本的には、ファイル名配列の各文字に対してstat()を呼び出すことになります。 some-very-long-shared-object-name.so.0は、名前の中のすべての文字に対してstat()を1回呼び出すことです。うまく設計されたSQLite3データベースを試してみてください。

私は、カーネルの監査フックを使用せずに、PCI認証(クレジットカードプロセッサ)の監査方法をやや安価にするプログラムと非常に似ています。

+0

なぜディレクトリの分割を使用しないのですか...私はインデックス内のすべてのファイルを単一のファイルを参照して見つけることができます....それは検索ですo(n)... OSファイルシステムが1つのファイルを取り出すのにかかる時間...私はファイルシステム内のファイルに何らかの変更が加えられたことを知る必要があります。 – suresh

+0

stat()への最終的な(避けられない)呼び出しによって、私はそのアプローチを避けたいのです。各ルックアップは、ファイル名が長いほど高価になります。 –

+1

私はすべてのフォルダでstatを実行しません。 "/home/$USERNAME/.file_search_index/s/u/r/e/s/h/list.txt"という文字列を作成し、これについてのみstatを実行しますlist.txt ....そして検索結果を表示するためにそのファイルを開きます。 – suresh

関連する問題