首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IndexedDB数据库备份/恢复方案

IndexedDB数据库备份/恢复方案
EN

Stack Overflow用户
提问于 2021-03-06 06:21:58
回答 1查看 392关注 0票数 0

我有一个关于indexedDBDexie.js库的问题,它们用于恢复和备份数据库以及它们的性能改进。假设我们至少有一个2 GB的数据库(用于离线地图数据),他们有一个( Key,value)结构,Key可以是一个字符串,value可以是blob (图像或二进制矢量数据)。因此,在我的场景中,用户选择一个数据库,我的web应用程序应该开始下载该数据库以供脱机访问。那么,您认为在这种情况下,哪种方法能给我带来最好的性能?因为我必须下载备份并恢复它们,对于2 2GB和几百万条记录来说,这可能是一个性能挑战。我以前对sqlite数据库做过类似的事情,但我只需要下载db文件并连接到它。这里,我必须在下载后恢复IndexedDB,这似乎是有问题的。所以我可以把我的问题分成几个子问题:

首先,我怎么才能把这些数据库放在首位?

那么,如何恢复这些备份呢?有什么高性能的方法可以做到这一点吗?

键数据类型(字符串或整数)对IndexedDB的性能有影响吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-08 06:49:46

我不确定你说的“恢复”是什么意思,但我想你的意思是把数据导入IndexedDB?或者,您的意思是IndexedDB是将其放回另一个数据库的备份和“恢复”?

我剩下的回答都基于这样的假设:“恢复”是将数据导入到indexeddb中。

要知道在添加数百万个基于键/值(blob)的行时系统将如何执行,唯一的方法是对其进行测试。我建议您以块的形式导入行,每个块大约1000行,并为每个导入的块显示进度条。使用bulkAdd()或bulkPut()方法导入每个块。请确保不要在单个事务中完成整个导入,因为这可能会使系统资源匮乏并阻塞indexeddb太长时间。但是通过使用批量方法,每个块至少会使用一个事务(这也很重要--每1000个记录一个事务就可以了--但是如果您对此进行了测试,请尝试不同的块大小以找到最佳速度!)。

也不知道用户在等待时间方面可以期待什么。当用户可以在线模式使用你的应用程序时,它可以在后台执行吗?如果是这样的话,与用户必须等待整个数据导入相比,用户可能会接受更长的导入时间。

您还需要查看StorageManager API并向用户请求存储大量持久数据的权限。你也可以在in dexie docs上阅读关于它的页面。

您可能需要一个后台工作人员来获取数据并执行批量操作-创建一个执行此工作的服务工作人员。使用response.blob()并将其传递给dexie-export-import。您还可以尝试使用ReadableStream api下载数据块。让工作人员执行此下载和导入将执行得更快,并且在导入时不会影响应用程序性能。

Dexie-export-import做的几乎就是我在这里建议的-将块中的行导入到索引数据库中,但是如果使用它,您需要让您的服务端点发送与dexie-export-import兼容的JSON,其中blobs是Baset64编码的。但是,由于您的数据只是键和blobs,因此您可以使用自己的二进制格式并自己执行bulkAdd(),而无需使用此附加组件。

关于你的最后一个问题:据我所知,使用数字或字符串作为键没有太大的区别。长字符串可能会更慢,但短字符串的性能可能与数字相同(如果这不是真的,请纠正我!)。你需要测试才能真正知道。

如果你将对此进行一些测试,请让我知道你的结果是什么;)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66500333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档