IndexedDB 数据突然消失了(使用 Dexie)

问题描述 投票:0回答:1

我一直在使用 Dexie 开发一个小型生产应用程序。今天,通过打开应用程序,我发现所有数据都消失了。我怀疑我的应用程序是罪魁祸首,因为它没有办法立即删除所有数据。

我只记得我的浏览器(Arc,基于 Chromium)当天早些时候崩溃了,所以我不得不强制退出它。

因此我想知道:

  1. 浏览器崩溃会删除所有indexedDB数据吗?如果没有的话还有什么?
  2. Dexie 是否提供任何方法来预防或恢复?我是否错过了遵守最佳实践的机会? (我在下面分享了我的 Dexie 初始化。)
  3. 有没有办法恢复数据(除了Dexie)或检查浏览器中存储的所有indexedDB数据? (目前,我可以在开发工具的“应用程序”选项卡中看到它,但它仅向我显示当前源/域的那个。)

提前致谢!


我的 Dexie 实现:

import Dexie, { Table } from 'dexie'

class CustomDatabase extends Dexie {
    projects!: Table<Project, string>
    versions!: Table<Version, string>
    templates!: Table<Template, string>
    images!: Table<Image, string>

    constructor() {
        super('app-designer')

        this.version(1.4)
            .stores({
                projects: 'id, createdAt',
                versions: 'id, projectId, submitted',
                templates: 'id',
                images: 'id, projectId, createdAt',
            })
            .upgrade((tx) => {
                tx.table('projects')
                    .toCollection()
                    .modify((proj) => {
                        proj.pinnedVersions = proj.pinnedVersions || []
                    })
            })
    }
}

export const db = new CustomDatabase()
chromium indexeddb dexie
1个回答
0
投票
  1. 浏览器的行为有所不同,但 Chrome 似乎会保留它,除非设备磁盘空间不足 - 那么它可能会删除它。有一个 API StorageManager 可用于请求数据库保持持久性并且永不驱逐它。在您的情况下,浏览器崩溃也可能导致数据损坏,但浏览器已选择将其逐出。

  2. Dexie 提供了一个用于导出和导入数据的插件,dexie-export-import,但这将是定期导出数据以备份数据的手动步骤。另一个选择是Dexie Cloud,它可以持续备份数据并使其与云服务保持同步。

  3. 我对此没有答案。这可能是一个非常特定于浏览器实现的主题,并且取决于浏览器在硬盘驱动器上存储数据的位置。

© www.soinside.com 2019 - 2024. All rights reserved.