7.22. シャーディング

バージョン 5.0.0 で追加.

Groongaにはテーブルに格納できるレコード数に 制限事項 があります。1つのテーブルに268,435,455以上のレコードを追加できません。

この制限を解決するために、Groongaは時間ベースのシャーディング機能をサポートしています。

この機能は同一データベース内で動きます。複数のデータベースをまたいでは動きません。これは、このシャーディング機能はデータを複数のマシンに分散する用途では使えないということです。

もし、分散対応のシャーディング機能が欲しい場合は、 Mroonga または PGroonga を使ってください。MySQLまたはPostgreSQLが提供しているシャーディング機能を使うことができます。近い将来、 Droonga でも分散対応のシャーディング機能を使えるようになる予定です。

7.22.1. 概要

シャーディングは sharding プラグインとして実装されています。このプラグインはmrubyで書かれています。そのため、Groongaをビルドするときにmrubyを有効にする必要があります。

Groongaがmrubyをサポートしているかは groonga 実行ファイル--version 引数を使うとわかります:

% groonga --version
groonga 5.0.5 [...,mruby,...]

configure options: <...>

mruby があればあなたのGroongaはmrubyをサポートしています。

sharding プラグインは検索系のコマンドだけを提供しています。これらのコマンドは logical_selectlogical_range_filter というように、コマンド名に logical_ プレフィックスがついています。

sharding プラグインはスキーマ定義コマンドとデータロードコマンドをまだ提供していません。そのため、既存の table_createcolumn_createload コマンドを使う必要があります。

sharding プラグインを使うにはいくつかのルールに則ってテーブルとカラムを作る必要があります。これについては後述します。

7.22.2. 用語集

名前

説明

論理テーブル

複数のシャードをあわせて1つに見せているテーブルです。Groongaのデータベースの中には存在しません。私たちの頭の中にだけあります。

論理テーブル名

論理テーブルの名前です。これはシャード名のプレフィックスです。例えば、 Logs が論理テーブル名で、 Logs_20150814Logs_20150815 がシャード名です。

シャード

1日分または1ヶ月分のレコードを格納しているテーブルです。1つのシャードには一部のレコードのみがあります。

シャード名(=テーブル名)は ${LOGICAL_TABLE_NAME}_${YYYYMMDD} というフォーマットか ${LOGICAL_TABLE_NAME}_${YYYYMM} というフォーマットになっています。 ${LOGICAL_TABLE_NAME} は論理テーブル名に置き換えてください。 ${YYYYMMDD} は日に置き換えてください。 ${YYYYMM} は月に置き換えてください。

例えば、 Logs_20150814 を分解すると Logs という論理テーブル名と 20150814 という日になります。

7.22.3. ルール

TODO