使用CouchDB服务器实现多个PouchDB客户端实例的实时同步

时间:2016-05-22 09:47:25

标签: couchdb pouchdb

假设我有1K +客户端,每个客户端都运行自己的本地PouchDB实例和客户端特定的数据。我希望所有这些客户端能够将他们的数据与CouchDB服务器同步,以便我可以从头开始使用自己的数据重新初始化客户端的应用程序。

每个客户端,即每个PouchDB实例,都包含特定于客户端的数据。我希望所有客户端将他们的数据同步到服务器,但是当涉及到服务器到客户端的同步时,我想只发回与给定客户端相关的这些数据库条目。

最好的策略是什么?

PouchDB article about filtered replication

  

为每个用户创建数据库并不羞耻

然而10 Things Developers Should Know about Couchbase

  

尝试在Couchbase中使用5个或更少的存储桶。从不超过10个。

同样似乎由Multi-tenancy with Couchbase Server确认:

  

Couchbase Server最多支持10个桶,而且这个数量可以   拨打了,但是创造了太多桶的开销   大大限制了你可以达到的密度。

除非我完全误解了某些内容,否则每个用户的桶(CouchDB中的bucket ==数据库)都不是一个选项。

或者,我可以为每个数据库实体添加用户的唯一ID并使用服务器过滤功能,但PouchDB documentation说:

  

通过过滤仅复制用户的文档似乎最简单,但过滤不能代替正确的身份验证。

那么首选方法是什么?我是PouchDB / CouchDB的新手,所以我很有可能在这里错过了一些概念。

1 个答案:

答案 0 :(得分:0)

我建议使用过滤器过滤复制,该过滤器检查请求中的userCtxt对象以验证每个用户,并编写验证函数,检查当前用户是否有权更新文档:

过滤示例:

function(doc, req) {
    if (!req.userCtx.name) {
    throw("Unauthorized!");
  }
 .....
}

验证功能示例:

"validate_doc_update": "function (newDoc, oldDoc, userCtx) {
     if (newDoc.author != userCtx.name) { 
         throw({ 
             forbidden: 'Only' + userCtx.name + ' may edit this document'
         });
     }
}"

来源:Google