こんにちは。堀本です。
Groonga 10.0.4 をリリースしました!
http://groonga.org/ja/docs/news.html#release-10-0-4
変更点一覧:
http://groonga.org/ja/blog/2020/06/29/groonga-10.0.4.html
## 主な変更内容
* ハッシュテーブルで4億件のレコードの登録をサポートしました。
* [select] _score が再帰的に値を取得しない時のパフォーマンスを改善しました。
* Groongaは、検索結果が検索対象の時に、 _score の値を再帰的に取得します。
* 例えば、 slices は検索結果が検索対象です。
したがって、 slices を使っているクエリーでは、今回前は効果がありません。
* [log] ドリルダウンのキーをクエリーログに出力するようにしました。
* [reference_acquire], [reference_release] 参照カウントモード用に新しいコマンドを追加しました。
* 短い間隔で複数の load を呼び出す必要がある場合、参照カウントモードによる自動クローズによって
パフォーマンスが低下します。
* 複数の load の前に reference_acquire を呼び、複数の load の後に reference_release を呼ぶことで、
このパフォーマンスの低下を避けることができます。
* reference_acquire と reference_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でガンガン検索してください!