从 PouchDB 中删除文档与在用户注销或关闭应用程序时保留它们

Deleting documents from PouchDB vs keeping them when the user logs out or closes the app

我正在开发一个单页应用程序,它依赖于 PouchDB 来存储用户登录应用程序时的状态。我的应用程序状态包含用户数据,例如电子邮件地址、名字等。

我不熟悉 PouchDB 以及在浏览器中存储数据的概念。我想知道在处理诸如来自 PouchDB 的给定用户的 deleting/purging 数据等问题时,最佳实践是什么...

当用户注销或关闭并离开 SPA 时,将 data/documents 保留在 PouchDB/IndexedDB 中(相对于删除它)有哪些优缺点?

换句话说,保留数据的示例用例和在用户注销时删除数据的用例是什么?

这主要归结为用户体验与数据的新鲜度。

PouchDB 旨在允许应用程序将数据保存在本地并将其与后端系统同步。 (目前支持 CouchDB 和 Couchbase,作为后端服务器的示例。)它还旨在允许多个客户端进行更改。

大多数数据库都希望中央系统具有高可用性。它们旨在立即解决冲突。使用 PouchDB,您预计在客户端写入时可能无法解决的冲突。

核心思想是您的应用有时会在网络连接不良或没有网络连接的情况下使用。将信息保存在本地意味着您的应用程序可以继续工作,即使在这些情况下也是如此。

主要权衡:

Keep

  • 应用程序可能仍会提供有用的功能w/o网络连接
  • 更快的响应时间
  • 减少跨网络的数据传输(避免为每次调用重新发送所有数据)
  • 可能需要注意冲突的解决
  • 可能会在本地存储过多的数据

Delete/Purge

  • 应用无法离线运行
  • 应用需要保证用户只能看到更新后的数据
  • 应用程序使用了不可接受的存储量

注意 PouchDB 是一个 NoSQL 数据库。 NoSQL 数据库无法强制执行 "ACID" 合规性。这意味着如果您的应用程序需要数据更改是原子的(事务性的),那么这是错误的解决方案。

有很多最终一致数据很好的用例。这可以很简单,只要有一个客户端和后端系统 "agree" 就什么是正确的。或者它可以是一个复杂的系统,有多个编写者进行最终传播和集成的更改。

还需要考虑安全性。如果用户在共享计算机上,您会为他们提供一种删除敏感数据的方法吗?

最后一点,您可能希望搜索 'offline first' 作为应用程序开发的方法。

用户注销后删除数据的典型用例可能是:

  • 正在删除身份验证令牌:一旦用户注销,任何身份验证令牌都将失效。无需再存储它们。
  • 删除个人或敏感数据:PouchDB 将其数据存储在 IndexedDB 或 WebSQL 中,具体取决于您使用的浏览器。正如您已经发现的那样,存储在那里的数据可用 "across sessions and browser tabs/windows, within a particular device." Source 因此,您希望尽可能简短地保留个人或敏感数据。

注意:充其量您不需要像上面提到的那样在 PouchDB 中存储数据,但这不是重点。

注销后保留数据的用例:

  • 保留其他任何东西: 这取决于您的应用程序,但如果您的数据不敏感,为什么不存储它呢?构建离线第一个应用程序就是不必从远程数据库中获取所有数据,所以...... 唯一的限制是您 运行 使用的设备的存储空间和用户的善意。当然,这又取决于您的应用程序,但您可能需要确保您没有为一个简单的应用程序耗尽数兆字节的存储空间。