我一直在使用 Dexie 开发一个小型生产应用程序。今天,通过打开应用程序,我发现所有数据都消失了。我怀疑我的应用程序是罪魁祸首,因为它没有办法立即删除所有数据。
我只记得我的浏览器(Arc,基于 Chromium)当天早些时候崩溃了,所以我不得不强制退出它。
因此我想知道:
提前致谢!
我的 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()
浏览器的行为有所不同,但 Chrome 似乎会保留它,除非设备磁盘空间不足 - 那么它可能会删除它。有一个 API StorageManager 可用于请求数据库保持持久性并且永不驱逐它。在您的情况下,浏览器崩溃也可能导致数据损坏,但浏览器已选择将其逐出。
Dexie 提供了一个用于导出和导入数据的插件,dexie-export-import,但这将是定期导出数据以备份数据的手动步骤。另一个选择是Dexie Cloud,它可以持续备份数据并使其与云服务保持同步。
我对此没有答案。这可能是一个非常特定于浏览器实现的主题,并且取决于浏览器在硬盘驱动器上存储数据的位置。