我有一个基于三个级别查询的对象存储:组合ID,模块ID和项目ID。投资组合由多个模块组成,模块由多个项目组成。
我将三个id连接成一个内联键路径,例如第一个组合中第二个模块的第三个项目的1.2.3。我创建了投资组合ID和模块ID的串联索引,例如“1.2”,以便查询特定投资组合下的整个模块。我还将投资组合ID作为一个索引来打开整个投资组合的光标。
不连接和仅设置[投资组合ID,模块ID,项目ID]的关键路径会有什么优势或劣势?查询和游标会更快地运行吗?
我现在发现连接的唯一缺点是项目没有按数字排序,因为它们是字符串。因此,1.2.11在1.2.3之前出现。除此之外,由于这些不是用户输入的值,而只是保存数据时由程序创建的ID,因此无论如何都可以轻松生成ID。
如果数组用作键路径,那么这只是意味着数据对象中没有单个属性是内联键;从数据库中获取值就像objectStore.get(['1','2','3'])一样简单?
然后可以在[portfolio id,module id]上创建一个索引来代替该连接吗?
此外,数组键路径是否按照数组中列出的属性的顺序排序?那么,这里,投资组合,模块,项目?
我知道有几个问题可以解决这个问题,但是在这个问题上他们处于一个有点过头的环境中,我想确保我先了解基本概念。
谢谢。
更新
重新阅读问题In IndexedDB, is there a way to make a sorted compound query?的答案后,特别是对数组进行排序的短路,在我的特定场景中看起来并不值得使用,尽管我认为数组键路径可以用于因为我永远不会选择一系列模块,例如在二维索引上使用有界光标作为['2',5']到['2','8']。
如果数组键路径没有以某种方式提高效率,从我的新手角度来看,它似乎只是打开一个可能并不总是有用的区域。通过它获得的任何东西都可以通过额外的索引或其他一些更容易理解的小型工作来完成。
但是,当然,我的有限理解可能导致我此时得出错误的结论。