【问题标题】:PouchDB as a real live data tool for different collectionsPouchDB 作为不同集合的真实实时数据工具
【发布时间】:2014-09-24 07:09:19
【问题描述】:

我正在考虑使用 PouchDB 作为自动更新用户在论文上提交的 cmets 的解决方案。

它应该模仿订阅/发布服务的行为。每当有人在他的客户端提交评论时,其他客户端上的 cmets 列表应该会自动更新。

如入门指南中所述,使用 PouchDB 可以做到这一点:

var db = new PouchDB('paper');
var remoteCouch = 'http://user:pass@mname.iriscouch.com/paper';

function sync() {      
  var opts = {live: true};
  db.replicate.to(remoteCouch, opts, syncError);
  db.replicate.from(remoteCouch, opts, syncError);
}

该应用程序包含不同的论文,每篇论文都有自己的 cmets。当使用 PouchDB 作为我的发布/订阅服务时,我有这些问题:

  • 以这种方式使用 PouchDB 是个好主意吗?

  • 如果我只想同步用户正在处理的当前论文的 cmets,我应该为每篇论文创建一个新数据库吗? (这也意味着我将失去从单个数据库中查询所有论文中所有用户 cmets 的可能性)

  • 有没有办法只同步数据库的一部分?这样,即使是不同的论文,我仍然可以使用数据库来保存所有的 cmets。

【问题讨论】:

    标签: couchdb publish-subscribe pouchdb


    【解决方案1】:

    是的,PouchDB 可以很好地处理实时数据。它不使用网络套接字,但它使用长轮询,这对于大多数用例来说已经足够快了。

    听起来您可能应该为每篇论文创建一个单独的数据库,假设您想限制每篇论文的访问。 CouchDB 身份验证有点棘手,但基本上如果您想控制读取访问权限,您可以授予用户完全读取访问权限或对整个数据库的零读取访问权限。 There's a writeup here.

    也不必担心创建数千个数据库; CouchDB 中的“数据库”很便宜。

    我唯一要建议的另一件事是,也许您会喜欢relational-pouch plugin,因为这样您就可以轻松地设置一个具有“paper”类型和“comment”类型的关系型数据库。

    【讨论】:

    • 如果我要使用验证函数来限制将 cmets 写入论文(读取 cmets 不需要限制),是否可以使用 PouchDB.replicate(source, target, [options])method 中的 filteroption 来选择性地过滤数据库的哪些部分被同步?
    • 当然,过滤函数可以让您复制数据库的任何子集。我只是要指出,如果您关心的是安全性,那么过滤器函数将无法保护数据库不被他人读取他们不应该读取的数据。
    • 我正在使用 PouchDB 在 AngularJS 中编写同步指令。每当我的数据库对象在某处发生更改时,它都会更新。为此,我使用$scope.$watch。我现在唯一的问题是,当对象更改并将其保存到数据库时,_revfield 也会更改,从而导致无限更新循环:) 你知道如何解决这个问题吗?
    • 首先,Freenode #pouchdb IRC 频道中的此类问题可能比这里更好。 :) 我们可以更快地响应和迭代。其次,如果你在编写 Angular 指令时遇到困难,可以使用一些用于 Pouch 的 Angular 库。我已经列出了他们here。第三,如果您为每个用户击键更新文档,您的历史将会增长far too fast!第四,我的解决方案是创建一个子文档,然后只看它。例如{_rev: 'foo', data: {...}}
    猜你喜欢
    • 2021-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-13
    • 2021-07-13
    • 1970-01-01
    相关资源
    最近更新 更多