我有一个应用程序,其中包含对用户敏感的信息。据我所知,我应该为每个用户架构使用一个数据库。我希望每个用户的数据库(可能是客户端)复制到位于公共服务器上的数据库,并允许用户从任何设备访问应用程序,以便用户登录设备,数据库将被某些人发现公共服务器上的中间层,然后复制客户端并在设备和公共服务器之间进行同步。
似乎这就是 CouchDB 的优点(基于我的 Google 搜索),但是否有任何示例应用程序可以执行我所描述的(或接近它)?我正在使用 couchdb 1.1.0。
是的,CouchDB 听起来非常适合这个——它简单的协议使它非常适合 Web 应用程序 [即使是离线的,请参阅pouchdb ] 和移动/桌面应用程序 [即使是离线的,请参阅Couchbase Mobile。
不幸的是,我不知道一个很好的公开可用的代码级示例,但基本思想是使用过滤复制和文档验证的组合:
基本思想是,对于用户数据库的服务器端副本,您设置了验证功能,以便强制执行所需的文档模式和访问控制。最终用户获得了该数据库的副本,可用于低延迟和离线访问——理论上他们可以破坏他们的副本,但在复制回来时,验证功能将防止服务器端数据库损坏。
您甚至可以设置一个不可公开访问的主数据库,然后使用过滤复制将每个用户的数据同步到服务器端的每个用户数据库——这对于集中消息传递、聚合统计信息、只需要备份一个数据库等很有用.
在这篇“复制中的新功能”文章中还有一些高级示例,尤其是最后的“DesktopCouch”和“基于需要知道的数据共享”用例部分。
更新(2015/03/10):我不再推荐使用 CouchDB 的过滤复制,如上所述。当您尝试从中央数据库复制多个过滤的提要时,会出现几个性能和可伸缩性问题(如果不是可靠性问题)。如果您需要文档级读取权限,或者使用_local_seq
.