4

Couchbase Server と Sync Gateway を使用してバケットの内容を Couchbase Lite を実行している iOS および Android クライアントと同期するプロジェクトに取り組んでいます。また、Node.js サーバー アプリケーションから Couchbase サーバーへの読み取りおよび書き込みアクセスも必要です。私が行った調査によると、シャドウイングの使用は嫌われているため ( https://github.com/couchbase/sync_gateway/wiki/Bucket-Shadowing )、バケットを更新する手段として Sync Gateway API を調べるようになりました。 Node.js アプリケーションから。同期ゲートウェイ API を使用して既存のドキュメントを更新するには、ドキュメントの最新のリビジョン ID を渡す必要があるようで、変更前に別の読み取りが必要です ( http://mobile-couchbase.narkive.com/HT2kvBP0/cblite-sync-ゲートウェイ-カウチベース-サーバー)、これは潜在的に非効率的と思われます。この問題を解決する最善の方法は何ですか?

4

2 に答える 2

1

ドキュメントを更新する (実際には新しいリビジョンを作成する) には、リビジョン ID が必要です。そうしないと、Couchbase は更新を親に関連付けることができません。これは、紛争解決へのアプローチ全体を壊します。(Couchbase は、マルチバージョン同時実行制御と呼ばれる方法を使用します。)

ドキュメントの既存のコンテンツを更新することが期待されます。これは、リビジョン ID を含め、ドキュメントを既に読んでいることを意味します。

何らかの理由でドキュメントを更新するために古いコンテンツが必要ない場合でも、リビジョン ID が必要です。これを回避すると (たとえば、Sync Gateway を介してドキュメントを消去してから新しいバージョンをプッシュするなど)、システム内に 2 つのバージョンのドキュメントが接続されずに存在することになり、特別な種類の競合が発生する可能性があります。

したがって、短い答えはノーです。これを回避する方法はありません (他の頭痛の原因となることなく)。

于 2017-05-02T19:59:35.627 に答える