BloGroonga

2020-08-29

Groonga 10.0.6リリース

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

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

変更内容

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

  • logical_range_filter 大きなデータの検索プランを改善しました。

    • 通常、 logical_range_filterlogical_select より高速ですが、以下のケースでは、 logical_select より遅くなっていました。
      • logical_range_filter には要求されたレコード数をなかなか見つけられない場合にシーケンシャル検索からインデックス検索に切り替える機能があります。
      • logical_range_filter は通常、検索対象のレコード数が多い場合は、シーケンシャル検索を使います。
      • 上記の切り替えが発生した場合は、 logical_select と検索処理がほぼ同じになります。そのため、大きなデータを対象とした検索では、上記のケースで、 logical_range_filter は、 logical_select の数倍遅くなります。なぜなら、 logical_range_filter は検索後にソートを実行するためです。

        • 今回のリリースから、大きなデータを検索する場合に、今までよりシーケンシャル検索が採用されやすくしました。
        • これによって、 logical_select と同等の処理になるケースが減少し logical_range_filter のパフォーマンスが改善します。
  • [httpd] バンドルしているnginxのバージョンを1.19.1に更新しました。

  • Debian GNU/Linux へのインストール方法を変更しました。

    • groonga-archive-keyring の代わりに groonga-apt-source を使うように変更しました。
    • lintian コマンドが /etc/apt/sources.lists.d/ 配下にファイルを置くパッケージは apt-source を使うよう推奨しているためです。

      • lintian コマンドはパッケージングに共通のエラーをチェックするためのコマンドです。
      • インストール方法についての詳細は、以下も参照してください。

  • logical_select highlight_htmlhighlight_full をサポートしました。

  • 値を持たない配列を削除した時、そのレコードのIDを再利用するようにしました。

    • 値を持たない配列を削除した場合、削除されたIDは再利用されません。
    • Groongaは大きなIDがあることによって、多くのストレージを使用します。大きなIDはそれだけで、多くのストレージを使うためです。

      • 大きなIDは、例えば、Mroongaの mroonga_operations のように多くの追加と削除によって発生します。
  • select インデックスを設定していない全文検索のパフォーマンスを改善しました。

  • 関数 全ての引数が他のテーブルへの参照か、リテラルである関数のパフォーマンスを改善しました。

  • インデックス構築 トークンカラムを使った静的インデックス構築のパフォーマンスを改善しました。

  • "_score = func(...)" のパフォーマンスを改善しました。

    • _score の値が "_score = func(...)" のように関数によってのみ算出される場合のパフォーマンスを改善しました。
  • 応答送信のエラーが発生した後の応答にゴミが含まれることがある問題を修正しました。

    • これは、クライアントが全ての応答を読み込まずにコネクションがクローズされた場合に発生することがあります。

logical_select highlight_htmlhighlight_full をサポートしました。

  • highlight_htmlhighlight_full は、今まで select--output-columns でしか使えませんでしたが、 今回のリリースから、以下のように logical_select でも使えるようになりました。

    plugin_register sharding
    plugin_register functions/number
    
    table_create Memos_20170315 TABLE_NO_KEY
    column_create Memos_20170315 timestamp COLUMN_SCALAR Time
    column_create Memos_20170315 content COLUMN_SCALAR Text
    
    table_create Memos_20170316 TABLE_NO_KEY
    column_create Memos_20170316 timestamp COLUMN_SCALAR Time
    column_create Memos_20170316 content COLUMN_SCALAR Text
    
    table_create Memos_20170317 TABLE_NO_KEY
    column_create Memos_20170317 timestamp COLUMN_SCALAR Time
    column_create Memos_20170317 content COLUMN_SCALAR Text
    
    load --table Memos_20170315
    [
    {"timestamp": "2017/03/15 00:00:00", "content": "Groonga is fast."},
    {"timestamp": "2017/03/15 01:00:00", "content": "Mroonga is fast and easy to use."}
    ]
    
    load --table Memos_20170316
    [
    {"timestamp": "2017/03/16 10:00:00", "content": "PGroonga is fast and easy to use."},
    {"timestamp": "2017/03/16 11:00:00", "content": "Rroonga is fast and easy to use."}
    ]
    
    logical_select Memos \
      --shard_key timestamp \
      --query 'content:@easy' \
      --output_columns 'content, highlight_html(content)'
    [
      [
        0,
        0.0,
        0.0
      ],
      [
        [
          [
            3
          ],
          [
            [
              "content",
              "Text"
            ],
            [
              "highlight_html",
              null
            ]
          ],
          [
            "Mroonga is fast and easy to use.",
            "Mroonga is fast and <span class=\"keyword\">easy</span> to use."
          ],
          [
            "PGroonga is fast and easy to use.",
            "PGroonga is fast and <span class=\"keyword\">easy</span> to use."
          ],
          [
            "Rroonga is fast and easy to use.",
            "Rroonga is fast and <span class=\"keyword\">easy</span> to use."
          ]
        ]
      ]
    ]
    

さいごに

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