我目前正在评估以下问题的可能解决方案:
必须在多个客户端之间同步一组数据条目,其中每个客户端只能查看(或甚至知道存在)数据的子集。 每个客户“拥有”一些元素,并且其他人可以阅读或修改这些元素的决定可能只由所有者做出。为了使这种情况更加复杂,每个元素(以及每个元素修订版)必须具有对所有客户端都相同的唯一标识符。
虽然后者听起来像CouchDB的完美任务(并且基于文档的数据模型完全符合我的需求),但我不确定CouchDB的身份验证/授权子系统是否能够满足这些要求:尽管它应该是可能的使用验证函数来重写写访问权限,似乎没有办法授权读访问。我为此问题找到的所有解决方案都建议通过处理授权的代理(或应用程序层)来路由所有CouchDB请求。
所以,问题是:是否可以实现一个过滤对数据库的请求的授权层,以便只授予请求客户端具有读访问权限的文档,并仍然使用CouchDB的复制机制?简化后,这将是某种“选择性复制”,其中只复制一些文档而不是整个数据库。
我还要感谢有关复制如何工作的一些详细信息的说明。 CouchDB维基甚至是“明确指南”都不是那么具体。
答案 0 :(得分:5)
这需要复制过滤器。您根据所施加的任何条件过滤出站复制,并授予目标所有者不受限制的访问权限。
我没有机会直接使用复制过滤器,但想法是每个文档都会有一些关于谁有权访问它的信息,然后过滤机制将只允许那些文件的出站复制你有权访问。从目标到主服务器的复制将不受限制,允许主服务器保持汇总副本,并可能更改重叠的数据集。
答案 1 :(得分:3)
您所追求的是复制过滤器。根据克里斯安德森的说法,这是一个0.11的特征。
“目前的状况是存在的 用于过滤_changes的API 饲料。 0.10的复制器消耗 更改提要,所以下一步是 让复制者使用 过滤API。
这方面正在进行中,所以 它应该完全准备好进入 0.11“。
请参阅orginal post
答案 2 :(得分:1)
事实上,正如其他人所说,复制过滤器是实现这一目标的方法。 Here is a link提供有关使用它们的一些信息。
我要补充的一点是,规模复制过滤器可能非常慢。有关这个以及有关couchdb的其他细微差别的更多信息可以在这篇优秀的博文中找到:"what every developer should know about couchdb"。对于大规模系统,在应用程序层中执行复制已经证明更快,更可靠。
答案 3 :(得分:1)