如何使用pouchdb

时间:2018-03-19 21:39:52

标签: javascript database nosql couchdb pouchdb

我正在列出任务以了解如何使用PouchDB / CouchDB,应用程序非常简单,需要身份验证,用户才能创建任务。

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

(我已经阅读了几次pouchdb文档而且我无法定义这个,如果有文档记录,请告诉我在哪里。)

2 个答案:

答案 0 :(得分:4)

您可以使用这两种方法来完成您的使用案例:

每个用户的数据库

  • 每个用户的数据库是CouchDB中的每用户数据库模式。每次在CouchDB中创建/删除用户时,CouchDB都可以处理数据库的创建/删除。在这种情况下,每个PouchDB客户端都将复制完整的用户数据库。
  • 您可以在服务器config
  • 中启用它
  • 如果用户数据被隔离且您不需要在用户之间共享信息,这是一种正确的方法。在这种情况下,如果您需要在CouchDB中同步许多用户数据库和另一个用户数据库,则可能会出现一些可伸缩性问题。见post

每个用户的单个数据库

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

<强>结论

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

  • 对于过滤复制,如果必须过滤整个数据集,则会遇到一些问题,因为文档数量会增加。据报道,使用芒果选择器时,速度提高了10倍。
  • 对于每用户数据库,如果您需要在用户数量增长时将不同的用户数据库整合到一个用户数据库中,则会遇到一些问题。

答案 1 :(得分:2)

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

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

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