使用CouchDB进行选择性复制

时间:2009-12-11 12:54:46

标签: replication couchdb

我目前正在评估以下问题的可能解决方案:

必须在多个客户端之间同步一组数据条目,其中每个客户端只能查看(或甚至知道存在)数据的子集。 每个客户“拥有”一些元素,并且其他人可以阅读或修改这些元素的决定可能只由所有者做出。为了使这种情况更加复杂,每个元素(以及每个元素修订版)必须具有对所有客户端都相同的唯一标识符。

虽然后者听起来像CouchDB的完美任务(并且基于文档的数据模型完全符合我的需求),但我不确定CouchDB的身份验证/授权子系统是否能够满足这些要求:尽管它应该是可能的使用验证函数来重写写访问权限,似乎没有办法授权读访问。我为此问题找到的所有解决方案都建议通过处理授权的代理(或应用程序层)来路由所有CouchDB请求。

所以,问题是:是否可以实现一个过滤对数据库的请求的授权层,以便只授予请求客户端具有读访问权限的文档,并仍然使用CouchDB的复制机制?简化后,这将是某种“选择性复制”,其中只复制一些文档而不是整个数据库。

我还要感谢有关复制如何工作的一些详细信息的说明。 CouchDB维基甚至是“明确指南”都不是那么具体。

4 个答案:

答案 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)