Skip to content

Instantly share code, notes, and snippets.

@hiroyuki-sato
Last active December 19, 2015 04:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hiroyuki-sato/affc7e27bcfea4058abf to your computer and use it in GitHub Desktop.
Save hiroyuki-sato/affc7e27bcfea4058abf to your computer and use it in GitHub Desktop.
Groongaで学ぶ全文検索(2015/12/18)

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との違いやメリットデメリット
  • 列圧縮は可能?(同じデータを一つだけもつようにしてデータを圧縮できる?)

TODO

  • データ構造: ハッシュ形式
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment