我正在为自己开发一个 TODO 应用程序。必须先离线,所以数据同步很快就成了问题。至于我的搜索,CouchDB 的数据同步(复制)功能非常好,但我在这里遇到了一些困惑。
首先,我使用 Flutter 和 Dart 编程语言,并且 Dart 上没有任何沙发客户端。对于 javascript,有 PouchDB 显然可以自动与远程数据库同步数据(我对吗?)据我所知,我应该不需要任何第三方库,因为 CouchDB 带有本机 HTTP API,我可以将用户数据存储为 JSON 文件,并将其作为文档与 CouchDB 服务器同步(我说得对吗?)
另一个 confusion for me 是用户数据应该存储为文档还是应该为每个用户创建 1 个数据库(换句话说,沙发同步数据库还是文档?)它还会提高授权。有权访问数据库的用户可以访问所有文档。我想限制每个用户只能使用其文档,而不在沙发和最终用户应用程序之间放置另一个 API。
pouchdb 的一个主要好处是拥有本地数据库,这些数据库具有像 couchdb 这样的 API,但即使在离线状态下也存在,等等。因此,如果您使用 pouchdb 并希望离线工作,您几乎肯定会希望在 couchdb 上使用每个用户数据库并执行 pouchdb <-> couchdb 同步等。但是如果没有 JS,你就无法使用 pouchdb,并且在 webview 等中依赖它,这将在很大程度上破坏编译为本机代码而不是基于 webview 的应用程序的好处。
直接使用 HTTP API 并存储本地文档,从每个用户在 _users 中自己的用户文档中存储一些简单的内容作为附加 JSON 开始可能会更简单。您以后随时可以添加每用户数据库。 _users 数据库有点特殊,因为它为每个用户提供了对自己文档的读取访问权限,而无需授予他们对其他用户文档的访问权限,并依赖验证设计文档来保护重要字段,同时让他们编辑数据。
在这样的场景中,客户端在本地保存用户自己的文档的副本,需要在联网时同步回服务器。当然,对于拥有多个设备的用户来说,存在冲突的可能性,可以通过客户端本身比较本地版本和服务器版本或借助更新服务器上的设计文档来解决这些冲突。
从每个用户在自己的 _users 文档中拥有私有数据开始,人们仍然可以为用户组构建数据库,其中组中的所有用户共享对所有文档的读取权限,但只能更新他们创建的文档。每用户数据库实际上只是此类数据库的一种特殊情况,其中组已减少到只有一个成员。
有人知道 2024 年该怎么做吗? 我需要在 Flutter 上制作一个简单的应用程序,并在 CouchDB 数据库上同步。 非常感谢你们😀