ImmortalDB - 用于浏览器的弹性键值存储


MIT
跨平台
JavaScript

软件简介

ImmortalDB 是用于浏览器的弹性键值存储

ImmortalDB 是在浏览器中存储持久键值数据的最佳方法,保存在其中的数据被冗余地存储在
CookiesIndexedDBLocalStorage
SessionStorage。如果其中的任何数据被删除或损坏,ImmortalDB 会进行自我修复。

举个例子,清除 cookie
是一种常见的用户操作(甚至对非技术用户来说,也是如此)。一般在没有存储压力警告的情况下,浏览器也会草率地删除
IndexedDB、LocalStorage 和 SessionStorage。而 ImmortalDB 对于这种情况,则是有弹性的。

这样说吧,ImmortalDB 就像 Evercookie,但它

  1. 会积极地被维护和记录;

  2. 提供了一个简单的,现代的,基于 Promise 的 API;

  3. 在可靠性和对用户的尊重间取得平衡。数据可靠地被存储着,但如果用户想清除 cookie 和应用程序的存储,也可以自行清除数据;

  4. 不使用恶意的漏洞利用工具(exploits),也不使用 Flash、Silverlight 或 Java 等第三方插件。只使用标准的、经过批准的 HTML 5 API;

  5. 不破坏性能或用户体验。例如,Evercookie 的 CSS 历史记录敲门(Knocking)可能会引起大量的后台 HTTP 请求产生,加载 Silverlight 或 Flash 可能会引发未被请求的许可模态框(permission modals)、或是颠簸(Thrashing)用户的磁盘。

ImmortalDB 是如何工作的

当您将键值对存储在 ImmortalDB 中时,该键和值会冗余地保存在浏览器的 cookie、IndexedDB、LocalStorage 和
SessionStorage 数据存储中。

当您通过键检索值时,ImmortalDB 会:

  1. 在每个数据存储中查找那个密钥;

  2. 计算每个唯一返回值;

  3. 将最常见的返回唯一值确定为“正确”值;

  4. 返回这个正确的值。

接着,ImmortalDB
会“自愈”:如果任何数据存储区返回的值与所确定的正确值不同,或是根本没有值,则将正确的值重写到该存储区。通过这样的方式,一致性、可靠性和冗余得到维持。