Skip to content

パーティションとシャーディング ​

このガイドでは、大規模データ処理や分散データベース環境に対応するための**テーブルパーティション戦略(Partitioning)および分散シャーディング(Sharding)**の設定手順を解説します。

概要 ​

監査ログ、履歴トランザクション、時系列データなど、数千万行規模に達する大規模テーブルのデータライフサイクル管理と検索性能向上、または PostgreSQL Citus による分散水平スケーリングを実現します。


主な設定手順 ​

1. MySQL / MariaDB / TiDB のパーティション設定 ​

データベースタイプに MySQL、MariaDB、TiDB を選択すると、「パーティション設定」タブが表示されます。

  1. **「パーティションを有効化」**トグルをオンにします。
  2. パーティションタイプの選択:
    • RANGE / RANGE COLUMNS: 数値範囲や日付範囲で分割します(例: 年ごとの注文分割)。「年単位」「月単位」「日単位」のクイック生成ボタンを活用できます。
    • LIST / LIST COLUMNS: 個別の列挙値リストで分割します(例: 地域別、業務区分別)。
    • HASH / KEY: ハッシュ関数により指定したパーティション数に均等分散します。対象カラムとパーティション数を指定します。
  3. パーティション式と境界の定義: カラム名や関数式(例: YEAR(created_at))を入力し、各パーティションの境界値を設定します。
  4. 右側の DDL パネルに対応する PARTITION BY ... 構文がリアルタイムに出力されます。

2. PostgreSQL Citus の分散シャーディング設定 ​

データベースタイプに PostgreSQL (Citus) を選択すると、「シャーディング設定」タブが表示されます。

  1. テーブルモードの選択:
    • レファレンステーブル(Reference Table): 全ワーカーノードに全量複製されるマスタ・参照用テーブル。大規模分散テーブルとのローカル結合に適しています。
    • 分散テーブル(Distributed Table): 水平分散される大規模テーブル。キーとなる分散カラム(Distribution Column)(例: tenant_id、user_id)の指定が必須です。
  2. 出力エリアに Citus 固有の SELECT create_reference_table('table_name'); または SELECT create_distributed_table('table_name', 'shard_key'); 構文が自動出力されます。

完了のチェックリスト ​

  • [ ] 対象方言でパーティションまたはシャーディングの設定が正しく構成されている。
  • [ ] パーティションキー/分散キーが、検索条件(WHERE 句)や結合条件(JOIN 句)と一致している。
  • [ ] 右側の DDL に完全かつ構文的に正しいパーティション/Citus 分散コマンドが出力されている。

注意事項 ​

主キー・一意制約の必須要件

MySQL や PostgreSQL などのパーティションテーブルでは、すべての主キーおよびユニークインデックスの構成カラムにパーティションキーを含める必要があります。

  • タブの表示条件: タブが表示されない場合は、ヘッダーで選択しているデータベースタイプが対応方言になっているか確認してください。
  • 過度なパーティショニングの回避: データ量が十分に大きくない段階(数百万行未満)では、通常のインデックス設計で対応することをお勧めします。