首页 > 解决方案 > CouchDB 数据同步

问题描述

我正在为自己开发一个 TODO 应用程序。它必须首先离线,因此数据同步很快成为一个问题。至于我的搜索,CouchDB 可以很好地进行数据同步(复制),但我在这里有些困惑。
首先,我使用的是 Flutter 和 Dart 编程语言,并且 Dart 上没有任何沙发客户端。对于 javascript,有PouchDB显然可以使数据与远程数据库自动同步(对吗?)据我所知,由于 CouchDB 带有本机 HTTP API,所以我应该不用任何第三方库就可以了,我可以只存储用户数据作为 JSON 文件,然后将其作为文档与 CouchDB 服务器同步(吗?
的 另一个困惑 是应该将用户数据存储为文档还是应该为每个用户创建 1 个数据库(换句话说,沙发是否同步数据库或文档?)它还提高了授权。有权访问数据库的用户可以访问所有文档。我想将每个用户限制在其文档中,而不在沙发和最终用户应用程序之间放置另一个 API。

标签: synchronizationcouchdbreplicationpouchdb

解决方案


pouchdb 的一个主要好处是本地数据库具有像 couchdb 这样的 API,但即使在脱机时也存在等。因此,如果您使用 pouchdb 并希望脱机工作,您几乎肯定会希望每个用户在 couchdb 上使用 db 并执行pouchdb <- > couchdb同步等。但是你不能在没有 JS 的情况下使用 pouchdb,并且在 webview 等中依赖它,这将在很大程度上破坏编译为本机代码而不是基于 webview 的应用程序的好处。

直接使用 HTTP API 并存储本地文档,从每个用户开始在 _users 中将一些简单的东西作为附加 JSON 存储在他们自己的用户文档中可能会更简单。您以后可以随时添加每个用户的数据库。_users 数据库有点特殊,它让每个用户都可以读取自己的文档,而不必让他们访问其他用户文档,并且依靠验证设计文档来保护重要字段,同时让他们编辑自己的数据。

在这样的场景中,客户端在本地保留用户自己文档的副本,当它有网络时它需要同步回服务器。拥有多个设备的用户当然存在冲突的可能性,它们可以通过客户端本身比较本地和服务器版本来解决,也可以在服务器上更新设计文档的帮助下解决。

从每个用户在自己的 _users 文档中拥有私有数据开始,仍然可以为用户组构建数据库,其中组中的所有用户共享对所有文档的读取访问权限,但只能更新他们创建的文档。每个用户的数据库实际上只是这种数据库的一种特殊情况,其中组已减少到只有一个成员。


推荐阅读