我有一个管理用户的 PouchDB 应用程序。
用户拥有一个使用单个 CouchDB 数据库进行复制的本地 PouchDB 实例。很简单。
这就是事情变得有点复杂的地方。我正在将“组”的概念引入到我的设计中。组将是不同的 CouchDB 数据库,但在本地,它们应该是用户数据库的一部分。
我正在读一些关于“花式复制”在 pouchDB 网站上,这似乎是我想要的解决方案。
现在,我的问题是,我该怎么做?进一步来说,如何从多个远程数据库复制到单个本地数据库?有些代码示例会很棒。
从下面的图表中,您会注意到我基本上需要根据用户所在的组动态添加数据库。对我的设计的批评也将受到赞赏。
流程应该是这样的:
- 将所有用户文档从他/她的数据库检索到
localUserDB
-
var groupDB = new PouchDB('remote-group-url');
groupDB.replicate.to(localUserDB);
(多个 pouchdb 实例 0_0 有任何性能问题吗?)
- 在本地,当用户进行与特定组相关的更改时,我们确定相应的数据库并通过执行以下操作进行复制:
localUserDB.replicate.to(groupDB)
(我需要过滤复制吗?)
从多个远程数据库复制到本地数据库:
remoteDB1.replicate.to(localDB);
remoteDB2.replicate.to(localDB);
remoteDB3.replicate.to(localDB);
// etc.
然后做一个过滤复制从本地数据库到应该接收更改的远程数据库:
localDB.replicate.to(remoteDB1, {
filter: function (doc) {
return doc.shouldBeReplicated;
}
});
为什么要过滤复制?因为您的本地数据库包含来自多个来源的文档,并且您不希望将所有内容复制回一个远程数据库。
为什么要有过滤功能?既然你正在复制from本地数据库,使用设计文档、视图等不会带来性能提升。只需传入一个过滤函数即可;更简单。 :)
希望有帮助!
Edit:好吧,听起来用户所属组的名称实际上包含在第一个数据库中,这就是您所说的“迭代”的意思。不,你可能不应该这样做。 :) 您正试图绕过 CouchDB 的内置身份验证/权限系统。
相反,你应该使用 CouchDB 的内置roles,将这些角色应用于用户,然后使用“每个角色数据库”方案来确保用户只能访问其正确的组数据库。用户可以随时查询_users
API来查看他们属于什么角色。简单的!
欲了解更多详细信息,请阅读pouchdb-身份验证自述文件.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)