javascript - IndexedDB 的索引性能:选择和插入
问题描述
问题一:
Q1.1
IndexedDB(Javascript 版本)做选择或插入的复杂性是多少?索引是否被“索引”?它是排序的还是散列的?例如,当我们使用 IDBKeyRange.only 时,它需要 O(1)、O(log(n)) 还是 O(n) 时间?
Q1.2
IDBKeyRange.bound 怎么样?它是先对索引进行排序然后再进行选择吗?
Q1.3
IDBObjectStore.add() 的性能如何?
Q1.4
对于index.openCursor(),索引是提前排序的吗?
问题2:
我们正在使用 IDBObjectStore.createIndex() 创建索引。如果问题 1 的答案是肯定的(这意味着索引被索引),如何创建索引选项索引或不索引?换句话说,我选择了一些要排序或散列的索引,而另一些则不。我们有这个选择吗?
解决方案
该规范不强制要求性能特征。假设使用B-tree实现是合理的,因此操作 O(log n),但您需要在浏览器中测试实现。如果特定浏览器在常见操作上表现不佳,则可能值得将其报告为问题。
Q1.1 IndexedDB(Javascript版本)做select或insert的复杂度是多少?索引是否被“索引”?它是排序的还是散列的?
索引已排序。https://w3c.github.io/IndexedDB/#index-construct
Q1.2 IDBKeyRange.bound 怎么样?它是先对索引进行排序然后再进行选择吗?
查找是针对排序索引的。
Q1.3 IDBObjectStore.add() 的性能如何?
假设 B 树,O(log n)
Q1.4 对于index.openCursor(),索引是否提前排序?
是的。
尽管从技术上讲,实现可以懒惰地创建索引——规范不需要特定的性能或实现,只是结果是无法区分的。
问题2:...如何创建索引选项索引或不索引?换句话说,我选择了一些要排序或散列的索引,而另一些则不。我们有这个选择吗?
否 - API 不公开这样的选项。
推荐阅读
- javascript - 将数据保存到状态时遇到问题
- c - 在 (c) 文件中读取包含不同结构的二进制文件,这些结构具有指针作为成员
- python - Pytorch:AttributeError:'function'对象没有属性'copy'
- ios - ITMS-90078:缺少推送通知权利
- javascript - NPM 网站 - 发布了一个新包但无法查看其页面?
- matlab - 对于时间序列图,如何将 x 轴设置为没有周末的日历时间
- ios - 循环遍历 NSArray 并复制到新的 swift Array
- mysql - MYSQL Workbench 不断为“id”列导入非法字符
- npm - npm install 时总是失败
- javascript - 反应路由器没有正确路由