はじめに
Couchbase Mobileは、オフラインファーストアプリケーションの幅広いユースケースに対応することが可能です。
ここでは、Couchbase LiteとSync Gatewayとのデータ同期に関して、ユーザーエクスペリエンスを向上するための設計パターン(ベストプラクティス)について説明します。
アプリがバックグラウンドにある間に、データを最新の状態に保つ
ユースケース
アプリは、アクティブに(またはフォアグラウンドで)使用されていないときにデータを最新の状態に保つことで、その後の起動時の起動時間を短縮し、ユーザーエクスペリエンスを向上させることができます。
アプローチ
アプリがバックグラウンドにプッシュされると、Couchbase Liteの連続レプリケーションはオフラインモードに移行します。
モバイルアプリのバックグラウンドサポートは、プラットフォームによって大幅に異なります。したがって、アプリがバックグラウンドにあるときにデータを同期する方法は、プラットフォームに依存します。
Android
Androidで、バックグラウンドでタスクを実行する必要がある場合、いくつかのオプションがあります。
バックグラウンドで長時間実行されるレプリケーションにはフォアグラウンドサービスを使用します。
または、Work Managerを使用して、ワンショットレプリケーションをスケジュールし、バックグラウンドで非同期に実行するか、Remote Firebase Cloud Messaging(FCM)を使用して、ワンショットレプリケーションを実行するためのリクエストを実行することも考えられます。
iOS
Apple Push Notification Sevice(APNS)を使用してサイレント通知を送信し、バックグラウンドでアプリをウェイクアップするか、バックグラウンドアプリリフレッシュを使用してシステムがアプリを適切にウェイクアップできるようにします。
アプリがバックグラウンドでウェイクアップされたら、ワンショットレプリケーションを実行してデータを同期します。
以下のブログで、iOSのバックグラウンドサポートの詳細が説明されています。
ドキュメントを同期する優先順位を制御する
Sync Gatewayでは、チャネルを使用して、ドキュメントを分類することができます。これを利用して、優先度に基づいてデータを分類し、チャネルによって同期の方法を変えることによって、ドキュメントを同期する優先順位を制御することができます。
ユースケース
クライアントが受信したドキュメントに優先順位を付けることにより、クライアントは、残りのドキュメントが同期するのを待たずに、ドキュメントをプルするとすぐに、最も関連性の高いドキュメントの変更に取り掛かることができます。残りの優先度の低いドキュメントの変更は後でプルダウンします。これにより、最初の起動時のアプリの応答時間が短縮されます。
アプローチ
優先度に基づいてドキュメントを異なるチャネルに割り当てます。たとえば、ドキュメントを「低」、「中」、または「高」の優先度を表す異なるチャネルに割り当てることができます。
クライアント側では、最初の起動時に、チャネルフィルタを指定して、優先度の高いチャネルのワンショットプルレプリケーションを実行します。チャネル内のドキュメントの同期が完了した後に、アプリは残りのチャネルの別のレプリケーションを開始します。
また、優先度の高いチャネルに継続レプリケーションを設定しリアルタイムで最新の状態に保ちながら、残りのチャネルについては、ワンショットレプリケーションを使用してオンデマンドでプルすることも考えられます。
プレビルドデータベースを利用する
Couchbase Liteは、アプリケーションに、あらかじめデータが登録されたデータベース(プレビルドデータベース)をバンドルする機能があります。
モバイルデータベースには、このような機能を持たないものもあります。特にそのようなデータベースでは必要になりますが、アプリケーションを初めて利用する際に、サーバーからデータをダウンロードすることも考えられます。プレビルドデータベースを使うことによって、このような初期データロードプロセスをオミットあるいは、あらかじめアプリに同梱することが難しい最新のデータにのみ限定することが考えられます。
デルタ同期を利用する
Couchbase Mobileには、ドキュメント中の変更があった部分のみ送信して、データ同期を実現することのできるデルタ同期機能があります。このような機能を適材適所で利用することによってもユーザーエクスペリエンス向上を計ることができるでしょう。
参考情報