BloGroonga

2017-03-29

Groonga 7.0.1リリース

今日は肉の日ですね!

Groonga 7.0.1をリリースしました!

それぞれの環境毎のインストール方法: インストール

変更内容

主な変更点は以下の通りです。

  • CentOS 5のサポートをやめました
  • データベースの肥大化対策が入りました
  • [実験的] ヒット数が少なそうな条件から並べ替えて検索できるようになりました

CentOS 5のサポートをやめました

3/31でCentOS 5がEOLとなるため、今月のリリースからCentOS 5向けのパッケージの提供をやめました。

CentOS 6もしくはCentOS 7でのパッケージの提供は継続するので、そちらへの移行をおすすめします。

データベースの肥大化対策が入りました

6.1.4のリリースにおいて、インデックスを更新する際、非自然言語だと遅い問題を改善しました。しかし、その結果副作用として自然言語ではインデックスサイズが増える問題がありました。トークナイザーが語彙表に指定されていたら旧アルゴリズムを適用することで問題を修正しています。

全文検索をする場合、トークナイザーを指定する使い方が通例なので、以下のように2つのアルゴリズムを使い分けるようにしています。

  • 語彙表にトークナイザーの指定あり(従来のアルゴリズム適用によりインデックスの肥大化の問題がない)
  • 語彙表にトークナイザーの指定なし(非自然言語用のアルゴリズム適用により従来アルゴリズムの欠点であった性能劣化がない)

どれくらい肥大化していたかというと、5GくらいのDBで7GBくらいに増えるケースがありました。

6.1.4以降がその影響を受けます。静的更新の場合には問題なく、動的に更新したときに増加が問題になっていました。以下は変更前後のテストケースでどれくらい違いがあるかを示しています。

動的更新と静的更新によるデータベースサイズの違い

[実験的] ヒット数が少なそうな条件から並べ替えて検索できるようになりました

ヒット件数が少ない条件から絞り込むことで高速に検索できることに着目し、条件を自動的に並べ替える機能を追加しました。

  • A (件数が多い) && B (件数が少ない)

上記のような場合、以下のようにすると検索が速いです。

  • B (件数が少ない) && A (件数が多い)

これはよく知られたやりかたですが、上記を実現しようとすると、従来はアプリケーション側でクエリをいい感じに並べ替える最適化をあれこれと頑張る必要がありました。

有効にするには環境変数 GRN_ORDER_BY_ESTIMATED_SIZE_ENABLE=yes を設定します。 この環境変数が有効な場合、どれくらいヒットしそうかを推定するGroongaのAPIを活用して条件の並べかえを行うようになります。

Groongaで最適化を自動的に行うことができるようになりますが、この機能は実験的なためデフォルトでは無効です。

さいごに

7.0.0からの詳細な変更点は7.0.1リリース 2017-03-29を確認してください。

それでは、Groongaでガンガン検索してください!