使用 indexeddb 作为具有多个版本的版本化数据库

Using indexeddb as a versioned database with multiple versions

场景:

您在 2018 年创建了一个 excel sheet。它在 sheet 中有查找 table。我们称此数据库为版本 1。用户将 excel 作为表单 ID 1 提交。 现在在 2019 年,您更新查找 table 并发布 excel 的新版本。现在是数据库版本 2。用户提交最新的 2019 excel 作为表单 -ID 2.

现在尝试在 Web 应用程序中执行此操作。我们正在使用 Rule.JS、Formula.JS 和 JS promises 以及索引数据库来模仿 excel 之类的函数。我们正在使用 indexeddb 来避免多次调用数据库进行查找。所以只有 STATIC 数据存储在 indexeddb 中。使用最新数据时,所有这些都有效。我的设计挑战是针对可能需要使用旧版本数据库查找 tables.

的旧表单执行此操作

当您在浏览器中打开 Form Id 1 时,应加载 Db ver 1。

当您在浏览器中打开 Form Id 2 时 - 应加载 Db ver 2。

问题:

  1. indexeddb 是否可以使用 indexedDB.open(dbname,ver) 在页面加载时加载特定版本?
  2. indexeddb 版本可以在页面加载时降级吗?
  3. 我们可以在页面加载时将版本号作为参数从 JS 传递吗?

问题是每个表单都需要根据提交时间提取特定版本的 Db。使用 indexedDb,我知道它是一个前瞻性数据库。所以我们只能升级到较新的版本而不能降级。有没有办法用 indexeddb 做到这一点,还是我找错了树?

我想到的一个解决方案是在 SQL 中创建两个 table。 1 个实际 table,1 个存档 table。每次更新数据时,我们将旧数据移动到版本号为 # 的存档 table。如果表单正在查找特定版本,则 GetData(lookupvariable, ver#) 可以搜索 table 以查找该特定版本的值。这样,我将不得不最终将所有内容转换为 AJAX 调用并取消 indexeddb。

无论版本如何,名为 foo 的 IDB 数据存储都将具有相同的数据。因此,如果您在 v1 中添加数据,然后将其更改为 v2,数据不会消失。 IDB 使用版本控制作为一种让您更改结构的方法。您只能在版本更改时修改对象存储。

所以我会说是的 - 你在这里咆哮错误的树,使用版本控制作为分区数据的方式。我认为您的存档解决方案 table 实际上更有意义。