gpt4 book ai didi

couchdb - 如何有选择地复制 CouchDB 数据库的私有(private)和共享部分?

转载 作者:行者123 更新时间:2023-12-02 02:17:52 25 4
gpt4 key购买 nike

我们正在研究使用 CouchDB/CouchCocoa 将数据复制到我们的移动应用程序。

我们的系统有大量的用户。数据库的一部分对每个用户都是私有(private)的——例如他们的任务。这些我已经能够使用 filtered replication 毫无问题地复制.

关键在于...该数据库还包括共享信息,其中只有一些属于给定用户。我如何有选择地复制共享信息?例如,用户的任务可能引用特定的共享文档。有没有一种方法可以确保这些文档包含在复制中而不包括所有共享文档?

从文档看来,将 doc_ids 添加到复制(或添加具有这些文档 ID 的另一个复制)可能是一种解决方案。有人试过这个吗?还有其他解决方案吗?

编辑:考虑到用户数量,将每个共享文档标记为所有共享它的用户似乎不切实际,但也许这是唯一的方法吗?

最佳答案

最终解决方案主要取决于您的文档结构,但目前我看到两个用例:

  1. 当您将所有内容保存在单个数据库中时,您可能设置了一些字段以识别该文档是共享的还是私有(private)的,对吧?示例:

    所有者:“迈克”

    participants: []//如果没有人被提及,文档看起来像 private(?)

    因此,您只需要一些过滤器来处理私有(private)文档和共享文档:按标签、参与者数量、引用文献或其他方式。

    此外,如果您只需要为特定用户复制一些文档(例如,只为 Mike),那么您需要特殊的 View 来处理所有这些文档,并且,是的,通过文档 ID 使用复制,但这不是一个原子请求:您需要一些服务脚本来处理这些步骤。如果共享文档是通过对它们的引用来定义的,那么唯一的解决方案是相同的:一些服务脚本,查看生成的文档引用树并通过 doc._id 进行复制。

  2. 检查您的架构。拥有每个用户数据库是 CouchDB 的正常用例,并遵循数据分区和隔离的方式。因此,您可以为每个用户创建仅对该用户私有(private)的数据库。对于共享文档,您可以使用安全选项的数据库成员创建额外的数据库。每个“共享”数据库将仅按名称或组处理一定数量的参与者,因此不会有任何数据泄漏,除非那不是 CouchDB 错误(:

    这种方法乍一看太奇怪了,但您所需要的一切就是创建一些管理脚本来处理数据库的创建和发布,复制将尽可能简单,并且用户数据是安全的。

附言我假设“共享”操作使文档不是对每个人都可见,而是对某些用户组可见。如果我错了,“共享”状态意味着“公共(public)”状态而不是 p2。会更简单:N 个用户数据库 + 1 个公共(public)数据库。

关于couchdb - 如何有选择地复制 CouchDB 数据库的私有(private)和共享部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9636498/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com