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開発:データ同期パターン〜データ同期範囲の制御

Posted at

はじめに

Couchbase Mobileは、オフラインファーストアプリケーションの幅広いユースケースに対応することが可能です。

ここでは、Couchbase LiteとSync Gatewayとのデータ同期に関して、データ同期範囲を制御するパターンについて説明します。

クライアントローカルデータとサーバーと同期するデータの分離

image.png

はじめに:Couchbase Liteデータベースインスタンスについて

アプリでは、Couchbase Liteデータベースの複数のインスタンスを使うことができます。データベースインスタンスの数に厳しい制限はありませんが、実際的な制限があります。たとえば、データベースを跨いだデータの結合(JOIN)クエリを行うことはできません。

ユースケース

アプリ内に複数のデータベースを持つ目的の一つとして、クライアントに対してのみローカルなデータを、残りのデータとは別のデータベースインスタンスから分離することが挙げられます。データベースを分離することで、開発者はデータベースレベルでデータ同期設定を有効化するかどうかを選択することができるようになります。

アプローチ

ローカルのみのデータ用にCouchbase Liteデータベースのインスタンスを作成します。
ローカル専用データベースには、データ同期のためのレプリケーターを構成しません。

いつどのドキュメントをサーバーに同期するかを制御する

image.png

はじめに:Couchbase Liteのデータ同期フィルター機能について

Couchbase Liteは、アプリがレプリケーターにきめ細かいフィルターを設定して、サーバーにプッシュされるドキュメントを決定する機能をサポートしています。この機能を利用して、いつどのドキュメントをサーバーに同期するかを制御できます。

ユースケース

先に紹介した方法は、厳密なデータ分離が必要な場合や、データベース間の結合クエリが必要ない場合に機能しますが、ローカルの変更を同期するタイミングをきめ細かく制御したい場合があります。ドキュメントがローカルのみに存在する(つまり、同期されない)ことを強制するために、このパターンを使用することができます。

アプローチ

ドキュメントをモデル化する際に、ワークフローを制御するために、ユーザー定義の「ステータス」プロパティを含めます。たとえば、「進行中」の値を使用して、変更を同期する準備ができていないことを示し、変更をプッシュアップする必要がある場合は「準備完了」のステータス値を使用します。
あるいは、ステータスに関わらず、ドキュメントをローカルのみに持てば十分な場合は、ユーザー定義の「スコープ」プロパティを設け、値を「ローカル」に設定し、ドキュメントを同期しないことを示すことも考えられます(この場合、インスタンスレベルで分割する先のパターンと異なり、同期の有無に関わらずドキュメント間の結合を行うことができます)。
レプリケーターで適切なレプリケーションフィルター機能を設定します。フィルターは、上で定義したドキュメントのプロパティを検査して、ドキュメントを同期する必要があるかどうかを判断します。
ドキュメントの変更があるたびに、レプリケーターによってフィルター機能が適用され、フィルターの基準が満たされた場合にのみドキュメントが同期されます。

参考情報

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?