BloGroonga

2020-01-29

Groonga 9.1.2リリース

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

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

変更内容

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

  • [tools] 指定したテーブルまたはカラムのファイルのみをコピーするスクリプトを追加しました。

    • このスクリプトの名前は、copy-related-files.rbです。
    • このスクリプトは非常に大きいデータベースから指定したテーブルまたはカラムを抽出したい場合に便利です。
    • 特定のテーブルまたはカラムに関連するファイルは、障害の再現に必要なことがあります。
    • データベースをまるごと提供するのが難しい場合は、このツールを使って対象のテーブルまたはカラムに関連するファイルを抽出できます。
    • このツールは以下のように使います。
    copy-related-files.rb \
      --destination=db.copy \
      --target=column.index \
      db
    
    • --destination でコピー先のディレクトリを指定します。
    • --target でコピーされるテーブルまたは、カラムを指定します。
      • このオプションを複数指定することで、複数のテーブルまたは、カラムをコピーできます。
  • shutdown 全てのスレッドが使われている場合でも、 /d/shutdown?mode=immediate を即時受け付けるようにしました。

    • この機能はGroonga HTTPサーバでのみ使えます。
  • GRN_ENABLE_REFERENCE_COUNT=yes とすると、使用していないオブジェクトをすぐに開放するようになります。

    • この機能は実験的です。パフォーマンスが落ちます。
    • 多くのテーブルにまたがるデータをロードする際等にメモリーの使用量を一定量に保つ効果が期待できます。

さいごに

9.1.1からの詳細な変更点は9.1.2リリース 2020-01-29を確認してください。

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

2020-01-07

Groonga 9.1.1リリース

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

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

変更内容

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

  • load Apache Arrow 形式のデータをサポートしました。

    • Apache Arrow形式のデータを使うことで、パースのコストを削減でき、他のフォーマットより高速にデータをロードできる可能性があります。
    • この変更によって、他のデータ分析システムからApache Arrow形式のデータを直接Groongaへ入力することもできます。
    • Apache Arrow形式のフォーマットはHTTPインターフェイスでのみ使えます。コマンドラインインターフェイスでは使えません。
  • load エラーメッセージを改善しました。

    • load コマンドのレスポンスにエラーメッセージも含むようにしました。
    • この変更によって、データのロードに失敗した場合、以下のように load コマンドのエラーの詳細を出力します。
    table_create Memos TABLE_NO_KEY
    [[0,0.0,0.0],true]
    column_create Memos content COLUMN_SCALAR Text
    [[0,0.0,0.0],true]
    load --table Memos
    [
    {"content": "Groonga is fast"}
    ]
    [[0,0.0,0.0],1]
    load --table Memos
    [
    {"_id": "invalid", "content": "Mroonga is fast"}
    ]
    [[[-22,0.0,0.0],"<_id>: failed to cast to <UInt32>: <\"invalid\">"],0]
    
    • 複数のエラーメッセージを出力したい場合は、以下のように command_version 3output_errors オプションを使用してください。
    table_create Memos TABLE_NO_KEY
    [[0,0.0,0.0],true]
    column_create Memos content COLUMN_SCALAR Text
    [[0,0.0,0.0],true]
    load --table Memos --command_version 3 --output_errors yes
    [
    {"_id": "invalid", "content": "Groonga is fast"},
    {"_id": "invalid", "content": "Mroonga is fast"}
    ]
    {
      "header":{
        "return_code":-22,
        "start_time":1576717803.408522,
        "elapsed_time":0.8798723220825195,
        "error":{
          "message":"<_id>: failed to cast to <UInt32>: <\"invalid\">",
          "function":"parse_id_value",
          "file":"load.c","line":394
        }
      },
      "body":{
        "n_loaded_records":0,
        "errors":[
          {
            "return_code":-22,
            "message":"<_id>: failed to cast to <UInt32>: <\"invalid\">"
          },
          {
            "return_code":-22,
            "message":"<_id>: failed to cast to <UInt32>: <\"invalid\">"
          }
        ]
      }
    }
    
  • [httpd] バンドルしているnginxのバージョンを1.17.7に更新しました。

  • Groonga HTTPサーバー HTTPリクエストのbodyにコマンドのパラメータを指定できるようにしました。

    • この場合、 Content-Typeapplication/x-www-form-urlencoded を指定しなければいけません。
    • HTTP POSTリクエストを使うことで、以下のように複数のパラメータをHTTPリクエストのボディに指定できます。
    POST /d/status HTTP/1.1
    Host: 127.0.0.1:10041
    Content-Length: 35
    Content-Type: application/x-www-form-urlencoded
    
    command_version=3&output_pretty=yes
    

さいごに

9.1.0からの詳細な変更点は9.1.1リリース 2020-01-07を確認してください。

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

2019-11-29

Groonga 9.1.0リリース

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

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

変更内容

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

  • "&&" 演算のパフォーマンスを改善しました。

    • 例えば、以下のような条件式のパフォーマンスが向上します。

    • ( A || B ) && ( C || D ) && ( E || F) ...

    • この最適化は、ヒットするレコードが多い条件とヒットするレコードが少ない条件が混在している時に特に効果があります。

  • TokenMecab 新しい オプション use_base_form を追加しました。.

    • このオプションを使って、トークンの原型を使った検索ができます。

    • 例えば、このオプションを使って"支える"を検索すると、"支えた"もヒットします。

  • インデックスがアクセサのときにパフォーマンスが低下する問題を修正しました。

    • 例えば、以下の条件を含むクエリーでパフォーマンス低下が起こります。

      • sccessor @ query

      • accessor == query

  • バッファーが十分に大きい時に、検索結果の推定サイズがオーバーフローする問題を修正しました。

  • 不足しているツールを追加しました。

    • 前のバージョンに index-column-diff-all.shobject-inspect-all.sh がバンドルされていなかったためです。

さいごに

9.0.9からの詳細な変更点は9.1.0リリース 2019-11-29を確認してください。

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

2019-10-30

Groonga 9.0.9リリース

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

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

お知らせ

今回のバージョンからパフォーマンスが低下しているかもしれません。もし、以前よりパフォーマンスが低下していたら、是非、再現手順を報告してほしいです。

変更内容

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

  • log クエリーログにレスポンスの送信時間も出力するよう改善しました。

  • status status コマンドのレスポンスに現在のジョブ数を追加しました。

  • groonga-httpd $request_time をサポートしました。

    • 以前のバージョンでは、 log_format ディレクティブに $request_time を指定しても、$request_time の値は常に0でした。
    • 今回のバージョンから、 $request_time を指定した場合、 groonga-httpd は正しい時間を出力します。
  • groonga-httpd $request_time の設定方法をドキュメントに追加しました。

  • Ubuntu 19.10(Eoan Ermine)をサポートしました。

  • CentOS 8をサポートしました。(実験的)

    • CentOS 8向けのパッケージは開発用のパッケージが不足しているため、一部の機能が使えません。(例えば、 TokenMecab が使えなかったり、JSON文字列からint32のベクターへのキャストが出来なかったりします。)
  • [tools] index_column_diff コマンドを簡単に実行するスクリプトを追加しました。

    • このスクリプトの名前は、index-column-diff-all.shです。
    • このスクリプトは、Groongaのデータベースからインデックスカラムを抽出し、抽出したインデックスカラムに対して index_column_diff を実行します。
  • [tools] object_inspect コマンドを全てのオブジェクトに対して実行するスクリプトを追加しました。

    • このスクリプトの名前は、object-inspect-all.shです。
  • between の最初の引数として値を指定すると、Groongaがクラッシュする問題を修正しました。

between の最初の引数として値を指定すると、Groongaがクラッシュする問題を修正しました。

以下のようなケースでGroongaがクラッシュしていました。

table_create Users TABLE_HASH_KEY ShortText
# [[0, 1337566253.89858, 0.000355720520019531], true]
column_create Users age COLUMN_SCALAR Int32
# [[0, 1337566253.89858, 0.000355720520019531], true]
table_create Ages TABLE_HASH_KEY Int32
# [[0, 1337566253.89858, 0.000355720520019531], true]
column_create Ages user_age COLUMN_INDEX Users age
# [[0, 1337566253.89858, 0.000355720520019531], true]
load --table Users
[
{"_key": "Alice",  "age": 12},
{"_key": "Bob",    "age": 13},
{"_key": "Calros", "age": 15},
{"_key": "Dave",   "age": 16},
{"_key": "Eric",   "age": 20},
{"_key": "Frank",  "age": 21}
]
# [[0, 1337566253.89858, 0.000355720520019531], 6]

select Users --filter 'between(14, 13, "include", 16, "include")'

さいごに

9.0.8からの詳細な変更点は9.0.9リリース 2019-10-30を確認してください。

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

2019-09-27

Groonga 9.0.8リリース

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

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

変更内容

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

  • 作成中のインデックスを無視するように改良しました。

    • インデックス構築中であっても、正しい検索結果を取得できます。
    • ただし、この場合、Groongaは検索にインデックスを使用しないため、検索は遅くなります。
    • 今まで、検索結果を取得できなかったケースでも、この改良によって、検索結果を取得できる場合があります。
  • sub_filter 対象のカラムのインデックスが作成中か、または、インデックスが無い時に sub_filter がシーケンシャルサーチを実行する機能を追加しました。

    • 有効なインデックスが無い場合、今までは、 sub_filter はエラーになっていました。
    • この改良によって、有効なインデックスが無い場合でも、sub_filter が結果を返すようになります。
    • ただし、上記の状態の場合、 sub_filter はシーケンシャルサーチで実行されるので、遅いです。
  • logical_range_filter レコードが十分にあるとき、かつフィルター条件にマッチしないレコードが推定値を超えた時に、同じオブジェクトを2回閉じるという例外が発生する問題を修正しました。

さいごに

9.0.7からの詳細な変更点は9.0.8リリース 2019-09-27を確認してください。

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