このページでは、Spanner で地域別パーティション分割がどのように機能するかについて説明します。
Spanner には、リージョン インスタンス構成とマルチリージョン インスタンス構成が用意されています。これにより、地理的位置間でデータを複製できます。地域別パーティション分割を使用すると、データベース テーブル内の行をさらにセグメント化し、異なるインスタンス構成間で保存できます。
利点と使用例
地域別パーティション分割のメリットには、次のものがあります。
データをクエリと同じ地理的位置に保存することで、書き込みと強力な読み取りのレイテンシを短縮します。
非対称のグローバル ワークロードの費用を最適化します(10 ノードの
us-central1
パーティションと 2 ノードのasia-south1
パーティションを使用するなど)。
一般的なユースケースは次のとおりです。
ユーザー関連データ: ユーザー関連データを地域別にパーティション分割し、ユーザーに最も近いリージョンでデータを処理して保存します。
ローカライズされたデータ: トラフィックや特別なイベントなど、地域固有の情報。
地域別パーティション分割の仕組み
すべての Spanner インスタンスには、default
パーティションと呼ばれるメイン インスタンス パーティションがあります。追加のパーティションを作成しない場合、すべてのデータベース オブジェクトは、インスタンス構成と同じロケーションにあるデフォルト パーティションに保存されます。
データベースでデータをパーティショニングする場合は、インスタンスに追加のパーティションを作成する必要があります。これらのユーザー作成パーティションには、独自の構成(リージョンまたはマルチリージョン)とノード数があります。通常どおりにデータベースを作成します。データベースは、同じインスタンスで作成されたパーティションとやり取りできます。次に、パーティションに関連付けられたプレースメントをデータベースに作成します。最後に、プレースメント キー属性を持つプレースメント テーブルを作成できます。DML ステートメントでプレースメント キーを使用して、行データが存在するパーティションを指定する必要があります。データベースにプレースメント以外のテーブルを作成すると、Spanner はそのデータをデフォルト パーティションに格納します。
パーティションの使用方法については、パーティションを作成して管理するをご覧ください。
重要な考慮事項
パーティション、プレースメント、プレースメント テーブルを作成する前に、次の点を考慮してください。
パーティションのロケーション: アプリケーションに最もメリットのあるパーティション リージョンを慎重に選択します。
リージョン インスタンス構成のインスタンスにパーティションを作成できますが、デフォルトのパーティション ロケーションもマルチリージョン構成に配置されるように、マルチリージョン インスタンス構成のインスタンスにパーティションを作成することをおすすめします。
また、アプリケーションで必要なすべての司法管轄区をカバーする読み取り / 書き込みリージョンと読み取り専用リージョンがあるマルチリージョンのデフォルト パーティションのロケーションを選択します。次に、マルチリージョンのデフォルト パーティションのリージョンと一致するリージョンを持つ追加のパーティション(リージョンにできます)を作成します。
パーティションの数: パーティションの数が多すぎるとオーバーヘッドが発生する可能性がありますが、パーティションの数が少なすぎると十分なメリットが得られない可能性があります。インスタンスごとに作成できるパーティションは最大 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 ステートメントを使用する場合は、そのステートメントがトランザクション内の唯一のステートメントである必要があります。
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 の料金をご覧ください。
次のステップ
- パーティションを作成して管理する方法を学習する。
- 詳しくは、データ プレースメントの作成と管理方法をご覧ください。