【发布时间】:2016-11-17 18:05:41
【问题描述】:
我正在考虑如何让我的项目中的某个操作更高效。当前实现中的操作从对象存储中加载所有对象,遍历数组并测试对象是否缺少属性或属性是否未定义,将此类对象的集合收集到第二个数组中,然后删除所有这些对象。
我已经在使用 getAll 了,因为它明显优于光标迭代。
我同时调用单个删除请求,因此没有加快速度,但 indexedDB api 不断发展以支持对缺少值的非索引非 keypath 道具进行批量删除。
问题是当属性不在对象存储的键路径中时,如果没有将每个对象完全加载到内存中,我无法检查该属性。在某些情况下,对象相当大。有时每个对象的其中一个属性非常大(本质上是一个 html 文档的字符串)。
我不能使用索引,因为对象中不存在或没有值的属性不会出现在索引中。
有没有办法避免将此类对象加载到内存中?
我考虑过分区,并使用两个对象存储,一个用于可查询的道具,一个用于完整数据。但这会演变为每次读取都必须执行额外的请求。我的应用比这个偶尔的批量删除操作做了更多的阅读。
我曾考虑为每个对象存储一个额外的属性,该属性始终具有像 myObject.doesOtherPropertyHaveValue 这样包含 0/1 的值,因此是可索引的,但这似乎也不是很好。当然我可以只通过这个索引进行查询并使用 getAllKeys 并解决问题。但是,现在每个 add/put 都必须维护这个函数依赖。
感谢任何建议。
【问题讨论】:
标签: javascript indexeddb