[第16回] コンフリクトの解決

AWS Amplify

 

はじめに

 

皆さん。こんにちは! DreamHanksのエルムです。

今回はコンフリクトの解決について説明していきます。

前回の記事は[第15回] 認証ルールの設定です。

 

AppSyncによるデータ同期が有効な場合、クライアントとサーバーで同じオブジェクトの異なるバージョンが存在する可能性があります。複数のクライアントが、それぞれのオブジェクトのコピーを更新している場合があります。DataStoreは、競合の検出と解決方法を適用することで、異なるオブジェクトのバージョンを収束させます。デフォルトの解像度はAuto Mergeと呼ばれています。この戦略は、コレクションの成長を可能にし、シングルフィールドデータのサーバーサイドバージョンを好みます。他にも、Optimistic Concurrency controlやCustom Lambda functionsなどの戦略があります。

 

カスタムコンフリクトの解決

 

異なる競合解決方法を選択するには、ターミナルからプロジェクトに移動し、amplify update apiを実行します。競合の検出と解決方法を変更するように求められたら、YESを選択してください。

 

モデル構成ごとに

 

なお、このフローでは、個々のGraphQLタイプごとにストラテジーを変更することもできますが、高度なユースケースでない限り、スキーマ全体に同じストラテジーを使用することをお勧めします:

 

カスタム構成

 

DataStoreにはいくつかのオプション設定があり、例えば、システムのどの部分で発生したエラーメッセージに対しても、カスタムハンドラを指定することができます。また、競合解決戦略の1つの間にAWS AppSyncによって変異が拒否された場合に実行されるカスタム競合ハンドラを指定することもできます。

 

最後に、デバイスにローカルに保存されるアイテム(モデルごと)の上限として、同期するレコード数を設定することができます。また、Delta Syncプロセスの一部として実行されるデフォルトの24時間の「ベースクエリ」を上書きする、分単位のカスタムインターバルも設定できます。

 

使用例:

以下のコードは、Postモデルのコンフリクト・レゾリューション・ハンドラーを示しています。このハンドラーは、同じタイトルを持つミューテーションを再試行しますが、他のすべてのフィールドについては最新のリモートデータを使用します。衝突解決ハンドラは、他のすべてのモデルの衝突を破棄します(@aws-amplify/datastoreからインポートされたDISCARDシンボルを返すことにより)。

 

 

終わりに

 

今回の記事は以上になります。

次回は [第17回]リアルタイムを学びましょう。

ご覧いただきありがとうございます。

 

 

コメント