【问题标题】:How to work with databases in pouchdb如何在 pouchdb 中使用数据库
【发布时间】:2018-03-26 19:26:52
【问题描述】:

我正在制作一个任务列表来学习如何使用 PouchDB / CouchDB,该应用程序非常简单,具有身份验证并且用户将创建他们的任务。

我的问题是关于如何将每个用户的信息存储在数据库中。我应该为每个用户的任务创建一个数据库吗?或者有没有办法将所有用户的所有任务放到一个名为“Tasks”的数据库中,并以某种方式过滤同步,使 PouchDB 不会同步服务器中的整个数据库(包括其他用户的任务)?

(我已经阅读了 pouchdb 文档几次,但我无法定义它,如果有文档,请告诉我在哪里。)

【问题讨论】:

    标签: javascript database nosql couchdb pouchdb


    【解决方案1】:

    您可以使用这两种方法来实现您的用例:

    每个用户的数据库

    • 每个用户一个数据库,是 CouchDB 中的 db-per-user 模式。每次在 CouchDB 中创建/删除用户时,CouchDB 都可以处理数据库创建/删除。在这种情况下,每个 PouchDB 客户端都将复制完整的用户数据库。
    • 可以在服务器config开启
    • 如果用户数据被隔离并且您不需要在用户之间共享信息,这是一种合适的方法。在这种情况下,如果您需要将多个用户数据库与 CouchDB 中的另一个同步,您可能会遇到一些可伸缩性问题。请参阅此post

    每个用户都有一个数据库

    • 您需要使用 CouchDB/PouchDB 中的过滤复制功能。这个post 解释了如何使用它。
    • 使用这种方法,您可以在 PouchDB 中复制 CouchDB 数据库的子集
    • 由于您只有一个数据库,因此更容易在用户之间共享信息
    • 但是,这种方法存在一些性能问题。过滤过程非常低效。因为它必须处理整个数据集,包括已删除的文档,以确定要包含在复制中的文档集。此过滤在服务器中的 couchdb 外部进程中完成,这增加了进程的成本。
    • 如果您需要使用过滤方法,最好使用 Mango 选择器,因为它在 CouchDB 主进程中进行评估并且可以被索引。请参阅 PouchDB 复制过滤选项中的 options.selector

    结论

    哪个更好?取决于您的用例...在任何情况下,您都应该考虑两种情况下的可扩展性问题:

    • 在过滤复制的情况下,如果您必须过滤整个数据集,随着文档数量的增加,您将面临一些问题。据报道,使用芒果选择器时速度快 10 倍。
    • 在 db-per-user 的情况下,当用户数量增加时,如果您需要将不同的用户数据库整合到一个数据库中,您会遇到一些问题。

    【讨论】:

      【解决方案2】:

      两种模式都有效。唯一的区别是,为了使用过滤复制,您需要提供对主数据库的访问权限。

      由于它是在 javascript 中的,因此很容易获取凭据然后访问主数据库。这将使用户能够查看每个人的数据。

      更安全的方法是使用每用户数据库模式。每个数据库都将受到用户凭据的保护。

      【讨论】:

        猜你喜欢
        • 2016-06-15
        • 2021-03-28
        • 2016-12-06
        • 2018-06-11
        • 1970-01-01
        • 2016-09-10
        • 1970-01-01
        • 2016-01-14
        • 1970-01-01
        相关资源
        最近更新 更多