3

Couchbase lite を使用したモバイル アプリがあります。ユーザーがログアウトするときに、デバイス上のドキュメントの一部を削除したいと考えています。ユーザー固有のドキュメント。すべてのドキュメントを削除したくありません。ドキュメントには、purgeDocument()それらのユーザー固有のドキュメントで呼び出すことができると思われるメソッドがあります。

問題は、ユーザーが再度ログインしてプル レプリケーションを実行すると、パージされたドキュメントがデバイスに再同期されないことです。

CouchDB 同期プロトコルについて私が知っているほとんどの情報に基づいて、再同期をトリガーするユーザー固有のドキュメントに新しいシーケンス更新がないため、それらが再同期されないことは理にかなっています。

この問題にどのようにアプローチすればよいですか?

可能性

  1. データベース全体 (共通ドキュメントを含む) を削除すると、パフォーマンスが低下します。
  2. どういうわけか、レプリケーターの最後のシーケンスをリセットし、レプリケーターが既にダウンロードしたドキュメントをネットワーク経由で転送しないことを願っています。(おそらくCBLを台無しにするでしょう)
  3. ユーザー固有のドキュメントを格納するデータベースと、共通のドキュメントを格納するデータベースを別々に用意します。データベースは (チャネルごとに) フィルタリングされたレプリケーターを持つことができるため、受信データを個別のデータベースに分割することができます。問題は、CBLModel オブジェクト ラッパーを使用する場合に、異なるデータベースのドキュメント間でシームレスに参照をロードすることです。
4

4 に答える 4

0

ユーザーがログインしたときにドキュメントをパージし続けることができます。

特定のドキュメントの再同期の問題を解決するには、フィルターがドキュメント ID であるフィルター付きレプリケーションを使用するのが最も簡単な方法だと思います。

これらのドキュメント ID は、派生可能な方法で作成できます。たとえば、UserDocument:: のようになります。

ユーザーがログインすると、ドキュメント ID をフィルターとして使用してワンショット レプリケーションを開始できます。これはワンショットでしかできません。そして、この One Shot が終了したら、レプリケーションの設定を変更 (フィルター/チャネルの変更) することで、レプリケーションを再開できます。

以下は、ドキュメント ID によるフィルタリングされたレプリケーションを説明する Couchbase による URL です。

https://developer.couchbase.com/documentation/mobile/1.4/guides/couchbase-lite/native-api/replication/index.html#filtering-by-document-ids

于 2018-06-04T13:59:29.890 に答える
0

サブセクションPurging documentsの公式ドキュメントから理解しているように、サーバー側で変更/更新されていない (つまり、rev が同じである) という理由だけで、ドキュメントを再度取得することはありません。

ユーザーがアプリに再度ログインしたときに、ユーザー名 (またはユーザーの構成を識別するために使用しているもの) など、同じタイプのダミー ドキュメントを再度作成して、サーバーからのプル レプリケーションをトリガーすることができます。おそらく、サーバーからリビジョンを取得して簡単に解決できる競合が発生するでしょう。

この考え方が少しでも役に立てば幸いです。

コメント後に更新

idアイデアは、パージしようとtypeしているユーザーのドキュメントのどこかに保存することです。そうすれば、ユーザーが再度ログインしたときに、これら 2 つのフィールドを含む新しいダミー ドキュメントを作成できます。おそらく、この新しいダミー ドキュメントがプル レプリケーションをトリガーします。

注: この方法は試していません。私はそれがあなたの問題の回避策であると推測しています。

于 2015-12-22T12:43:27.593 に答える