Kouhei Sutou
kou****@clear*****
2015年 9月 29日 (火) 13:08:51 JST
須藤です。 今日は肉の日ですね! Groonga 5.0.8をリリースしました! http://groonga.org/ja/blog/2015/09/29/release.html 今回のリリースの主なトピックは次の2点です。 * 一時テーブルにカラムを追加できるようになった * HTTP/2対応 ○ 一時テーブルにカラムを追加できるようになった まだ、Groongaを全文検索サーバーとして使っているユーザーには 目に見えるメリットはないのですが、今後の改良で重要になる機能 が追加されました。それが一時テーブルにカラムを追加できる機能 です。 今後、どのようなメリットがありそうかいくつか紹介します。 selectのoutput_columnsで出力値に名前をつけることができるよう になります。SQLでいう「AS alias_name」機能です。 今は、output_columnsに * snippet_html(title)と * snippet_html(body) を指定するとどちらも出力名が「snippet_html」になってしまいま す。これを、snippet_html_title、snippet_html_bodyのように区 別できるようになります。 selectのsortby・selectのdrilldownでカラム値そのものではなく、 カラム値を加工した値でソート・ドリルダウンできるようになりま す。 たとえば、Time型のカラムの値を加工して曜日にし、曜日でドリル ダウンできます。今は、別の曜日カラムを用意し、loadするときに 曜日を計算し、それを使ってドリルダウンする必要があります。 (動的に計算する方が便利ですが、事前に曜日カラムを用意した方 が速いので、今のやり方を使うケースもあるでしょう。) Mroongaのラッパーモードでトランザクション対応ストレージエン ジン(たとえばInnoDB)をラップしているとき、ロールバックして もインデックスが壊れないようにできます。トランザクション内で の変更を一時テーブルとカラムに保存しておき、コミットされたと きはそのデータを実際のテーブルに反映、ロールバックされたとき は単純に破棄することができるからです。 ○ HTTP/2対応 GroongaはHTTPを話せる全文検索サーバー機能を提供しています。 この機能の実装は2つあり、1つはGroonga独自のHTTPサーバー実装 (groonga --protocol http)で、もう1つはnginxモジュールでの 実装(groonga-httpd)です。このうち、nginxモジュールでの実装 でHTTP/2を使えるようになりました。 先日リリースされたnginx 1.9.5から実験的な機能としてHTTP/2が サポートされています。Groongaはnginxをバンドルしてリリースし ていますが、バンドルしているnginxのバージョンを1.9.5にし、 HTTP/2を有効にしてビルドするようにしています。 groonga-httpd.confを次のように変更することでHTTP/2でGroonga を使うことができます。 http { server { # listen 10041; listen 10041 http2; # <- http2を追加 # ... } } HTTP/2を使うと、通信量が削減され、スループットがあがる可能性 があります。(計測していませんが。。。) ○ おしらせ 今週は次のイベントがあります。Groongaに興味のある方はぜひお 越しください。 * Groonga新リリース自慢会 5.0.8 * https://groonga.doorkeeper.jp/events/31904 * 今夜19:30から秋葉原で。 * Groongaで学ぶ全文検索 2015-10-02 * https://groonga.doorkeeper.jp/events/31859 * 今週金曜19:30から大塚で。 ○ お願い Windowsでのスパースファイルの有効性の検証を協力してくれる方 を引き続き待っています! https://github.com/groonga/groonga/issues/384 ○ 変更点一覧 http://groonga.org/ja/docs/news.html#release-5-0-8 改良 ^^^^ * [Windows] MySQLにバンドルしてビルドできるようになりまし た。(一時できない時期がありました。) * [スクリプト構文] マッチ演算子 や 等価演算子 のような述語 演算(真偽値を返す演算)が Int32 ではなく Bool の値を返 すようになりました。 * [API] GRN_PTR バルク・ GRN_PVECTOR バルクが参照する grn_obj の所有権を持てるようになりました。 GRN_OBJ_OWN フラグを GRN_PTR バルク・ GRN_PVECTOR バルクに指定すると、 自身が解放されるときに参照している grn_obj を grn_obj_close() します。 * [非互換][正規表現] マッチ前にマッチ対象のテキストを正規 化するようにしました。これは一貫性と性能のためです。 前方一致検索演算子 のように他の演算は対象のテキストを正 規化しています。 \Ahello のようにシンプルな正規表現はインデックスを使って 評価できます。インデックスを使うと速いです。 もし、マッチ対象のテキストが正規化されていないと、 \A[Hh]ello や \A(?i)hello といった複雑な正規表現を書かな いといけません。複雑な正規表現はインデックスを使って評価 できません。マッチ対象のテキストが正規化されていると、シ ンプルな正規表現を使うことができます。シンプルな正規表現 はインデックスを使って評価できるかもしれません。インデッ クスを使えると速いです。 * [ドキュメント] ドキュメントを改善しました。 [GitHub#396][GitHub#397][GitHub#399][GitHub#403] [GitHub#405][GitHub#409] [佐藤博之さんが報告][佐藤博之さんがパッチ提供] * [highlight_html] 性能を改善しました。 [groonga-dev,03427] [佐藤博之さんが報告] * [snippet_html] 性能を改善しました。 * [CMake] 2回同じ pkg-config を実行しないようにしました。 [Sergei Golubchikさんがパッチ提供] * 時刻に対するチェックのうち、「年」に対する不要なチェック を削除しました。この変更前は紀元前は常に不正な時刻でした。 この変更後は、システム( mktime() )が紀元前をサポートし ていれば、紀元前の時刻も妥当な時刻になります。 * [grn_ctx_is_opened()] 指定したIDのオブジェクトが開かれて いるかどうかをチェックするAPIを追加しました。 * [grn_obj_remove()] 最大メモリー使用量を減らしました。 grn_thread_get_limit() が 1 を返す場合、一時的に開いたオ ブジェクトを処理が終わったら閉じるようになります。 * [ドキュメント][table_remove] 説明を増やしました。 * [groonga executable file] スタンドアローンモードのときは dump の結果の最後に改行を追加するようにしました。 * [Process log] grn_init のログにGroongaのバージョンを入れ るようにしました。 * Gitterにチャットルーム をオープンしました。 * https://gitter.im/groonga/public * [status] 一貫性のために、 starttime の別名として start_time を追加しました。他のキーは snake_case スタイ ルの名前になっていたのです。 starttime は非推奨になりま した。代わりに start_time を使ってください。 * バンドルしている鬼雲を更新しました。 * [ドキュメント][scorer_tf_at_most] ドキュメントを追加しました。 * 一時テーブルに対するカラムをサポートしました。今のところ C APIからしか使うことはできません。次のリリースでは select はこの機能を活用する予定です。 * [grn_vector_pop_element()] 公開しました。 * [groonga executable file] ロック獲得に成功したかどうかを チェックするようにしました。 * [groonga-suggest-create-dataset] KEY_NORMALIZE ではなく --normalizer を使うようにしました。なぜなら、 KEY_NORMALIZE は非推奨になっているからです。 * [grn_obj_cast()] 公開しました。 * [実験的][grn_ii_cursor] 公開ました。 * [実験的][grn_ii_cursor_open()] 公開しました。 * [実験的][grn_ii_cursor_next()] 公開しました。 * [実験的][grn_ii_cursor_close()] 公開しました。 * [マッチ演算子] インデックスの検出方法を改善しました。トー クナイザー付き語彙表に作られているインデックスを優先しま す。 * [groonga-httpd] バンドルしているnginxを1.9.5に更新しまし た。1.9.5はHTTP/2をサポートしています。HTTP/2モジュール は有効になっています。 修正 ^^^^ * [スクリプト構文] 右辺が true のとき &! が動いていない問題を修正しました。 * libtool 2.4.6を使うと性能劣化する問題を修正しました。 [GitHub#406][GitHub#407] [佐藤博之さんがパッチ提供] * [等価演算子] セクションが無視される問題を修正しました。 感謝 ^^^^ * 佐藤博之さん * Sergei Golubchikさん -- 須藤 功平 <kou****@clear*****> 株式会社クリアコード <http://www.clear-code.com/> Groongaベースの全文検索システムを総合サポート: http://groonga.org/ja/support/ パッチ採用 - プログラミングが楽しい人向けの採用プロセス: http://www.clear-code.com/recruitment/ コードリーダー育成支援 - 自然とリーダブルコードを書くチームへ: http://www.clear-code.com/services/code-reader/