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

时间:2017-02-13 21:00:41

标签: indexeddb pouchdb

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

我是PouchDB的新手以及在浏览器中存储数据的概念。我想知道在处理诸如从给定用户的PouchDB中删除/清除数据等问题时最佳做法是什么......

当用户退出或关闭并退出SPA时,将数据/文档保存在PouchDB / IndexedDB中(与删除它相比)的优缺点是什么?

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

2 个答案:

答案 0 :(得分:1)

这主要取决于用户体验与数据的新鲜度。

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

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

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

主要权衡:

Keep

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

Delete/Purge

  • App无法有效脱机
  • 应用程序需要保证用户只能看到更新的数据
  • 应用程序使用不可接受的存储量

注意PouchDB是NoSQL数据库。 NoSQL数据库不能强制执行" ACID"合规性。这意味着如果您的应用需要将数据更改为原子(事务性),则这是错误的解决方案。

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

还需要考虑安全性。您是否会为用户提供一种方法来删除敏感数据,以防他们在共享计算机上使用此类内容。

作为最后一点,您可能希望首先离线搜索'作为应用程序开发的一种方法。

答案 1 :(得分:1)

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

  • 删除身份验证令牌:用户注销后,任何身份验证令牌都将失效。无需再存储它们。
  • 删除个人或敏感数据:PouchDB将其数据存储在IndexedDB或WebSQL中,具体取决于您使用的浏览器。正如您已经发现的那样,存储在那里的数据可以在特定设备中的会话和浏览器选项卡/窗口之间使用。" Source 因此,您希望尽可能缩短个人或敏感数据。

注意:最好不要在PouchDB中存储上面提到的数据,但这不是重点。

注销后保存数据的用例:

  • 保留其他内容:这取决于您的应用程序,但如果您的数据不敏感,为什么不存储它?构建脱机第一个应用程序就是不必从远程数据库中获取所有数据,因此... 唯一的限制是存储您正在运行的设备以及用户的商誉。当然,这又取决于您的应用程序,但您可能希望确保,您不会在一个简单的应用程序中使用兆字节的存储空间。