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

7.22.4. コマンド一覧

  • :doc:commands/logical_count
  • :doc:commands/logical_parameters
  • :doc:commands/logical_range_filter
  • :doc:commands/logical_select
  • :doc:commands/logical_shard_list
  • :doc:commands/logical_table_remove