2007年02月28日

Senna 1.0.0がリリースされたよ!

遂にSennaの1.0.0が出ましたよ!
プレスリリースによると

●メジャーバージョン(1.0.0)リリースについて

Senna1.0.0では転置インデックスの格納形式を改善し、更新/検索速度を損ねる
ことなくサイズを最大で従来比70%程度まで圧縮することに成功しました。この
ため、従来よりも大規模な文書を1台のサーバで管理することが可能となりました。

という事なので早速wktkしながらinstallしました。

色々考えるのがめんどくさかったので、動いてる環境にsennaとmysqlを順番にmake installしてmysql restartです。

早速indexを作り直してみると。。。。

-rw-rw----  1 mysql mysql 1.0K  21:05 SEARCH_DATA.MYI
-rw-rw---- 1 mysql mysql 263M 21:05 SEARCH_DATA.000.SEN.i.c
-rw-rw---- 1 mysql mysql 31M 21:05 SEARCH_DATA.000.SEN.i
-rw-rw---- 1 mysql mysql 45M 21:03 SEARCH_DATA.000.SEN.l
-rw-rw---- 1 mysql mysql 8.1M 20:56 SEARCH_DATA.000.SEN
-rw-rw---- 1 mysql mysql 426M 20:56 SEARCH_DATA.MYD
-rw-rw---- 1 mysql mysql 8.5K 20:56 SEARCH_DATA.frm
-rw-rw---- 1 mysql mysql 1.0K 17:01 SEARCH_DATA_senna_r327.MYI
-rw-rw---- 1 mysql mysql 325M 17:01 SEARCH_DATA_senna_r327.000.SEN.i.c
-rw-rw---- 1 mysql mysql 31M 17:01 SEARCH_DATA_senna_r327.000.SEN.i
-rw-rw---- 1 mysql mysql 85M 16:59 SEARCH_DATA_senna_r327.000.SEN.l
-rw-rw---- 1 mysql mysql 8.1M 16:51 SEARCH_DATA_senna_r327.000.SEN
-rw-rw---- 1 mysql mysql 426M 16:51 SEARCH_DATA_senna_r327.MYD
-rw-rw---- 1 mysql mysql 8.5K 16:51 SEARCH_DATA_senna_r327.frm
_senna_r327って付いてるのが過去の物(0.8.0で作ったindex)で、上の方が1.0.0で作ったindexです。
本当にサイズ圧縮されてる!
今のところ漏れとか不具合っぽいのがないのでいい感じです。
どのようにしてサイズ削減を行ったかにもよりますが、サイズが小さいと細かい所でパフォーマンスも上がりそうな予感です。

そしてsennaのソースを久しぶりに見てみたら気になる所がいくつか。
mysql-4.0.27.senna.diffのsql/sql_yacc.yyを弄ってる箇所に

+       | ULONG_NUM { $1 < 65536 ? $$=((ulonglong)$1) << 32 : $$=$1; };
という処理が。
これはきっとUSING NGRAMとかの拡張クエリの部分を実装してる所だと思うんですが、ここに数値を直接指定できるようになってるっぽいんですよね。USING 97342482みたいに。
で、このUSINGのパラメータはMI_INFOのsenna_flagに入るっぽく、同patchのft_sen_index_addが実装されてる所辺りに
+#define SECTIONALIZE 0x00080000
ってあって
+  if (info->s->keyinfo[keynr].senna_flags & SECTIONALIZE) {
+ FT_SEG_ITERATOR ftsi;
+ uint len = 0;
+ unsigned int section;
+ sen_values *values;
+ _mi_ft_segiterator_init(info, keynr, record, &ftsi);
+ while (_mi_ft_segiterator(&ftsi)) {
+ if (ftsi.pos) {
+ if (ftsi.len > 1048576) { sen_log("ft_sen_index_add: ftsi.len=%d", ftsi.len); }
+ if (ftsi.len > len) { len = ftsi.len; }
+ }
+ }
+ if (!len) { return -1; }
+ _mi_ft_segiterator_init(info, keynr, record, &ftsi);
+ section = 1;
+ while (_mi_ft_segiterator(&ftsi)) {
+ if (ftsi.pos) {
+ values = sen_values_open();
+ sen_values_add(values, ftsi.pos, ftsi.len, 0);
+ sen_index_update(info->s->keyinfo[keynr].senna, &pos, section, NULL, values);
+ sen_values_close(values);
+ }
+ section++;
+ }
+ return 0;
+ } else {
みたいな処理が。

sen_values_*ってのは段落云々のAPIだから、mysqlバインディングのドキュメントに無い実装があるっぽいかもしれません。
多分複数のフィールドを一つの塊として扱えるんじゃないのかなぁ。良くわからないけど。


開発ロードマップを見るとストレージ機能の実装が有るそうなので、こちらもwktkです。

Posted by Yappo at 05:49 | Comments (1) | TrackBack

2007年02月23日

Soozy Conference #1 を開催します

Soozy Conference #1 を開催します

言語を問わないWeb Frameworkに関する勉強会です。
閉鎖されたコミュニティによる技術的にも笑い的にも濃いカンファレンスがテーマです。
株式会社ライブドア様の御好意により会場を提供して頂きました。

Posted by Yappo at 18:02 | Comments (0) | TrackBack

2007年02月15日

デブサミで発表してきました

デブサミ2007出張Shibuyaイベントでお話ししてきました。
300人の会場が、ほぼ満席状態でかつ完璧なアウェイ状態な中でかつ、会場が凄く豪勢で恐縮する中での発表ですが、前日の入念なリハーサルや発表資料を余裕をもって用意していたおかげで、なんとか無事終わる事が出来ました。

お話の内容は、最初はPlaggerインスパイア系のツールをする予定でしたが、それらツールの作者がLTで発表してしまうため急遽ツールを作成し、そのツールに関する発表もしました。

発表内容はhttp://tech.yappo.jp/docs/devsumi2007/期間限定ノーカット版
発表したDishuberに関してはhttp://svn.yappo.jp/repos/public/Dishuber/trunk/
にて取得可能です。

Dishuberに関しては後ほどちゃんと書く予定。

豪勢なメンツでのDISカッションや裏番組が羽生さんセッションがあったりしたので、負けないくらい多様なプレゼン手法を取り入れてみました。たぶん15くらい。

関係者のみなさまお疲れさまでした。
そして、今回の発表の原動力をあたえてくれた怨霊↓の皆さんには慎んで感謝を申し上げます。


その他に関しては、あとで出す。

Posted by Yappo at 05:26 | Comments (0) | TrackBack