我需要在数据库之间同步单个文档,以便在更新一个文档时,另一个文档位于同一服务器上。由于没有文档级权限,因此尝试在数据库之间共享单个文档以进行协作的动机。这意味着,如果databaseA和userA有一个userA想要与“拥有”databaseB的userB共享的文档。没有好的方法(我知道)在userA的数据库上共享文档,因为userB不是databseA上的读者。
现在我的解决方案是允许在数据库之间链接单个文档(在所有者的请求和接受目标数据库的情况下),然后让它们不断更新。我有什么想法可以实现它吗?
答案 0 :(得分:3)
您可以使用名为 Filtered Replication 的功能。在普通复制使整个数据库保持同步的情况下,您可以提供过滤器函数,该函数对于应该复制的任何文档都返回true,否则返回false。结合连续复制任务,您可以使用此功能使单个文档保持近实时同步。
实际上,您必须决定如何设置复制任务。假设您的应用程序中有许多用户可以共享任意数量的文档,您可以使用以下方法:每个用户1个数据库+ 1个包含所有文档的主数据库。也就是说,您可以设置从任何用户的数据库到主数据库的连续复制(对于任何用户,只有管理员,这是可读的)。在每个文档中,您存储一个字段,比如“所有者”,其中包含一组用户,这些用户可以访问该文档(用户可以编辑)。然后,您将主数据库中的过滤复制设置为每个用户的数据库,过滤器功能根据字段“所有者”决定是否应复制文档。这种方法每个用户需要两个复制任务。
有关过滤复制的详细信息,请参阅http://wiki.apache.org/couchdb/Replication#Filtered_Replication,有关复制的信息,请参阅http://guide.couchdb.org/draft/replication.html。请注意,用于复制的API在CouchDB 1.1中略有变化,基本上用_replicator替换了_replicate。