パーティションとシャーディング
このガイドでは、大規模データ処理や分散データベース環境に対応するための**テーブルパーティション戦略(Partitioning)および分散シャーディング(Sharding)**の設定手順を解説します。
概要
監査ログ、履歴トランザクション、時系列データなど、数千万行規模に達する大規模テーブルのデータライフサイクル管理と検索性能向上、または PostgreSQL Citus による分散水平スケーリングを実現します。
主な設定手順
1. MySQL / MariaDB / TiDB のパーティション設定
データベースタイプに MySQL、MariaDB、TiDB を選択すると、「パーティション設定」タブが表示されます。
- **「パーティションを有効化」**トグルをオンにします。
- パーティションタイプの選択:
- RANGE / RANGE COLUMNS: 数値範囲や日付範囲で分割します(例: 年ごとの注文分割)。「年単位」「月単位」「日単位」のクイック生成ボタンを活用できます。
- LIST / LIST COLUMNS: 個別の列挙値リストで分割します(例: 地域別、業務区分別)。
- HASH / KEY: ハッシュ関数により指定したパーティション数に均等分散します。対象カラムとパーティション数を指定します。
- パーティション式と境界の定義: カラム名や関数式(例:
YEAR(created_at))を入力し、各パーティションの境界値を設定します。 - 右側の DDL パネルに対応する
PARTITION BY ...構文がリアルタイムに出力されます。
2. PostgreSQL Citus の分散シャーディング設定
データベースタイプに PostgreSQL (Citus) を選択すると、「シャーディング設定」タブが表示されます。
- テーブルモードの選択:
- レファレンステーブル(Reference Table): 全ワーカーノードに全量複製されるマスタ・参照用テーブル。大規模分散テーブルとのローカル結合に適しています。
- 分散テーブル(Distributed Table): 水平分散される大規模テーブル。キーとなる分散カラム(Distribution Column)(例:
tenant_id、user_id)の指定が必須です。
- 出力エリアに Citus 固有の
SELECT create_reference_table('table_name');またはSELECT create_distributed_table('table_name', 'shard_key');構文が自動出力されます。
完了のチェックリスト
- [ ] 対象方言でパーティションまたはシャーディングの設定が正しく構成されている。
- [ ] パーティションキー/分散キーが、検索条件(WHERE 句)や結合条件(JOIN 句)と一致している。
- [ ] 右側の DDL に完全かつ構文的に正しいパーティション/Citus 分散コマンドが出力されている。
注意事項
主キー・一意制約の必須要件
MySQL や PostgreSQL などのパーティションテーブルでは、すべての主キーおよびユニークインデックスの構成カラムにパーティションキーを含める必要があります。
- タブの表示条件: タブが表示されない場合は、ヘッダーで選択しているデータベースタイプが対応方言になっているか確認してください。
- 過度なパーティショニングの回避: データ量が十分に大きくない段階(数百万行未満)では、通常のインデックス設計で対応することをお勧めします。