本文へスキップ
`Ctrl`+`K`

# 7.23. シャーディング

Added in version 5.0.0.

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

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

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

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

## 7.23.1. 概要

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

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

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

    configure options: <...>

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

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

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

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

## 7.23.2. 用語集

名前 | 説明
--- | ---
論理テーブル | 複数のシャードをあわせて1つに見せているテーブルです。Groongaのデータベースの中には存在しません。私たちの頭の中にだけあります。
論理テーブル名 | 論理テーブルの名前です。これはシャード名のプレフィックスです。例えば、 `Logs` が論理テーブル名で、 `Logs_20150814` と `Logs_20150815` がシャード名です。
シャード | 1日分または1ヶ月分のレコードを格納しているテーブルです。1つのシャードには一部のレコードのみがあります。 シャード名（＝テーブル名）は `${LOGICAL_TABLE_NAME}_${YYYYMMDD}` というフォーマットか `${LOGICAL_TABLE_NAME}_${YYYYMM}` というフォーマットになっています。 `${LOGICAL_TABLE_NAME}` は論理テーブル名に置き換えてください。 `${YYYYMMDD}` は日に置き換えてください。 `${YYYYMM}` は月に置き換えてください。 例えば、 `Logs_20150814` を分解すると `Logs` という論理テーブル名と `20150814` という日になります。

## 7.23.3. ルール

TODO

## 7.23.4. コマンド一覧

- logical_count

- logical_parameters

- logical_range_filter

- logical_select

- logical_shard_list

- logical_table_remove