Kawanet Blog II

アクセスカウンタ

zoom RSS Tokyo Dystopia - 50万レコードのインデクス=2分18秒、検索=58ミリ秒〜

<<   作成日時 : 2009/05/06 03:54   >>

なるほど(納得、参考になった、ヘー) ブログ気持玉 7 / トラックバック 0 / コメント 0

Tokyo Dystopia のインストール手順〜全文検索を試す のポストでは、少量データだけで
動作を試しましたが、今度はもっと大量のデータを検索した場合の性能を確認してみました。
CPU 1.66GHz、VMware(ホストOS:Windows XP、ゲストOS:Debian Lenny)、
VMware のメモリは 1.5GB、ディスクは SSD という環境の場合の値を参考までに。

importtsv - タブ区切りテキスト(.tsv)の一括インポート


50万レコード×200バイト=100MB の UTF-8 タブ区切りテキストファイルで
Q-gram のインデックスを作成してみます。

$ time tcqmgr importtsv example.tch example.tsv

.tsv→.tcq のインデックス処理には6分間かかりました。
これなら、実用的な速度ですね!

tcqdb.c によると、デフォルトのトークンキャッシュの容量は128MB です。(QDBCCDEFICSIZ)
今回のファイルでは、14万トークン程度ごとに計3回に分けてインデックス処理が進みました。
作成された example.tch は、約 350MB でした。

$ rm -f example.tch
$ time tcqmgr importtsv -ic 512000000 example.tch example.tsv

-ic オプションを付けて、キャッシュ容量を 512MB に増やすと、
インデックス処理時間が 6分間→3分間に短縮しました。
ファイルサイズも、280MB に減ります。

-ic 値の目安としては、元データの6倍程度で一括インデックスが可能でした。

さらに、ファイルシステムのチューニング を参照して、noatime,data=writeback を指定すると、
2分18秒に短縮しました。指定前と比べて25%の高速化です。

optimize - インデックスファイルの最適化


importtsv で -ic オプションを付けずに、分割してインデックスが作成されても
検索性能には影響ありませんが、インデックスファイルの容量が大きくなるようです。
importtsv 後に最適化処理を実行すると、ファイルサイズは同じになります。

$ time tcqmgr optimize example.tch

インデックス時に分割処理されていても、分割処理されていなくても、
optimize 後は全く同じファイルサイズになりました。

search - 全文検索の速度を検証


$ time tcqmgr search -max 100 example.tch "R25 cafe"
1820973

real    0m0.058s
user    0m0.024s
sys     0m0.028s

50万件から『R25 cafe』という文字列で含まれるレコードを検索すると、
1件がヒットしました。平均すると、60ミリ秒程度で十分に速いです。

$ time tcqmgr search -max 100 example.tch "03-3575-6825"
1820973

real    0m0.681s
user    0m0.436s
sys     0m0.204s

しかし、R25 cafe の電話番号『03-3575-6825』で検索してみると、
平均700ミリ秒に伸びました。

他のフレーズでも検索してみましたが、必ずしも、クエリの文字数が
検索処理にかかる秒数に影響しているわけではないようです。
クエリに『03-35』のような出現頻度が多い文字列が含まれる場合は、
処理に時間がかかるみたい。(『03-35』は計5783レコード存在する)

検索実行される回数が多い場合は、Tokyo Dystopia の手前に別途、
検索結果のキャッシュを作ったほうが良いかな。

↑の例では time コマンドを使ってますが、-ph オプションを付けると、
ヒット件数と検索処理時間が表示されます。
 

テーマ

注目テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ
気持玉数 : 7
なるほど(納得、参考になった、ヘー) なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
Tokyo Dystopia - 50万レコードのインデクス=2分18秒、検索=58ミリ秒〜 Kawanet Blog II/BIGLOBEウェブリブログ
文字サイズ:       閉じる