Groongaで学ぶ全文検索(2015/12/18)
列指向
行指向
-
Groonga学園の須藤先生は、全学年の中で「学年 = 5年生」の生徒の情報を取得します。
-
5年生の国語の成績が気になったので、「国語点数10点刻み」で件数を数えることにしました。
-
ドリルダウンの機能がない場合は、「学生=5年生」を探したのち、「国語点数10点刻み」の集計を行うという2つのステップが必要です。
-
ドリルダウンを使うことで、「学年=5年生」の検索しつつ、同時に「国語点数10点刻み」の件数を集計することができます。
-
Groongaで提供するドリルダウンは、単一の条件だけではなく、複数の条件を指定することができます。
-
例えば、国語の成績の得点の男女別件数が気になったので「学年=5年生」のひとの「国語10点数刻み点数別数・男女別の件数」を集計します。
-
上述のような件数を数える以外にGroongaのドリルダウン機能には件数以外にも様々な集計機能が提供されています。
- 件数(COUNT)
- 平均(AVG)
- 最大値(MAX)
- 最小値(MIN)
- 合計値(SUM)
-
これを利用することで次のようなことができるようになります。
- 「学年=5年生」を検索し、平均点・最低点、最大点を出す。
- ....
-
また単にデータを集計するだけではなく、得点の高い順や、人数の多い順にならべかえることもできます。(ソート機能)
- 上述のようにGroongaはデータを集計すること効率よくできるように設計されています。
- そのためデータを保有する形式は、一般的なデータベースのような行指向ではなく、列指向(カラムナー)方式を採用しています。
- 一般的にハードディスクなどの記憶媒体は、データを先頭から順番に読み出すような構造になっています。
- そのため、集計したいデータがまとまっている方が、集計をし易くなります。
- 行指向はデータが隣接していないのに対して、列指向はデータが隣り合わせになるような構造です。
- 集計に向くのは、列指向の方式です。
- 国語得点を集計する際に10点刻みに計算をしつつ、ドリルダウンすることは可能?
- 例えば: 94点の人は90点に、83点は、80点台に
- カラムナーで、ParquetやORCFileとの違いやメリットデメリット
- 列圧縮は可能?(同じデータを一つだけもつようにしてデータを圧縮できる?)
- データ構造: ハッシュ形式