CouchDB 的圣杯是它的复制功能。使用 TouchDB、Cloudant-Sync 和 Couchbase-Lite,您甚至可以将数据库从\复制到用户的智能手机,因此即使存在连接问题,数据也将可用。
CouchDB 复制协议(可能在不同的框架\sdks 中实现略有不同)为每个已更改的文档发出 GET 请求。
Cloudant和Iris-Couch都提供基于数据库大小、轻量 http 请求数(GET、HEAD)和重量 http 请求数(PUT、POST、DELETE)的定价程序。这意味着为单个文档调用 GET 与调用 GET 到./_all_docs
从某种意义上说,对于这些定价程序,复制协议的效率似乎很低。例如,如果您的用户仅从服务器中提取文档,则使用它可能/_all_docs?include_docs=true
比运行标准复制更便宜,即使/_all_docs
请求使您下载未更改的文档......
我错过了什么吗?定价程序不应该考虑下载\上传的数据量而不是请求的数量吗?单个文档的 GET 请求不应该比调用/_all_docs
或查看便宜得多吗?是否可以调整复制协议,使其在带宽方面效率较低但便宜得多?
PS 我知道 Couchbase 是一个单独的项目,CouchDB 复制协议对它没有任何影响。Couchbase 还支持从\到客户端的复制(通过 Couchbase Lite)。就对服务器的请求数量而言,有什么方法可以比较这两种机制?
- - 编辑 - -
看起来/_all_docs
正在用于 Couchbase-Lite 复制算法,不是为了降低成本,而是为了优化流程:
https ://github.com/couchbase/couchbase-lite-ios/wiki/Replication-Algorithm
- 使用标准 API 可以实现上述批量获取优化的有限情况:第 1 代的修订(修订 ID 以“1-”开头)可以通过 _all_docs 批量获取,因为根据定义,它们没有修订历史。不幸的是 _all_docs 不能包含附件正文,因此如果它返回的文档的 JSON 表明它有附件,则必须单独获取这些附件。尽管如此,这种优化还是有很大帮助的,目前在 Couchbase Lite 中实现。
- 编辑 -
此问题正在 Couchbase 同步网关中处理,而不是作为 CouchDB 的一部分: https ://github.com/couchbase/sync_gateway/wiki/Bulk-GET
我想知道这是否会在 CouchDB 中实现。看起来按请求收费的服务提供商没有兴趣支持此功能......