假设我有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的新手,所以我很有可能在这里错过了一些概念。
答案 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