最近、全文検索エンジンがあった方がいいような気がして、SennaをMySQLに組み込んだTritonnを、いじくってみた。

ちょっと使った感じでは、とにかく、インデックスを作る時間がかなり必要になりそう。で、そのインデックスを作っている間、ディスクアクセスがごりごり走る関係で、マシンが重ーくなるわけで、それって本番環境でインデックスを作ったりしたら、どうなるんだろうと思う。(ま、普通に考えれば、レスポンスタイムが悪化しますわな)

ま、それを回避するために、他のマシンで全文検索エンジン用のインデックスファイルを作って、そのファイルをTritonnが動くサーバにアップロードするって技もあるにはあるんだろうけれど、インデックスファイルをアップロードする前にMySQL(Tritonn)はやっぱり落としておきたいような気がする(うっかり、アップロード中のインデックスファイルを見ちゃったMySQLはどうなるんだろう…とか思うと)ので、そうなると、例えば、2インスタンス立てて、1つでインデックス切り替えやりつつ、もう1つのインスタンスで運用して、終わったら切り替えるみたいな運用が考えられるけれど、MySQLを2インスタンスってのがこれまた面倒な気がする。こういう運用なら、サーバ2台立てて、ロードバランシングする運用になるんだろうか。

…うーむ。

ふと、Apache Jakartaプロジェクトに全文検索エンジン「Lucene」ってのがあることがわかったので、Luceneを試用してみることにしよう。別に、全文検索エンジンと新アプリケーションの間は、SQLでインターフェイスしなきゃいけないアーキテクチャでもなさそうだし(加えて、Luceneは上司が嫌いなJavaだけど)アプリケーション間のインターフェイスをHTTP+JSONにでもしておけば、問題もないだろうし。

全文検索エンジンには、インデックス作成(の時間と負荷)と、インデックス入れ替えの問題(ま、止めてもいんだろうけど)はやっぱり付いて回りそうだなぁ。この辺がシームレスにできればいいんだけども。

追記:

そういえば、Hadoopを使ってLuceneのインデックス作成を分散処理することができれば、なかなか愉快なことになると思うけど、どうなんだろうか。調べてみよう。