2016-07-13 3 views
4

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

答えて

0

あなたの質問がなぜ妥当な質問のように思われたのかわかりません。あなたは正しいですが、Sync Gatewayで使用されるCouchbaseバケツは、おそらく "不透明"と考えられるべきであり、そこを掘り起こしたり変更したりするべきではありません。 Java、.NET、Mac OS XなどのCouchbase Liteの実装はいくつかあります。片方の側でアプリケーションにサービスを提供し、もう一方ではそれ自体がCouchbase Liteクライアント?チャンネルを使用して、必要に応じてデータを分離することができます。

1

ドキュメントを更新すると(実際には新しいリビジョンが作成されます)、リビジョンIDが必要です。それ以外の場合、Couchbaseは更新を親に関連付けることができません。これにより、競合解消のアプローチ全体が損なわれます。 (Couchbaseは、マルチバージョン並行性制御と呼ばれる方法を使用しています。)

文書の既存の内容を更新することが期待されます。これは、リビジョンIDを含むドキュメントを既に読んだことを意味します。

ドキュメントを更新するのに何らかの理由で古い内容を必要としない場合は、依然としてリビジョンIDが必要です。たとえば、同期ゲートウェイを介して文書をパージして新しいバージョンをプッシュするなどして回避すると、システムに接続されていない2つのバージョンのドキュメントが作成され、特別な種類の競合が発生する可能性があります。

だから、短い答えはいいえ、これを避ける方法はありません(他の頭痛を引き起こすことはありません)。

関連する問題