4

我正在开发一个项目,该项目使用 Couchbase 服务器和同步网关将存储桶的内容与运行 Couchbase Lite 的 iOS 和 Android 客户端同步。我还需要从 Node.js 服务器应用程序对 Couchbase 服务器进行读写访问。根据我所做的研究,不赞成使用阴影(https://github.com/couchbase/sync_gateway/wiki/Bucket-Shadowing),这导致我将同步网关 API 作为更新存储桶的一种手段来自 Node.js 应用程序。通过 Sync Gateway API 更新现有文档似乎需要传入文档的最新修订 ID,需要在修改前单独读取 ( http://mobile-couchbase.narkive.com/HT2kvBP0/cblite-sync-网关-couchbase-服务器),这似乎可能效率低下。解决此问题的最佳方法是什么?

4

2 回答 2

1

更新文档(实际上是在创建新修订)需要修订 ID。否则,Couchbase 无法将更新与父级关联。这打破了解决冲突的整个方法。(Couchbase 使用一种称为多版本并发控制的方法。)

期望是您正在更新文档的现有内容。这意味着您已经阅读了该文档,包括修订 ID。

如果由于某种原因您不需要旧内容来更新文档,您仍然需要修订 ID。如果您解决它(例如,通过 Sync Gateway 清除文档,然后推送您的新版本),您最终可能会在系统中获得两个没有连接的文档版本,这将导致一种特殊的冲突。

所以简短的回答是否定的,没有办法避免这种情况(不会给自己带来其他麻烦)。

于 2017-05-02T19:59:35.627 回答
0

我不确定您的问题为什么被否决,因为这似乎是一个合理的问题。你是对的,Sync Gateway 使用的 Couchbase 存储桶可能最好被认为是“不透明的”,你不应该在那里四处寻找和改变东西。Couchbase Lite 有许多实现,例如用于 Java、.NET 和 Mac OS X 的实现。您是否考虑过制作一个 Web 服务,它一方面为您的应用程序提供服务,另一方面本身就是一个Couchbase Lite 客户端?您应该能够根据需要使用通道分离数据。

于 2016-07-13T20:35:20.587 回答