2007年01月29日
[Senna]インデックスの再生成

SennaのMySQLバインディングの話。
ふと気がつくと、Senna の正規化の機能(大文字、小文字、全角、半角を同一視してインデックスしてくれる機能)が働いていないようだったので、SHOW INDEX で調べてみたら、Index_type のところで NORMALIZE が欠落していました。alter table を行うと Senna のインデックス作成時指定のフラグ内容が失われてしまう、とはSennaのサイトに書いてありましたが、そのような処理は行ってなかったんですが、レプリケーションの設定で、マスターとの同期の際に書き換わってしまったのかもしれません。
ということでインデックスの再生成を行ったのですが、Googleとかで調べても、あまり情報が見つからなかったので記しておきます。
まずはインデックスの内容の確認
mysql> SHOW INDEX FROM table_name;
インデックスの削除
mysql> DROP INDEX index_name ON table_name;
インデックスの(再)設定
mysql> alter table table_name add FULLTEXT INDEX index_name USING SENNA, NORMALIZE (column_name);
最後にMySQLサーバーを停止し、MySQLのデータディレクトリに移動
# myisamchk -r -q table_name.MYI
インデックス作成時に、alter table ではなく、create index 構文でも良さそうだったんですが、私の環境ではうまく行きませんでした。その後の myisamchk の処理を行った後に、空のインデックスしか生成されず、しばし悩みました。Mecab が見つからないと空のインデックスが出来るらしいのですが、パスは通っているので、ちょっと???です。で、試しにと、alter tableでインデックスを設定すると、うまく行きました。
ブログサーチシステムは、少しずつ進行中。
やはり、クローラーのパフォーマンスをあげるのが難しいところ。
現在、1日30万件超の更新情報を処理し、非日本語のエントリーや重複エントリー、不正なエントリー(日付がおかしすぎる等)を省いて、毎日20万件くらいの新着登録を行えていますが、初期段階としてこの倍のパフォーマンスはほしいところ。
現在、クローラーは1台なので、台数をもう1台増やせば倍近くにはなりそうなのだけれども、プログラムの処理側でもう少し追い詰めてみたいところで、思案中。
DBはマスタ、スレーブ共に、RAID1にしているけれども、スレーブ側のインデックスの再構築がさほど時間かからずに完了できることが分かったので、スレーブ側はRAID0にして、冗長性よりも速度を取ろうかと思っています。
あとは、ユーザーインターフェイスの部分にそろそろ取り掛かっていこう。
多少はAJAXを使おうと思ってます。
投稿者 田中@グリニッジ : 2007年01月29日 17:06
トラックバック
このエントリーのトラックバックURL:
http://blog.tanaka-cs.com/mt/mt-tb.cgi/120
