saryで高速locate
saryという全文検索用モジュールを使ってlocateを実現する例です。
これをCygwinでやってみました。なおCygwinでは不安だったので事前にUbuntu8.4でも試しました。
$ ./configure $ make $ make check $ make install
最初は、makeの時に
checking for GLIB - version >= 2.0.0... no
でエラーになっていました。glib2はインストールしたはずだけど...よく見たら、glib2 (source) というのがインストールされていなかった。これをインストールしたらOKでした。
追記(2011-01-17): pkg-configも無いとダメでした。(Win7で確認)
$ make check (中略) ==================== 2 of 22 tests failed ====================
これは無視。たぶん失敗している箇所は今回のlocateでは使わない機能です。
あとは適当にスクリプトにするなりaliasを定義するなりします。
$ find / > locatedb && mksary locatedb # updatedbに相当, mksaryで*.aryファイルが作られる $ sary $1 updatedb # locateに相当 locatedb.aryを使って高速全文検索
以前、grep+fruiでgflocというlocateもどきを作りましたが、これのgrepをsaryに差し替えたsflocを作って比較。
DBファイルのサイズは56MB、aryファイルは224MB、gflocとsflocのDBは同じものを使用。結果は省略しています。
$ time gfloc correspond -x F -u 5 -l real 0m4.101s user 0m3.592s sys 0m0.185s $ time sfloc correspond -x F -u 5 -l real 0m0.456s user 0m0.075s sys 0m0.217s $ time gfloc correspond -x F -u 5 -l real 0m3.848s user 0m3.669s sys 0m0.092s $ time sfloc correspond -x F -u 5 -l real 0m0.458s user 0m0.075s sys 0m0.216s $
これは劇的に早い。上記以外でも試しましたが、間違いなく早いです。