BloGroonga

2020-06-29

Groonga 10.0.4リリース

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

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

変更内容

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

  • ハッシュテーブルで4億件のレコードの登録をサポートしました。

  • select _score が再帰的に値を取得しない時のパフォーマンスを改善しました。

    • Groongaは、検索結果が検索対象の時に、 _score の値を再帰的に取得します。
    • 例えば、 slices は検索結果が検索対象です。したがって、 slices を使っているクエリーでは、今回前は効果がありません。
  • log ドリルダウンのキーをクエリーログに出力するようにしました。

  • reference_acquire, reference_release 参照カウントモード用に新しいコマンドを追加しました。

    • 短い間隔で複数の load を呼び出す必要がある場合、参照カウントモードによる自動クローズによってパフォーマンスが低下します。
    • 複数の load の前に reference_acquire を呼び、複数の load の後に reference_release を呼ぶことで、このパフォーマンスの低下を避けることができます。 reference_acquirereference_release の間は自動クローズは無効になります。

      • reference_acquire が、対象のオブジェクトの参照を取得するためです。
    • パフォーマンスに影響のある操作が完了したら、 reference_release を呼ぶ必要があります。

      • reference_release を呼ばない場合、参照カウントモードは機能しません。
  • select 一度の drilldown で複数のグループ集計をサポートしました。

  • groonga実行ファイル スタンドアローンモードで、 --pid-path をサポートしました。

    • 以前のバージョンのスタンドアローンモードでは、 --pid-path は無視されていました。
  • io_flush 参照カウントモードに対応しました。

  • logical_range_filter, logical_count 参照カウントモードに対応しました。

  • Groonga HTTPサーバー 最後のチャンクの後にヘッダーをつけないようにしました。

    • 最後のチャンクの後のヘッダーを無視するHTTPクライアントが存在する可能性があるためです。
  • [vector_slice] Float32 型のベクターをサポートしました。

  • トークンカラムを使った、並列静的インデックス構築をサポートしました。

    • 予めトークナイズされたデータから複数スレッドで静的インデックスの構築ができるようになりました。
    • 以下の環境変数で、並列静的インデックス構築を調整できます。

      • GRN_TOKEN_COLUMN_PARALLEL_CHUNK_SIZE : スレッド毎にどのくらいのレコードを処理するか。

        • デフォルト値は 1024 レコードです。
      • GRN_TOKEN_COLUMN_PARALLEL_TABLE_SIZE_THRESHOLD: どのくらいのソースレコードで並列化するか。

        • デフォルト値は 102400 レコードです。
  • select 参照カウントモード時の load_table のパフォーマンスを改善しました。

  • シャードをまたいでいて、かつ --filter を指定していない動的カラムを使って検索すると、Gronngaのデータベースが破損する問題を修正しました。

  • schema コマンドの結果に Float32 型が表示されなかった問題を修正しました。

  • 参照 uvector が要素を持っていないとき、 _nsubrecs を余分にカウントする問題を修正しました。

select 一度の drilldown で複数のグループ集計をサポートしました。

  • 以下のように、一回の drilldown で異なるグループ毎に和と算術平均を計算できるようになりました。

    table_create Items TABLE_HASH_KEY ShortText
    column_create Items price COLUMN_SCALAR UInt32
    column_create Items quantity COLUMN_SCALAR UInt32
    column_create Items tag COLUMN_SCALAR ShortText
    
    load --table Items
    [
    {"_key": "Book",  "price": 1000, "quantity": 100, "tag": "A"},
    {"_key": "Note",  "price": 1000, "quantity": 10,  "tag": "B"},
    {"_key": "Box",   "price": 500,  "quantity": 15,  "tag": "B"},
    {"_key": "Pen",   "price": 500,  "quantity": 12,  "tag": "A"},
    {"_key": "Food",  "price": 500,  "quantity": 111, "tag": "C"},
    {"_key": "Drink", "price": 300,  "quantity": 22,  "tag": "B"}
    ]
    
    select Items \
      --drilldowns[tag].keys tag \
      --drilldowns[tag].output_columns _key,_nsubrecs,price_sum,quantity_sum \
      --drilldowns[tag].columns[price_sum].stage group \
      --drilldowns[tag].columns[price_sum].type UInt32 \
      --drilldowns[tag].columns[price_sum].flags COLUMN_SCALAR \
      --drilldowns[tag].columns[price_sum].value 'aggregator_sum(price)' \
      --drilldowns[tag].columns[quantity_sum].stage group \
      --drilldowns[tag].columns[quantity_sum].type UInt32 \
      --drilldowns[tag].columns[quantity_sum].flags COLUMN_SCALAR \
      --drilldowns[tag].columns[quantity_sum].value 'aggregator_sum(quantity)'
    [
      [
        0,
        0.0,
        0.0
      ],
      [
        [
          [
            6
          ],
          [
            [
              "_id",
              "UInt32"
            ],
            [
              "_key",
              "ShortText"
            ],
            [
              "price",
              "UInt32"
            ],
            [
              "quantity",
              "UInt32"
            ],
            [
              "tag",
              "ShortText"
            ]
          ],
          [
            1,
            "Book",
            1000,
            100,
            "A"
          ],
          [
            2,
            "Note",
            1000,
            10,
            "B"
          ],
          [
            3,
            "Box",
            500,
            15,
            "B"
          ],
          [
            4,
            "Pen",
            500,
            12,
            "A"
          ],
          [
            5,
            "Food",
            500,
            111,
            "C"
          ],
          [
            6,
            "Drink",
            300,
            22,
            "B"
          ]
        ],
        {
          "tag": [
            [
              3
            ],
            [
              [
                "_key",
                "ShortText"
              ],
              [
                "_nsubrecs",
                "Int32"
              ],
              [
                "price_sum",
                "UInt32"
              ],
              [
                "quantity_sum",
                "UInt32"
              ]
            ],
            [
              "A",
              2,
              1500,
              112
            ],
            [
              "B",
              3,
              1800,
              47
            ],
            [
              "C",
              1,
              500,
              111
            ]
          ]
        }
      ]
    ]
    

さいごに

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