mail_babir****@yahoo*****
mail_babir****@yahoo*****
2013年 4月 24日 (水) 20:32:37 JST
田辺です。
> > 他のストレージエンジンでは、テーブルを削除すれば関係ファイルはすべて削除されるかと思うのですが、mroongaでもそうした仕様にできるでしょうか?
>
> すみません。できません。
> まず、↑のファイルはgroongaのテーブルに対応するものではなく、
> groongaのデータベースに対応するファイルなので、テーブルに関
> 係するファイルは今の状態ですべて削除されています。
>
> 1つのテーブルを削除する毎に↑も削除しているとテーブル間の関係
> を維持できなくてうまく動けなくなってしまうのです。(groonga
> ではデータベースがテーブル間の関係を管理している。)
データベースに対応するファイルということなのですね。
諸々迅速にご対応頂けて助かります。次回アップデートが楽しみです。
あと、phpMyAdminの件ですが、コードを探ったところ内部的にはクエリ発行の前後でmicrotimeの差分を計測しているだけのようでした。
ただ、phpMyAdminの場合、検索での取得レコードを制限していない場合でも、内部で自動的にlimit句が付加されており、この点が考慮できていませんでした。
SELECT * FROM `test` WHERE MATCH (`main`) AGAINST ('と*' IN BOOLEAN MODE);
の実行時間を比較したつもりだったが、実際には
SELECT * FROM `test` WHERE MATCH (`main`) AGAINST ('と*' IN BOOLEAN MODE) LIMIT 0 , 30;
の実行時間を比較していた。
そこで、改めて自作のphpスクリプトでクエリ発行前後のmicrotime差分を計測してみたところ、やはりlimit句の有無でmroongaとmyisamでの検索速度に大きく差が出ていることがわかりました。
全体27,030件、全文インデックス(mroongaはTokenDelimit)を貼ったmyisam,mroongaの2つのテーブルを用意して、それぞれに18020件がヒットする前方一致のSELECT文を発行。
・limitなし(18020件中18020件取得)
myisam : 0.1610sec
mroonga : 0.0925sec
・limitあり(18020件中1件取得)
myisam : 0.0019sec
mroonga : 0.0148sec
・count(*)
myisam : 0.1076sec
mroonga : 0.0333sec
limit句がある場合、myisamでは約85倍の高速化が実現していますが、
mroongaでは6倍の高速化に留まっている点が、phpMyAdmin上での検索時間の差として出て来たものと思われます。
limit句がある場合、myisamの方がmroongaよりも7倍以上速いという結果になりました・・・。
ここの速度が同程度まで出ればベストなんですが。
ただ、テストデータについては単純結合で増やしただけのデータなので、かなり重複した値が多くて、通常の環境とは合っていないとは思います。
他の方のベンチマークも見てみたいですね。
田辺公平