使用PockDB/CouchDB模式设计的Cordova Web应用程序

使用PockDB/CouchDB模式设计的Cordova Web应用程序,couchdb,pouchdb,Couchdb,Pouchdb,我希望将PockDB与CouchDB结合使用,因为我的web应用程序具有出色的同步和复制功能,但很难找到为我需要做的事情建模数据的最佳方法 该应用程序允许用户在日历中创建事件,只能与他们选择的用户共享。与该事件关联的用户可以添加注释并对该事件进行更改 1) 据我所知,每个用户都应该有自己的数据库,以避免访问其他用户数据(如果所有数据都存储在一个数据库中)。如果是这种情况,如何更新或共享来自不同数据库的文档数据 2) 是否应该使用带有API的sql数据库在另一台服务器上管理用户登录 任何指导都将不

我希望将PockDB与CouchDB结合使用,因为我的web应用程序具有出色的同步和复制功能,但很难找到为我需要做的事情建模数据的最佳方法

该应用程序允许用户在日历中创建事件,只能与他们选择的用户共享。与该事件关联的用户可以添加注释并对该事件进行更改

1) 据我所知,每个用户都应该有自己的数据库,以避免访问其他用户数据(如果所有数据都存储在一个数据库中)。如果是这种情况,如何更新或共享来自不同数据库的文档数据

2) 是否应该使用带有API的sql数据库在另一台服务器上管理用户登录

任何指导都将不胜感激


Danio

在这种情况下,最简单的方法可能是分配角色并使用“每个角色一个数据库”模型(与“每个用户一个数据库”模型相反)

你不需要一个单独的数据库。CouchDB可以处理得很好。但是,您需要一些服务器端逻辑来管理用户权限、分配角色等


如果一个事件可以有任何用户组合,听起来您可能需要执行类似“每个角色一个文档”的操作,即“每个数据库一个文档”。如果您希望用户创建大量文档,那么这可能是不可行的,但请记住,您始终可以将多个远程数据库同步到单个本地数据库(或反之亦然,或任何您想要的组合)。祝您好运!

如果我正确理解您的应用程序,您的文档如下所示:

{
  "_id": "event-{timestamp/name/something}",
  "organizer": "alice",
  "attendees": [
    "alice", "bob", "charlie"
  ]
}
如果这基本上是正确的,那么我建议使用以下体系结构使其能够与&’的复制一起工作

这里的目标是“切中要害”CouchDB的复制协议,将权限划分为容器(每个用户的数据库和每个共享/关系的数据库),并提供潜在的友好共享/分发模型……因为云有时会消失。;)

在下面的流程图中,您可以在左侧看到Alice的“设备”(或应用程序等)。Alice将事件保存在
私有用户空间
数据库中。任何包含与会者的活动文档(如上面的文档)都会被复制(可能通过后台过滤的复制过程)以基于
attenders
键中使用的用户标识符(或以您的方式建模)共享数据库

每个
与-*
数据库共享的数据库都会连续(理想情况下)复制到云托管(最有可能)CouchDB(或兼容)数据库。Bob和Charlie将他们的应用程序连接到同一个云托管的CouchDB(或兼容的)数据库,并将Alice的事件复制到他们与Alice的
共享
数据库中

然后,应用程序将这些事件提供给Bob和Charlie,让他们进行编辑,将这些更改复制回与alice的
共享
数据库,然后(最终;因为网络)备份到云并返回alice

在所有这些情况下,云位是可选的根据部署情况,这可能是同一网络上的三台设备以某种方式相互查找,并在可用时进行复制

根据我对您的应用程序的了解,这应该可以使用。:)您提到还有其他注释文档,需要以类似的方式对它们进行建模,否则应用程序将利用它们与事件文档的关系来正确处理相关注释

我很想知道这听起来是否是一条可行的道路,因为我自己正在为几个项目探索这条道路


希望里面的东西对你有帮助。:)

我相信CouchDB生态系统中的任何一种用例都有一个完美的解决方案,但真正让我们远离它的是思考关系的复杂性和安全性降低的个人自由。最好的设计方案也是最简单的。我在

中提到的一个最简单的解决方案,它解决了所谓的安全问题,导致每个用户的非循环数据库设计。谢谢您的回复。每个事件文档使用一个DB听起来不切实际。在关系模式中,很容易实现。一个事件表和一个事件用户表。但因为我们处理的是本地数据库,所以我想事情会变得更加棘手。我有点泄气。起初,我对PouchDB/CouchDB的特性非常兴奋,但尝试做我需要做的事情似乎要困难得多:(PouchDB并不是解决所有问题的完美解决方案。特别是,CouchDB中的身份验证/角色建模非常薄弱,每个人都有自己的解决方法,通常在CouchDB之上实现(参见一些示例).一般来说,PockDB/CouchDB擅长同步,但在查询和角色管理方面较弱。因此我认为深灰色框中的所有内容都是PockDB,浅灰色框是Cloudant/CouchDB?,与-*
数据库共享的
也会执行未经过滤的复制,返回到
私人用户空间
db?如果是这样,这实际上看起来像e一个很好的设计。应该与PockDB配合使用。:)虽然缺点是在客户端复制了一些数据,但优点是复制非常清晰和直接。@nlawson正确。但是,如果/当深灰色框可以在网络上相互“看到”,从而避免“远距离”中继时,浅灰色框可以被视为可选框。谢谢!这似乎是一个很好的解决方案!复制部分似乎有点让人不知所措,可能是因为我对CouchDB/pockdb还不熟悉。我还想做的一件事是能够通过电子邮件将用户添加到活动中,即使他们还没有创建帐户。一旦该用户注册,它将自动向他显示他所附加的事件。这可能会让事情变得更复杂:)这就引出了我的下一个问题,如何与大家分享-*