Mysqlで流動的な200,000件強のレコードをフリーワード検索

Tags:
  2010/05/02 00:44

就活などの影響で久しぶりの更新。

表題の機能を実装しようと思いいろいろ調べてみる。

この案件のデータは日々変化する。

5,000件/day
つまり、25,000件/week(weekday)
となると、100,000件/month

常に200,000件+を推移

データベースを早くするために

既知のことですが、改めてTEXT, BLOB, VARCHARなどの型はあまり良くない。
デフラグが効果的?
7.1.2.2. 動的テーブルの特性
MySQLのクエリを最適化する10のTips

Mysql標準組み込みのソリューション

初めて知った。
6.8. MySQL 全文検索
MySQLで全文検索 – FULLTEXTインデックスの基礎知識
MySQL FULLTEXT + Ngram : LIKE検索より数十倍高速な、お手軽 日本語全文検索 について

たたみラボさんの情報がやばい。

でも、デメリットとして、
・INSERT, UPDATEのクエリーが遅くなる。
データの流動性が高いアプリケーションだけに難しいなあ。

全文検索エンジンというソリューション

有名どころ。
Senna(未来検索ブラジル)
Namazu

ちなみに、Googleってどうなってるんだろう?
GAE使うと利用出来るのかな。BigTableとかどうなんだろう。

いまのところの方針

N-gramやるのはかなり面倒だが、
LIKE検索を使うより時間のオーダーが変わるくらい速度に差が出る。
20万強規模なのでLIKE検索は論外

N-gramならインサート時にしっかりやれば、
あとは早いので問題は無いのかもしれない。

もうちょっと考えてみるけど、
コンパイルしなおす必要がなくてこれだけの速度が出るならとても魅力的だね。