我有一个应用程序,其中包含对用户敏感的信息.据我所知,我应该使用每个用户架构的数据库.我希望每个用户的数据库(可能是客户端)复制到位于公共服务器上的数据库,并允许用户从任何设备访问应用程序,以便用户登录设备,数据库将被某些人发现公共服务器上的中间层,然后复制客户端,并在设备和公共服务器之间进行同步.
看起来这是CouchDB的好处(基于我的Google搜索),但有没有任何示例应用程序可以完成我描述的(或接近它)?我正在使用couchdb 1.1.0.
是的,CouchDB听起来非常适合这个 - 它简单的协议使它非常适合网络应用[甚至离线,请参阅pouchdb ]和移动/桌面应用[再次离线,请参阅Couchbase Mobile.
不幸的是,我不知道一个很好的公开可用的代码级示例,但基本的想法是使用过滤复制和文档验证的组合:
基本思想是,对于用户数据库的服务器端副本,您需要设置验证功能,以便强制执行所需的文档架构和访问控制.最终用户获得此数据库的副本,可用于低延迟和离线访问 - 理论上他们可以破坏他们的副本,但在复制时,验证功能将阻止服务器端数据库被破坏.
您甚至可以设置不可公开访问的主数据库,然后使用筛选复制将每个用户的数据同步到服务器端的每用户数据库 - 这对于集中式消息传递,聚合统计数据,仅需要备份一个数据库等非常有用.
这篇"复制中的新功能"一文中还有一些高级示例,特别是"DesktopCouch"和"基于需要知道的数据共享"用例部分.
更新(2015/03/10):我不再建议使用CouchDB的过滤复制,如上所述.当您尝试从中央数据库复制多个已过滤的源时,会出现一些性能和可伸缩性问题(如果不是可靠性问题).如果您需要文档级读取权限,可以考虑尝试使用Couchbase及其Sync Gateway,或者使用构建自己的每用户更改视图(在自定义中间件后面进行保护)_local_seq.