我试图了解使用IndexDB。我有一个SQL数据库,我通过REST访问,我计划使用IndexDB提供一些本地缓存。
我的SQL结构使用大量(和可变)数量的表,每个表存储特定传感器值的数据数组(时间顺序和值)。理想情况下,我会假设我为MySQL的每个表创建一个新的对象存储库。但是,似乎只能在打开数据库时创建一个对象存储,这有点痛苦。
所以,我看到了很多选择 - :
我可以使用单个对象存储并添加两个索引 - 一个用于时间, 和一个传感器。我有点担心这可能有 性能问题,但我不确定数据是如何存储在 罩。
我可能会以某种方式检测到一个新传感器,然后打开 具有新版本号的数据库。这只是感觉有点不对劲 我
我可以为每个传感器使用不同的数据库, 但是我已经读到某个地方,不建议使用多个 数据库(虽然不清楚为什么因为这可能是 最简单的解决方案)。
我欢迎人们对这类数据的最佳结构有任何想法,这将提供良好的性能。
答案 0 :(得分:1)
如果您的数据集是独立的,例如您不需要组合来自多个传感器的结果,我建议您将它们分成不同的表和/或不同的数据库。不同的数据库选项更便于删除数据。
IndexedDB数据库对单个数据库性能的限制是针对超过50K的数据,具体取决于浏览器和硬件。我有一个可以测量速度的couple tests,只需调整插入的对象大小即可测试用例。
如果每个传感器(对象存储/数据库)的数据少于10K,则不会遇到大的性能问题。插入批量数据时的一个常见错误是每个插入的单独事务 - 这完全没必要,因为您可以使用一个事务存储10K数据。如果您正在使用更大的数据集,则可以将插入分成几个事务,因此您不会阻止读取该数据库。
此外,对于您在IndexeDB中执行的每个事务,您需要打开一个连接,有些人使用该方法保持一个连接存活并重用它,我更喜欢关闭并为每个事务打开一个单独的连接。
另外,为了更快地访问,您可以将所有数据库信息存储到本地存储中,这样您就可以跟踪您拥有的数据库数量以及每个数据库的描述。
此外,您可以查看此similar question