我正在开发一个项目,该项目使用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应用程序更新存储桶的方法。通过Sync Gateway API更新现有文档似乎需要传入文档的最新版本ID,在修改之前需要单独读取(http://mobile-couchbase.narkive.com/HT2kvBP0/cblite-sync-gateway-couchbase-server),这似乎可能效率低下。解决这个问题的最佳方法是什么?
答案 0 :(得分:1)
更新文档(实际上是在创建新版本)需要修订版ID。否则,Couchbase无法将更新与父级关联。这打破了解决冲突的整个方法。 (Couchbase使用一种称为多版本并发控制的方法。)
期望您正在更新文档的现有内容。这意味着您已经阅读过该文档,包括修订版ID。
如果由于某种原因您不需要旧内容来更新文档,您仍需要修订版ID。如果您解决此问题(例如,通过Sync Gateway清除文档然后推送新版本),您最终可能会在系统中找到两个版本的文档而没有连接,这将导致一种特殊的冲突。
所以简短的回答是否定的,没有办法避免这种情况(不会引起其他麻烦)。
答案 1 :(得分:0)
我不确定为什么你的问题被低估了,因为它似乎是一个合理的问题。你是对的,Sync Gateway使用的Couchbase存储桶应该最好被认为是“不透明的”,你不应该在那里闲逛和改变事物。 Couchbase Lite有很多实现,例如Java,.NET和Mac OS X.您是否考虑过制作一方面为您的应用程序提供服务的Web服务,另一方面本身就是Couchbase Lite客户端?您应该可以根据需要使用渠道分离数据。