【发布时间】:2016-01-09 16:35:27
【问题描述】:
我基于 CouchDB 构建了一个移动应用程序。
出于安全原因,我必须确保文档只能由允许这样做的用户读取。由于我无法在文档级别管理访问权限,因此我为每个用户创建了一个 couchdb 数据库,并通过过滤复制从我的主 couchDB 数据库中复制每个用户数据库中的文档。
这个模型工作得很好,但是今天我遇到了巨大的性能问题。
我试图让我的所有复制都是连续的、过滤的和双向的,但是在 80 个用户(所以 81 个数据库和 160 个同时连续复制)之后,复制太多了,我的 couchDB 服务开始变慢,有时甚至崩溃.注意所有数据库都在同一台服务器上(我不能有多个服务器)
我尝试进行“手动”复制,但即使这样,当我需要将文档从我的主数据库复制到所有 80 个用户数据库时,从我的主数据库到用户数据库的每个过滤复制都会占用30 秒。
也许我的复制过滤器有问题,我为每个文档存储了一个允许查看它的用户列表。由于每个用户都有自己的数据库,我只复制允许用户在其数据库中查看的文档。这是我的复制功能:
function(doc, req) {
if(doc.userList) {
if(doc.userList.indexOf(req.query.username) > 1) {
return true;
}
}
return false;
}
我的应用程序的目标是获得大约 1000 个用户,这在当前架构/性能下是完全不可能的。
我有三个问题: 1.即使我认为不可能,是否可以在同一台服务器上连续复制大约1000个数据库? 2. 我的复制过滤器有什么问题吗?有什么方法可以改进它以实现快速的数据库复制? 3. 如果目前的架构一点都不好,你会建议我用什么样的架构?
非常感谢!
【问题讨论】:
标签: performance couchdb replication