このドキュメントでは、データとアプリケーションを Spanner Graph に移行するプロセスについて説明します。移行の各段階と、ソース データベースなどの要因に応じて各段階に推奨されるツールについて説明します。
グラフを Spanner Graph に移行するには、次の主要な段階があります。
- アプリケーションの要件を収集する。
- Spanner Graph スキーマを設計する。
- アプリケーションを Spanner Graph に移行する。
- Spanner Graph をテストして調整する。
- データを Spanner Graph に移行する。
- データの移行を検証する。
- カットオーバーとフェイルオーバーのメカニズムを構成する。
スキーマとアプリケーションを最適化してパフォーマンスを高めるには、スキーマの設計、アプリケーションの構築、Spanner Graph のテストと調整を繰り返し行う必要があります。
アプリケーションの要件を収集する
アプリケーションのニーズを満たすスキーマを設計するには、次の要件を収集します。
- データ モデリング
- 一般的なクエリパターン
- レイテンシとスループットの要件
Spanner Graph スキーマを設計する
Spanner Graph スキーマの設計方法について確認には、基本コンセプトについては Spanner Graph スキーマの概要、その他の例については Spanner Graph スキーマの作成、更新、削除をご覧ください。一般的なクエリパターンに合わせてスキーマを最適化するには、Spanner Graph スキーマを設計するためのベスト プラクティスをご覧ください。
アプリケーションを Spanner Graph に移行する
まず、アプリケーションの移行に関する一般的な Spanner ガイダンスを読み、次にこのセクションのガイダンスを読んで、Spanner Graph アプリケーションの移行ガイダンスを確認します。
Spanner Graph に接続する
プログラムで Spanner Graph に接続する方法については、Spanner Graph スキーマの作成、更新、削除と Spanner Graph クエリの概要をご覧ください。
クエリを移行する
Spanner Graph クエリ インターフェースは ISO GQL と互換性があり、openCypher 構文の追加サポートが含まれています。詳細については、openCypher ユーザー向けの Spanner Graph リファレンスをご覧ください。
ミューテーションの移行
アプリケーションのミューテーション ロジックを移行するには、Spanner テーブルのミューテーション メカニズムを使用します。詳細については、Spanner Graph データを挿入、更新、削除するをご覧ください。
Spanner Graph のテストと調整
スキーマとアプリケーションのパフォーマンスをテストして調整する方法に関する Spanner のガイダンスは、Spanner Graph に適用されます。Spanner Graph のパフォーマンス最適化のベスト プラクティスについては、Spanner Graph スキーマを設計するためのベスト プラクティスと Spanner Graph クエリをチューニングするためのベスト プラクティスをご覧ください。
データを Spanner Graph に移行する
リレーショナル データベースからデータを移動するには、データを移行するをご覧ください。
グラフ データベースまたはリレーショナル以外のデータベースからデータを移動するには、ソース データベースからファイルを永続化し、ファイルを Cloud Storage にアップロードしてから、Dataflow を使用してファイルをインポートします。推奨されるファイル形式には、AVRO と CSV があります。詳細については、推奨される一括移行用の形式をご覧ください。
制約を処理する
スキーマに入力テーブルに定義された制約がある場合は、データのインポート中にこれらの制約に違反していないことを確認してください。制約には次のものがあります。
- 外部キー: エッジがノードを参照する場合に、外部キー制約を定義できます。
- インターリーブ: エッジ入力テーブルは、ノード入力テーブルにインターリーブされる場合があります。このインターリーブは親子関係を定義します。子を作成する前に親が存在する必要があるという暗黙的な制約があります。
インターリーブされた組織の親と、外部キー制約で参照されるエンティティを最初に読み込む必要があります。つまり、まずグラフ内のノードを読み込み、次にエッジを読み込む必要があります。エッジが接続するノードを読み込む前にエッジを読み込むと、読み込みプロセス中に特定のキーが存在しないことを示すエラーが発生することがあります。
正しいインポート順序を実現するには、Google 提供のテンプレートを使用して、各ステージに個別の Dataflow ジョブを定義し、ジョブを順番に実行します。たとえば、1 つの Dataflow ジョブを実行してノードをインポートし、別の Dataflow ジョブを実行してエッジをインポートできます。または、インポート順序を管理するカスタム Dataflow ジョブを作成することもできます。
Google 提供のテンプレートの詳細については、以下をご覧ください。
間違った順序でインポートすると、ジョブが失敗するか、データの一部のみが移行される可能性があります。データの一部のみが移行された場合は、移行を再度行います。
データ読み込みの効率を高める
データの読み込み効率を高めるには、データを Spanner にインポートした後にセカンダリ インデックスを作成し、外部キーを定義します。このアプローチは、最初の一括読み込み時またはダウンタイムのある移行中にのみ可能です。
データの移行を検証する
データを移行したら、基本的なクエリを実行してデータの正確性を確認します。移行元データベースと移行先データベースの両方で次のクエリを実行して、結果が一致していることを確認します。
- ノードとエッジの数をカウントします。
- ラベルあたりのノード数とエッジ数をカウントします。
- 各ノードとエッジ プロパティの統計情報(カウント、合計、平均、最小値、最大値)を計算します。