2014-09-23 49 views
2

我正在考虑使用PouchDB作为自动更新用户在论文中提交的评论的解决方案。PouchDB作为不同收藏的真实实时数据工具

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

这是可能的使用PouchDB作为入门指南中描述:

var db = new PouchDB('paper'); 
var remoteCouch = 'http://user:[email protected]/paper'; 

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

该应用程序拥有不同的文件,每一个都有自己的意见。当使用PouchDB我的发布/订阅服务,我有以下问题:

  • 是否使用PouchDB这样一个好主意?

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

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

回答

2

是的,PouchDB适用于实时的东西。它不使用网络套接字,但它使用长轮询,这对于大多数使用情况来说足够快。

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

也不用担心创建数千个数据库;一个“数据库”在CouchDB中便宜。

我建议的唯一的另一件事是,也许你会喜欢relational-pouch plugin,因为那样你就可以轻松地建立一个“纸”类型和“评论”类型的关系型数据库。

+0

如果我将使用验证函数来限制对论文的评论(阅读评论不需要限制),是否可以使用PouchDB.replicate中的''''filter'''选项source,target,[options])'''方法来有选择地过滤数据库的哪些部分被同步? – arnoutaertgeerts 2014-09-24 06:03:29

+0

当然,过滤器函数可以让你复制数据库的任何子集。我只是指出,如果你的担心是安全的,那么过滤器函数将不会保护数据库免受某人阅读他们不应该访问的数据。 – nlawson 2014-09-24 13:02:28

+0

我正在使用PouchDB在AngularJS中编写同步指令。每当我的数据库的某个对象在某处发生更改时,它就会被更新。为此,我使用'''$ scope。$ watch'''。我现在唯一的问题是,当一个对象改变并保存到数据库时,'_rev'''字段也会改变,导致无限更新循环:)你有什么想法如何解决这个问题? – arnoutaertgeerts 2014-09-24 14:06:54

相关问题