我即将在CouchDB
服务器端编写过滤函数来过滤特定于用户的文档.此过滤器仅允许复制特定用户可访问的少数选定文档,而不是整个TB大小的数据库.
在这里,我发现了类似的问题CouchDB:限制用户只复制他们自己的文档,但它没有提供我需要的信息.
我的问题仍然存在:
指定这样的过滤器的最佳方法是什么?
我应该如何编写这样的过滤函数,任何书面示例?
我应该在每个文档中包含哪些内容,以便过滤器以这种方式工作:
在社交网络的上下文中,假设您想要从服务器获取图片等用户数据,在这种情况下,包含图片的文档将保留userId
在其中.但有时候,这个人的朋友可以访问他的个人资料,然后他们也可以查看这些照片.在这种情况下,每当朋友访问他的个人资料时,图片文档将被复制到朋友,他也将能够查看这些图片.
我怎样才能完成这样的过滤器?
更多信息:在移动平台方面,我使用的是CouchbaseLite,在服务器端,我使用的是CouchDB.我只希望在Mobile平台上过滤文档.
CouchDB过滤器功能只能访问要过滤的单个文档,因此您无法使用其他文档中的任何信息.这排除了"类似连接"的方法,例如从照片发布文档解除引用到所有者文档以查找所有者的朋友列表.
基本上,您必须在每个文档中包含一个属性,该属性列出了应该获取它的确切用户集.
另请注意,这不提供任何类型的访问控制.无法有选择地拒绝对CouchDB中的文档进行读取访问,因此您无法阻止用户查看陌生人的相册.要做到这一点,你必须采用每用户数据库方法,这有其自身的缺点 - 你最终必须在数据库之间设置大量的复制,以在它们之间共享文档,这不能很好地扩展.
看一下Couchbase Sync Gateway(https://github.com/couchbase/sync_gateway) - 它与CouchDB复制兼容,但增加了能够实现这种选择性同步和访问控制的功能.用它来实现社交网络绝对是可行的; 这是我们设计时遇到的用例之一.(我是该项目的首席工程师.)