このドキュメントでは、データとアプリケーションを 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 にデータをインポートした後にセカンダリ インデックスを作成し、外部キーを定義します。このアプローチは、最初の一括読み込みまたはダウンタイムを伴う移行中にのみ行うことができます。
データの移行を検証する
データを移行したら、基本的なクエリを実行してデータの正確性を確認します。移行元データベースと移行先データベースの両方で次のクエリを実行して、結果が一致していることを確認します。
- ノードとエッジの数をカウントします。
- ラベルごとのノードとエッジの数を数えます。
- 各ノードとエッジ プロパティの統計情報(カウント、合計、平均、最小、最大)を計算します。