[groonga-dev,04750] [ANN] Groonga 9.0.2

Back to archive index
Horimoto Yasuhiro horim****@clear*****
2019年 4月 29日 (月) 06:14:50 JST


こんにちは、堀本です。

もうすぐ年号が変わりますね。
平成最後のリリースです!

Groonga 9.0.2をリリースしました!
http://groonga.org/ja/blog/2019/04/29/groonga-9.0.2.html

今回のリリースから、VC++で作成したWindows版パッケージを提供します。

今までどおり、MinGWで作成したWindows版パッケージも提供しますが、
近いうちにMinGWで作ったパッケージの代わりにVC++で作ったパッケージを
提供する予定です。

変更点一覧:

    http://groonga.org/ja/docs/news.html#release-9-0-2

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

* [column_create] 新しいフラグ INDEX_LARGE を追加しました。

* [object_inspect] セグメントの新しい統計値 next_physical_segment_id と
  max_n_physical_segments を追加しました。

* [logical_select] シャードをまたがったウインドウ関数をサポート
  しました。

* [logical_range_filter] シャードをまたがったウインドウ関数をサポート
  しました。

* [logical_count] シャードをまたがったウインドウ関数をサポートしました。

* [io_flush] 新しいオプション --recursive dependent を追加しました。

* 一部の環境でコンパイルエラー "unknown type name 'bool'" が発生する
  問題を修正しました。

* mrubyを経由して実行するコマンド(例えば、 logical_select、
  logical_range_filter、 logical_count 等)で、Int32を超える数を正しく
  出力できない問題を修正しました。

### [column_create] 新しいフラグ INDEX_LARGE を追加しました。

このフラグによって、デフォルトの2倍の領域を持つインデックスカラムを
作成できますが、メモリ使用量も2倍となることに注意して下さい。

このフラグは、インデックス対象のデータが大きい時に有用です。
大きいデータとは、大量のレコード(通常は少なくとも1000万レコード以上)
があり、少なくとも次のうちの1つ以上の特徴があります。

* インデックス対象が複数のカラム
* インデックステーブルにトークナイザーが付いている

以下は大きなインデックスカラムを作る例です。

  column_create \
  --table Terms \
  --name people_roles_large_index \
  --flags COLUMN_INDEX|WITH_POSITION|WITH_SECTION|INDEX_LARGE \
  --type People \
  --source roles
  [[0, 1337566253.89858, 0.000355720520019531], true]

### [object_inspect] セグメントの新しい統計値 next_physical_segment_id と
max_n_physical_segments を追加しました。

next_physical_segment_id は調査対象のインデックスガラムが次に使う
セグメントのIDです。
つまり、この数字は、現在のセグメントの使用量を表しています。

max_n_physical_segments は調査対象のインデックスカラムのセグメントの
最大値です。

これらの統計値の最大値は、インデックスカラムのサイズに依存します。:

  |インデックスカラムのサイズ|   最大セグメント数   |
  |--------------------------|----------------------|
  |       INDEX_SMALL        |   2**9 (512)         |
  |       INDEX_MEDIUM       |   2**16 (65536)      |
  |       INDEX_LARGE        |   2**17 * 2 (262144) |
  |       デフォルト         |   2**17 (131072)     |

### [logical_select] シャードをまたがったウインドウ関数をサポートしました。

ウインドウ関数を複数のテーブルをまたがって適用できます。
ただし、先頭のグループキーまたは、ソートキーがシャードキーと同じ順番で
並んでいる必要があります。

例えば、以下のケースは、先頭のグループキーがシャードキーと同じ順番で並ん
でいるため、複数のテーブルをまたがってウインドウ関数を適用できます。

以下の例では、先頭のグループキーは price でシャードキーは timestamp
です。:

  plugin_register sharding

  table_create Logs_20170415 TABLE_NO_KEY
  column_create Logs_20170415 timestamp COLUMN_SCALAR Time
  column_create Logs_20170415 price COLUMN_SCALAR UInt32
  column_create Logs_20170415 n_likes COLUMN_SCALAR UInt32

  table_create Logs_20170416 TABLE_NO_KEY
  column_create Logs_20170416 timestamp COLUMN_SCALAR Time
  column_create Logs_20170416 price COLUMN_SCALAR UInt32
  column_create Logs_20170416 n_likes COLUMN_SCALAR UInt32

  load --table Logs_20170415
  [
  {"timestamp": "2017/04/15 00:00:00", "n_likes": 2, "price": 100},
  {"timestamp": "2017/04/15 01:00:00", "n_likes": 1, "price": 100},
  {"timestamp": "2017/04/15 01:00:00", "n_likes": 2, "price": 200}
  ]

  load --table Logs_20170416
  [
  {"timestamp": "2017/04/16 10:00:00", "n_likes": 1, "price": 200},
  {"timestamp": "2017/04/16 11:00:00", "n_likes": 2, "price": 300},
  {"timestamp": "2017/04/16 11:00:00", "n_likes": 1, "price": 300}
  ]

  logical_select Logs \
    --shard_key timestamp \
    --columns[count].stage initial \
    --columns[count].type UInt32 \
    --columns[count].flags COLUMN_SCALAR \
    --columns[count].value 'window_count()' \
    --columns[count].window.group_keys price \
    --output_columns price,count
  [
    [
      0,
      0.0,
      0.0
    ],
    [
      [
        [
          6
        ],
        [
          [
            "price",
            "UInt32"
          ],
          [
            "count",
            "UInt32"
          ]
        ],
        [
          100,
          2
        ],
        [
          100,
          2
        ],
        [
          200,
          2
        ],
        [
          200,
          2
        ],
        [
          300,
          2
        ],
        [
          300,
          2
        ]
      ]
    ]
  ]

### [logical_range_filter]
シャードをまたがったウインドウ関数をサポートしました。

ウインドウ関数を複数のテーブルをまたがって適用できます。
ただし、logical_select と同様、先頭のグループキーまたは、ソートキーが
シャードキーと同じ順番で並んでいる必要があります。

以下は、logical_range_filter で、複数のテーブルをまたいでウインドウ関数
を適用する例です。:

  plugin_register sharding

  table_create Logs_20170415 TABLE_NO_KEY
  column_create Logs_20170415 timestamp COLUMN_SCALAR Time
  column_create Logs_20170415 price COLUMN_SCALAR UInt32
  column_create Logs_20170415 n_likes COLUMN_SCALAR UInt32

  table_create Logs_20170416 TABLE_NO_KEY
  column_create Logs_20170416 timestamp COLUMN_SCALAR Time
  column_create Logs_20170416 price COLUMN_SCALAR UInt32
  column_create Logs_20170416 n_likes COLUMN_SCALAR UInt32

  load --table Logs_20170415
  [
  {"timestamp": "2017/04/15 00:00:00", "n_likes": 2, "price": 100},
  {"timestamp": "2017/04/15 01:00:00", "n_likes": 1, "price": 100},
  {"timestamp": "2017/04/15 01:00:00", "n_likes": 2, "price": 200}
  ]

  load --table Logs_20170416
  [
  {"timestamp": "2017/04/16 10:00:00", "n_likes": 1, "price": 200},
  {"timestamp": "2017/04/16 11:00:00", "n_likes": 2, "price": 300},
  {"timestamp": "2017/04/16 11:00:00", "n_likes": 1, "price": 300}
  ]

  logical_range_filter Logs \
    --shard_key timestamp \
    --columns[count].stage initial \
    --columns[count].type UInt32 \
    --columns[count].flags COLUMN_SCALAR \
    --columns[count].value 'window_count()' \
    --columns[count].window.group_keys price \
    --output_columns price,count
  [
    [
      0,
      0.0,
      0.0
    ],
    [
      [
        [
          6
        ],
        [
          [
            "price",
            "UInt32"
          ],
          [
            "count",
            "UInt32"
          ]
        ],
        [
          100,
          2
        ],
        [
          100,
          2
        ],
        [
          200,
          2
        ],
        [
          200,
          2
        ],
        [
          300,
          2
        ],
        [
          300,
          2
        ]
      ]
    ]
  ]

### [logical_count] シャードをまたがったウインドウ関数をサポートしました。

ウインドウ関数を複数のテーブルをまたがって適用できます。
ただし、logical_select と同様、先頭のグループキーまたは、ソートキー
がシャードキーと同じ順番で並んでいる必要があります。

以下は、logical_count で、複数のテーブルをまたいでウインドウ関数を
適用する例です。:

  plugin_register sharding

  table_create Logs_20170415 TABLE_NO_KEY
  column_create Logs_20170415 timestamp COLUMN_SCALAR Time
  column_create Logs_20170415 price COLUMN_SCALAR UInt32
  column_create Logs_20170415 n_likes COLUMN_SCALAR UInt32

  table_create Logs_20170416 TABLE_NO_KEY
  column_create Logs_20170416 timestamp COLUMN_SCALAR Time
  column_create Logs_20170416 price COLUMN_SCALAR UInt32
  column_create Logs_20170416 n_likes COLUMN_SCALAR UInt32

  load --table Logs_20170415
  [
  {"timestamp": "2017/04/15 00:00:00", "n_likes": 2, "price": 100},
  {"timestamp": "2017/04/15 01:00:00", "n_likes": 1, "price": 100},
  {"timestamp": "2017/04/15 01:00:00", "n_likes": 2, "price": 200}
  ]

  load --table Logs_20170416
  [
  {"timestamp": "2017/04/16 10:00:00", "n_likes": 1, "price": 200},
  {"timestamp": "2017/04/16 11:00:00", "n_likes": 2, "price": 300},
  {"timestamp": "2017/04/16 11:00:00", "n_likes": 1, "price": 300}
  ]

  logical_count Logs \
    --shard_key timestamp \
    --columns[count].stage initial \
    --columns[count].type UInt32 \
    --columns[count].flags COLUMN_SCALAR \
    --columns[count].value 'window_count()' \
    --columns[count].window.group_keys price \
    --filter 'count >= 1'
  [
    [
      0,
      0.0,
      0.0
    ],
    [
      4
    ]
  ]

### [io_flush] 新しいオプション --recursive dependent を追加しました。

このオプションによって、書き出し対象とその子オブジェクトだけでなく、
関連したオブジェクトも書き出せます。

関連するオブジェクトは次の通りです。:

  * 参照されているテーブル
  * 関連するインデックスカラム(対象の TABLE_NAME にソースカラムがある)
  * 関連するインデックスカラムのテーブル(対象の TABLE_NAME にソース
    カラムがある)

以下は、このオプションを使った例です。:

io_flush --recursive "dependent" --target_name "Users"



groonga-dev メーリングリストの案内
Back to archive index