CouchDB 每用户数据库方法对于具有大量共享数据的用户是否可行?



我想实现一个网络应用程序 - 一个集成来自各种来源的数据并将其显示给用户的提要。用户应该只能看到他有权读取的源项(例如,因为它们属于他所属的项目(。但是,源项可能(并且将(被许多用户看到。

我真的很想使用 CouchDB(主要是因为很酷的_changes提要和映射/减少视图(。我正在考虑将该应用程序实现为纯沙发应用程序,但我在权限模型方面遇到了问题。AFAIK,CouchDB 中没有每文档权限,这通常使用每用户数据库和复制来实现。

但是,当不同用户看到的内容之间存在大量重叠时,这将引入很多开销......这些东西将被复制到各个地方,并在许多数据库中复制。我喜欢这种方法的优雅,但巨大的开销感觉就像一个交易破坏者......(假设我有 50 个用户,他们都看到相同的数据......

请问有什么想法吗?替代解决方案?

您可以按照 CouchDB 基于每个数据库的授权中所述强制执行读取权限。

对于写入权限,您可以使用 CouchDB 上描述的验证函数权威指南 - 安全性。

您可以为每个项目创建一个数据库并在那里强制执行权限,然后在用户之间有效地共享所有数据。如果用户自己共享提要并且也需要权限,则可以将用户变成"项目",以便相同的逻辑适用于所有地方。

使用此设计,您可以为每个项目授权一个用户或一组用户(角色(。

除了(正如 victorsavu3 已经建议的那样(在您的应用程序和沙发之间的代理中处理您的读取身份验证之外,我能想到的只有另外两种选择。

首先是不关心,磁盘很便宜,拥有数据的多个副本可能看起来像很多不必要的重复,但它极大地简化了您的架构,并且您可以获得一些自动好处,例如轻松扩展以处理负载(只需将一些用户的数据库移动到其他服务器(。

其次是将共享数据拆分到不同的数据库中。 这偶尔会限制您可以在视图中执行的操作(例如,没有"链接文档">(,但在许多情况下这没什么大不了的。

最新更新