SSD向け全文検索エンジン

ここのところ私がメインでかかわっていた検索エンジンがリリースされました。
こちらに紹介があります。
http://d.hatena.ne.jp/kzk/20090310

デモとしてWikipediaの全言語(記事が少ない言語は省かれているかも)の全記事
約50GBからの検索を1台のPCで行うものが公開されています。
よかったら試してみてください。
http://demo.sedue.org/wikipediasearch/

下の方でいくつか数字を出していますが、
正確に計ったわけではないので参考程度にしてもらえると。

ちょこっと宣伝

ボックスに単語を入れると検索できます。
一応、全言語で検索するデモなので、各言語での検索は
全言語の検索結果をフィルタしているだけです。
単語の列を入れると、AND検索できます。
検索速度のデモなので、結果のキャッシュなどはしていません。
すべてのクエリについて厳密な結果を出そうと試みまず。
100万docs程度までは1秒程度で求まるようです。
安全のため時間かかりすぎてやばいと思ったクエリ(数秒程度?)は結果を出しません。
AND検索ではそういう単語は無視します。すみません。
この辺は実際の運用時は概算などをするようになるはずです。
""で囲うと、空白を含む文字列を検索できます。""の中に"を書くには\でエスケープすればOKです。
アスキーアートなども検索できるはずです。
スコアリングは急きょ作ったものなのでかなり適当です。
この辺はチューニング次第だと思いますので、あまり気にしないでください。
形態素解析の結果など使えばもっと良くなるとは思います。

スループットは、C2Qの普通のマシンで、
平均的なクエリなら1スレッド50qpsぐらいは出ているんじゃないかなと思います。
構築速度のチューニングの方に時間をかけたおかげで検索にはなかなか手が回らず、
前日に10倍速くなるとそんな状況だったのでまだ速くなるとは思います。

インデックスの構築は、HDD*4のRAID0のマシン上でこのデータが25-6時間ほどでした。
HDD1台だとこの倍以上時間かかるかと思います。

どうでもいい話

CGIC++で書かれている。
ちょっとキモかっこいいXHTML生成DSL in C++
私の言語屋としての遊び心…ではなくてRPCとの兼ね合いですが。
これもいつか紹介したいなあ。

ちょこっと雑談

技術的に面白い側面はいろいろあると思うのですが、
詳しい話はセミナーでお話しすることになりそうです。
ここではちょっとそれ以外のことを書こうと思います。

なんでSSD向けの検索を作ることになったかはよく覚えていないのですが、
きっかけはX300というSSDを搭載したノートパソコンをもらったことだと思います。
プログラマなんてものはこんなもの物珍しげなデバイスを手に入れたら、
それをどう使い倒そうかとかしか考えないわけで。

ある日社内のミーティングで検索エンジンの話を聞いているときに
これSSDに載せればいいんじゃねえか?とかそういう軽い気持ちで
手元のマシンで実験を始めました。
適当に実験をして思った以上に性能が出そうだったので
これはいけるんじゃないかなということになりました。

        • -

私にとってなんだか残念なのは、
Web上のレビューしかり、雑誌しかり、ブログしかり、
SSDを幾分か速いHDDとしか見ていないのが多いことです。
シーケンシャルリード200MB/sec超のベンチを取って、
Windowsの起動が数十秒速くなって満足、ではちょと勿体なさすぎると思うのです。
見るべきところは、どう考えてもランダムリードです。
ここをみるとHDDとは全く違うデバイスだということがわかります。
そうすると、HDDではできなかったことができるようになるかもしれない。
HDDではとても実用にならなかったアルゴリズムが、
SSDによって現実的になるかもしれない。
そういう可能性に思いを馳せることができるのです。
こんなデバイスが数万で買えるとか、
その価値に気付かなければあまりにも勿体ないです。

まあしかし、私は別にSSD関係者の回し者でも何でもないので、
結局のところあまりどうでもいいのですが。
しかし、SSDを応用できる分野はまだまだあると思いますので、
そういうのを考えてみるのも面白いかと思います。
従来メモリに置かなければできなかったことがSSDでできるとか、
同じことをするなら圧倒的にシンプルな方法でOKになるとか……。
SSDLarrabeeGPUと同じくとても面白いものだと私は思います。