我已经完全部署了沙发床(服务器,同步网关和lite),并有一个API,移动应用程序和网络应用程序都在使用它。

它工作得很好,但是我想知道使用Sync Gateway API是否比Couchbase SDK有任何优势?具体来说,我想知道Sync Gateway是否可以比SDK(可能是内部队列/缓存系统)更好地处理大量操作,但似乎无法找到确定的文档。

目前,API使用C#Couchbase SDK,而我们很少使用SyncGateway(仅用于同步移动应用程序)。

最佳答案

首先,一些相关的背景信息:

每个需要同步到Couchbase Lite(CBL)客户端的文档都需要由同步网关(SGW)处理。无论是通过SGW API编写文档还是通过服务器写入(N1QL或SDK)引入文档,都是如此。后一种情况称为“导入处理”,其中SGW通过DCP提要读取(通过N1QL)写入存储桶的文档,然后由SGW处理该文档,并使用相关的同步元数据写回到存储桶。

先决条件:

为了使SGW导入直接通过N1QL / SDK编写的文档,您必须启用“共享存储桶访问”和导入处理,如here所述

非流动文件:

如果您有永远不会同步到CBL客户端的文档,那么选择是显而易见的。使用服务器SDK或N1QL

移动文档(同步到CBL客户端的文档):

假设您正在SGW 2.x上与CBL 2.x客户端同步

如果您在服务器端编写了需要同步到CBL客户端的文档,请考虑以下事项


服务器端写入率:


如果您正在查看服务器端写入的持续速率大大超过1.5K / sec(假设为5K / sec),那么您应该采用SGW API路由。通过服务器N1QL查询进行批量更新很容易,但请记住,SGW仍然需要跟上并进行导入处理(在后台进行了讨论)。

这意味着,如果您正在通过SDK / N1QL进行大量更新,那么您将必须对其进行速率限制,以便SGW能够跟上(通过SDK进行批量更新)

就是说,重要的是要考虑以下事实:如果SGW跟不上DCP提要上的写入吞吐量,则无论写入如何发生(SGW API或N1QL),都会导致延迟。

如果您在服务器上的持续写入率不是很高,那么请使用N1QL。


删除处理:


没关系。在共享存储桶访问下,通过SDK或SGW API进行的删除将导致逻辑​​删除。进一步了解here


SGW特定配置:


自然,如果您要处理SGW特定的配置,创建SGW用户,角色,那么您将为此使用SGW API。


冲突处理:


在2.x中,这无关紧要。在CBL方面处理冲突。

SGW API面临的挑战


在现实世界中,最大的挑战可能是使用SG API路径意味着要么在外部系统中存储有关SG版本ID的信息,要么以读写方式执行每个变异(因为我们没有办法PUT不提供修订ID的文档)

10-02 23:20