0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Couchbase Mobile機能解説:データ同期における競合解決①(概要)

Last updated at Posted at 2021-11-25

ドキュメントの競合(Conflict)

データ同期をサポートする分散環境では、ドキュメントの競合が発生する可能性があります。したがって、こうしたドキュメントの競合を解決する必要があります。

自動競合解決 / コンフリクト・フリー・モード

Couchbase Mobileでは、「自動競合解決」、言い換えると、 「コンフリクト・フリー」モードが導入されています。このモードでは、競合が自動的に処理されます。
この場合、システムのデフォルトのコンフリクト・リゾルバーが自動的に処理するため、アプリ開発者が、競合に対処するためにアプリ側で特定のことを行う必要は基本的にありません。ただし、競合について通知を受けるオプションがあり、必要に応じて、適切なアクションを実行することが可能です。

この投稿では、自動競合解決 / コンフリクト・フリー・モードを使用して、Couchbase Mobileでドキュメントの競合が自動的に処理される方法の基本について説明します。

ドキュメントリビジョン(改訂)ツリー

競合解決プロセスを理解するには、ドキュメントの管理方法の基本を理解する必要があります。Couchbase Mobileでは、すべてのドキュメントに、システムで生成された一意のリビジョンID(revID)が割り当てられます。このIDは、ドキュメントを一意に示すIDであるドキュメントIDとは別に管理されます。ドキュメントへのすべての変更は(削除の場合を含め)、ドキュメントの新しいリビジョンとして扱われ、リビジョンIDが割り当てられます。

既存のドキュメントに変更(編集または削除)を行うたびに、ドキュメントを更新するアプリケーション(ライター)は、更新されるドキュメントの現在のリビジョンIDを含める必要があります。変更に対して新しいリビジョンが作成され、更新されていた現在のリビジョンに子ノードとして追加され、ドキュメントのリビジョンツリーが作成されます。

注:「revID」はアプリに対して不透明な(透過的な)オブジェクトとして扱われる必要があります。アプリは「revID」を生成しようとしてはなりません。

image.png

競合発生のメカニズム

端的に言えば、複数のライターがドキュメントの同じ親リビジョンに変更を加えると、競合が発生します。

Couchbase Liteでの(プルレプリケーションによる)競合

次の図は、プルレプリケーションの結果として、モバイルデバイスのドキュメントが更新されるときに、既にアプリがローカルのドキュメントの同じリビジョンを更新しているシナリオを示しています。

image.png

Sync Gatewayでの(プッシュレプリケーションによる)競合

次の図は、2つのクライアントがドキュメントの同じリビジョンへの変更をプッシュするシナリオを示しています。

image.png

競合の解決

コンフリクトフリーモードでは、競合は、自動的に解決されます。
つまり、データベースに競合するドキュメントが保存されると言うことは起こりえず、事実上「競合がない(コンフリクトフリー)」ということです。

最後に

詳細について、稿を改めて解説します。

関連情報

以前のバージョン
Demystifying Conflict Resolution in Couchbase Mobile

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?