はじめに
Couchbase Mobileは、オフラインファーストアプリケーションの幅広いユースケースに対応することが可能です。
ここでは、Couchbase LiteとSync Gatewayとのデータ同期に関して、データ同期範囲を制御するパターンについて説明します。
クライアントローカルデータとサーバーと同期するデータの分離
はじめに:Couchbase Liteデータベースインスタンスについて
アプリでは、Couchbase Liteデータベースの複数のインスタンスを使うことができます。データベースインスタンスの数に厳しい制限はありませんが、実際的な制限があります。たとえば、データベースを跨いだデータの結合(JOIN)クエリを行うことはできません。
ユースケース
アプリ内に複数のデータベースを持つ目的の一つとして、クライアントに対してのみローカルなデータを、残りのデータとは別のデータベースインスタンスから分離することが挙げられます。データベースを分離することで、開発者はデータベースレベルでデータ同期設定を有効化するかどうかを選択することができるようになります。
アプローチ
ローカルのみのデータ用にCouchbase Liteデータベースのインスタンスを作成します。
ローカル専用データベースには、データ同期のためのレプリケーターを構成しません。
いつどのドキュメントをサーバーに同期するかを制御する
はじめに:Couchbase Liteのデータ同期フィルター機能について
Couchbase Liteは、アプリがレプリケーターにきめ細かいフィルターを設定して、サーバーにプッシュされるドキュメントを決定する機能をサポートしています。この機能を利用して、いつどのドキュメントをサーバーに同期するかを制御できます。
ユースケース
先に紹介した方法は、厳密なデータ分離が必要な場合や、データベース間の結合クエリが必要ない場合に機能しますが、ローカルの変更を同期するタイミングをきめ細かく制御したい場合があります。ドキュメントがローカルのみに存在する(つまり、同期されない)ことを強制するために、このパターンを使用することができます。
アプローチ
ドキュメントをモデル化する際に、ワークフローを制御するために、ユーザー定義の「ステータス」プロパティを含めます。たとえば、「進行中」の値を使用して、変更を同期する準備ができていないことを示し、変更をプッシュアップする必要がある場合は「準備完了」のステータス値を使用します。
あるいは、ステータスに関わらず、ドキュメントをローカルのみに持てば十分な場合は、ユーザー定義の「スコープ」プロパティを設け、値を「ローカル」に設定し、ドキュメントを同期しないことを示すことも考えられます(この場合、インスタンスレベルで分割する先のパターンと異なり、同期の有無に関わらずドキュメント間の結合を行うことができます)。
レプリケーターで適切なレプリケーションフィルター機能を設定します。フィルターは、上で定義したドキュメントのプロパティを検査して、ドキュメントを同期する必要があるかどうかを判断します。
ドキュメントの変更があるたびに、レプリケーターによってフィルター機能が適用され、フィルターの基準が満たされた場合にのみドキュメントが同期されます。
参考情報