このページでは、地域別パーティション分割と、Spanner での動作について説明します。
Spanner には、リージョン インスタンス構成とマルチリージョン インスタンス構成が用意されています。これにより、地理的位置間でデータを複製できます。地域別パーティション分割を使用すると、データベース テーブル内の行をさらにセグメント化し、異なるインスタンス構成間で保存できます。
利点と使用例
地域別パーティション分割を使用すると、データベース内の行をパーティショニングできます。これにより、次のようなメリットが得られます。
- グローバル データベースのリージョン レイテンシ: Spanner は、地域別パーティション分割を使用して、地理的に分散したロケーションにわたる単一の統合データベースでデータを管理し、リージョン アクセスの低レイテンシを実現します。地域別パーティション分割を使用すると、シャーディングされた複数のデータベースを管理する場合と比較して、運用が簡素化され、複雑さが軽減されます。
- グローバル データベース機能: 地域別パーティション分割には、グローバル トランザクション、リージョン間のデータ移動、地理的なリージョン全体での一意性の適用などのデータベース機能が用意されています。
- データ所在地のコンプライアンス: Spanner は、プレースメント レベルでデータ所在地のコミットメントを提供します。詳細については、地域別パーティション分割を使用するデータベースのデータ所在地の互換性をご覧ください。
一般的なユースケースは次のとおりです。
ユーザー関連データ: ユーザー関連データを地域別にパーティション分割し、ユーザーに最も近いリージョンでデータを処理して保存します。
ローカライズされたデータ: トラフィックや特別なイベントなど、地域固有の情報。
地域別パーティション分割の仕組み
すべての Spanner インスタンスには、default
インスタンス パーティションと呼ばれるメイン インスタンス パーティションがあります。追加のインスタンス パーティションを作成しない場合、すべてのデータベース オブジェクトは、インスタンス構成と同じロケーションにあるデフォルト パーティションに保存されます。データベース内のデータをパーティショニングする場合は、インスタンスに追加のインスタンス パーティションを作成する必要があります。
データベースで地域別パーティション分割を使用するには:
インスタンスに追加のインスタンス パーティションを作成します。これらのユーザーが作成したインスタンス パーティションには、独自の構成(リージョンまたはマルチリージョン)とノード数があります。
通常どおりにデータベースを作成します。データベースには、インスタンスのデフォルト インスタンス パーティションに関連付けられたデフォルトのプレースメントがあります。
追加のインスタンス パーティションに関連付けられたプレースメントをデータベースに作成します。データベースは、同じインスタンスで作成された追加のインスタンス パーティションとやり取りできます。
プレースメント キー属性を持つプレースメント テーブルを作成します。DML ステートメントでプレースメント キーを使用して、行データが存在するインスタンス パーティションを指定する必要があります。データベースにプレースメント以外のテーブルを作成すると、Spanner はそのデータをデフォルトのインスタンス パーティションに保存します。
プレースメント テーブルの各行のプレースメント キーは、次のいずれかに割り当てる必要があります。
そのデータベース用に定義されたユーザーが作成したプレースメントの名前と一致する値。
デフォルトのプレースメントにデータを保存するプレースメント キー値
default
。
インスタンス パーティションの使用方法については、インスタンス パーティションを作成して管理するをご覧ください。
重要な考慮事項
インスタンス パーティション、プレースメント、プレースメント テーブルを作成する前に、次の点を考慮してください。
インスタンス パーティションのロケーション: アプリケーションに最もメリットのあるインスタンス パーティション リージョンを慎重に選択します。
リージョン インスタンス構成のインスタンスにインスタンス パーティションを作成できますが、デフォルトのインスタンス パーティションのロケーションもマルチリージョン構成になるように、マルチリージョン インスタンス構成のインスタンスにインスタンス パーティションを作成することをおすすめします。
また、アプリケーションで必要なすべての管轄区域をカバーする読み取り / 書き込みリージョンと読み取り専用リージョンがあるマルチリージョンのデフォルト インスタンス パーティションのロケーションを選択します。次に、マルチリージョンのデフォルト インスタンス パーティションのリージョンと一致するリーダー リージョンがある追加のインスタンス パーティション(リージョンにできます)を作成します。
インスタンス パーティションの数: インスタンス パーティションの数が多すぎるとオーバーヘッドが発生する可能性がありますが、少すぎると十分なメリットが得られない可能性があります。インスタンスごとに作成できるインスタンス パーティションは最大 10 個です。
制限事項
プレビュー リリース中は、次の制限が適用されます。これらの制限は、一般提供のリリース時あるいはリリース後に変更または削除される可能性があります。
- デュアルリージョン構成を使用してインスタンスのパーティションを作成することはできません。
- インスタンス パーティションごとに、コンピューティング容量が 1 ノード(1,000 処理ユニット)以上である必要があります。
- 特定のインスタンスに対して、同じベース インスタンス構成を使用する複数のインスタンス パーティションを作成することはできません。たとえば、
test-instance
内で、インスタンス パーティション構成としてus-central1
を使用する 2 つのパーティション(partition-1
とpartition-2
)を作成することはできません。 - インスタンス パーティション内のノードごとに、最大 1 億個のプレースメント行を配置できます。各インスタンス パーティションに配置されたプレースメント行の数は、 Google Cloud コンソールの [インスタンス パーティション] ページで確認できます。
- 宛先インスタンス パーティション内のノードごとに、Spanner は 1 秒あたり約 10 個のプレースメント行を移動できます。
- 無料トライアル インスタンスまたは 1 ノード(1,000 処理ユニット)未満のサイズ設定が細かいインスタンスでは、インスタンス パーティションを作成できません。
- インスタンス パーティションがあるインスタンスのバックアップを作成することはできません。
- インスタンス パーティションがあるインスタンスには、顧客管理の暗号鍵を使用できません。
- マネージド オートスケーラーが有効になっているインスタンスにインスタンス パーティションを作成することはできません。
- インスタンス パーティションを別のインスタンス構成に移動することはできません。
- インスタンス パーティションがあるインスタンスは移動できません(個々の行を別のインスタンス パーティションに移動できるため、インスタンスを移動する必要はありません)。
- インスタンス パーティションを使用しても、コンプライアンスと規制要件が保証されるわけではありません。
- 変更ストリームはパーティション分割データをサポートしていません。
- 地域別パーティション分割を使用するには、新しい空のデータベースを作成し、
opt_in_dataplacement_preview
オプションをtrue
に設定する必要があります。詳細については、インスタンス パーティションの作成と管理をご覧ください。 - プレースメント テーブルに
INSERT
またはDELETE
DML ステートメントを使用する場合は、そのステートメントがトランザクション内の唯一のステートメントである必要があります。 - 読み取り / 書き込みトランザクション モードでは、
WHERE
句でプレースメント テーブルの主キーのみを参照できます。WHERE
句でプレースメント テーブルの非主キー列を参照する必要がある場合は、次のいずれかの方法を使用できます。- 読み取り専用権限のみが必要な場合は、読み取り専用トランザクション モードに切り替えます。
- 更新が必要な場合は、パーティション化 DML トランザクション モードを使用するか、読み取り専用トランザクション クエリで主キーを見つけて、別の読み取り / 書き込みトランザクションで
WHERE
句で返された主キーを参照します。
- 名前付きスキーマは使用できません。
IAM によるアクセス制御
インスタンス パーティションを作成して管理するには、spanner.instancePartitions.create
、spanner.instancePartitions.update
、spanner.instancePartitions.delete
の権限が必要です。インスタンス パーティションの表示のみが必要な場合は、spanner.instancePartitions.list
権限または spanner.instancePartitions.get
権限が必要です。詳しくは IAM の概要をご覧ください。
Spanner IAM 権限を付与する方法については、IAM 権限を適用するをご覧ください。
モニタリング
Spanner には、インスタンス パーティションをモニタリングするために役立ついくつかの指標が用意されています。追加パーティションを作成すると、 Google Cloud コンソールの [システム分析情報] ページに [インスタンス パーティション] の追加プルダウン フィルタが表示されます。デフォルト選択では、すべてのインスタンス パーティションの指標が表示されます。プルダウンを使用して、特定のインスタンス パーティションの指標をフィルタできます。
Spanner リソースのモニタリングの詳細については、Cloud Monitoring を使用してインスタンスをモニタリングするをご覧ください。
料金
地域別パーティション分割の使用に追加料金はかかりません。インスタンスで使用されるコンピューティング容量とデータベースで使用されるストレージの量に対して、標準の Spanner 料金が請求されます。
詳細については、Spanner の料金をご覧ください。
次のステップ
- インスタンス パーティションを作成して管理する方法を学習する。
- データ プレースメントの作成と管理方法を学習する。