Tasuku SUENAGA
a****@razil*****
2007年 3月 22日 (木) 18:25:28 JST
末永です。 [Senna-dev 509]でアナウンスがありましたとおり、 SennaのMySQLバインディングを作成する Tritonnプロジェクトが発足いたしました。 今までSennaのMySQLバインディングを利用されていた方に向けて、 「どのような点が変更となったのか」 をまとめました。 <<< 今までMySQLバインディングを利用されていた方が特に注意すべき点 >>> ・ALTER TABLE等でインデックスのフラグが落ちなくなった ・/var/senna/senna.confの設定が不要となった ・/var/senna/log/以下にログを出力しなくなった ・2indパッチが統合されたが、デフォルトでは「無効」となっている ---- <<< 目次 >>> ●ブラジル版MySQL bindingのバグ修正 ■ alter table/create index/drop indexなどでインデックスのフラグが落ちて しまう問題を修正 ■ fstat()の不要な呼び出しによって一般的なクエリのパフォーマンスまで落ち てしまう問題の修正 ■ テーブル削除のパフォーマンスが劣化する問題の修正 ■ show senna status関数への移行による、MySQL管理ツールやMySQLテストス イートとの親和性の向上 ●Tritonnによる新機能 ■ Tableの文字コードからSennaの文字コードを自動指定する機能の追加 ■ 2indパッチの統合とセッション変数による切り替え ■ ログ管理機構の機能向上 ■ show senna statusクエリの新設 <<< 内容 >>> ●ブラジル版MySQL bindingのバグ修正 ■ alter table/create index/drop indexなどでインデックスのフラグが落ちて しまう問題を修正 ブラジル版のMySQLバインディングでは、 ALTER TABLE/CREATE INDEX/DROP INDEXなどを発行すると、 既存のフルテキストインデックスに付与された正規化フラグやN-gramフラグが 消失してしまうという問題がありました。 よって、複数のN-gramインデックスを作成する場合には、 --- ALTER TABLE table ADD FULLTEXT index_name_title USING NGRAM (title), ADD FULLTEXT index_name_body USING NGRAM (body); --- のように、1つのクエリで複数のインデックスを作成しなければなりませんでした。 また、新しいカラムをテーブルに追加したり、カラムを削除したりする場合に、 すべてのFULLTEXTインデックスをDROP後、 再度CREATEしなおす必要がありました。 Tritonnでは、 ALTER TABLE/CREATE INDEX/DROP INDEXなどを発行しても、 既存のフルテキストインデックスに付与された正規化フラグやN-gramフラグが 保持されるように修正されております。 よって、自由にテーブルのスキーマをいじることができるようになりました。 ■ fstat()の不要な呼び出しによって一般的なクエリのパフォーマンスまで落ち てしまう問題の修正 MySQLバインディングのパッチを当てたMySQLにおいて、 Sennaと関係のないクエリの速度が落ちておりました。 Tritonnでは上記のバグが修正されております。 ■ テーブル削除のパフォーマンスが劣化する問題の修正 MySQLバインディングのパッチを当てたMySQLにおいて、 Sennaのインデックスが付与されていないtableにおいても、 Sennaのインデックスの削除処理が走っておりました。 Tritonnでは上記のバグが修正されております。 ■ show senna status関数への移行による、MySQL管理ツールやMySQLテストス イートとの親和性の向上 show senna statusという関数が新設されました。 詳細は以下で述べます。 例えば、phpMyAdminにおいて、 FULLTEXTインデックスがBTREEインデックスとして扱われる問題がありました。 そのような、MySQL管理ツールで起こりうる問題が軽減されました。 ●Tritonnによる新機能 ■ Tableの文字コードからSennaの文字コードを自動指定する機能の追加 ブラジル版のMySQLバインディングでは、 インデックス対象の文書の文字コードを /var/senna/senna.conf というファイルで指定していました。 Tritonnでは、テーブルで指定されている文字コードを用いて Sennaを利用するようになりました。 よって、/var/senna/senna.confの設定が不要となりました。 ■ 2indパッチの統合とセッション変数による切り替え 今まで別のパッチとして提供されていた2indパッチが、 Tritonnでは統合されました。 ただし、デフォルトでは2ind機能がオフとなっています。 よって、Tritonnではデフォルト状態で SELECT COUNT(*) FROM xxx WHERE MATCH(col) AGAINST('query' IN BOOLEAN MODE); といったクエリの速度が遅くなると考えられます。 以下、tritonnのドキュメントからの引用です。 > Tritonnパッチをあてると、 > MySQLのサーバ変数(SESSIONスコープ)に"senna_2ind"という変数が追加され ます。 > > my.cnfあるいはmysqldの起動オプションで"--senna-2ind"を指定するか、 > あるいは各接続にて以下のようにSETコマンドでONを設定してください。 > > mysql> SET SESSION senna_2ind=ON; > SETコマンドを使用することで、2ind機能の利用を動的にOn/Offすることがで きます。 セッション変数とすることにより、 2ind機能のOn/Offが比較的自由に切り替えられるようになりました。 ■ ログ管理機構の機能向上 senna-logとsenna-log-levelという2つのサーバ変数を設定することにより、 sennaのログを出力するか否かの制御と、 出力ログレベルの設定を行うことができるようになりました。 ブラジル版のMySQLバインディングでは、 /var/senna/logというディレクトリが存在した場合、 そこにログファイルが作成されていました。 Tritonnでは、 MySQLのデータディレクトリにsenna.logファイルが出力されるように変更されて います。 また、ログレベルを設定することにより、 重要なイベントだけをログに取得したり、 障害発生時に詳細なログを取得したりすることができるようになっております。 詳細は、Tritonnのドキュメントをごらんください。 http://qwik.jp/tritonn/feature.html#fe5e27b4b3cc155675fb6c428415101b ■ show senna statusクエリの新設 show senna statusという、 sennaインデックスの統計情報を取得できるクエリが追加されました。 詳細は、Tritonnのドキュメントをごらんください。 http://qwik.jp/tritonn/feature.html#15052ce6816e681d959ff725d189cde3 ---- 以上、Tritonnでの変更点でした。 参考になれば幸いです。 --- Tasuku SUENAGA <a****@razil*****>