沿三维过滤时快速访问项目子集

时间:2015-06-15 17:16:11

标签: multidimensional-array data-structures filter

这不是一个编码问题,而是一个逻辑问题。我的任务是根据三个下拉菜单中的选项显示文档列表,每个文档属性一个。属性是客户端,文档类型和文档类别。因为所有三个的默认视图都是“All”,所以我最初将从数据库中获取所有文档。

我想将该列表存储在本地数据结构中,以便每次用户根据下拉选项过滤结果时,我都可以快速提取结果并显示它们。由于可能确实存在数以千计的客户端和文档类别,因此三维数组会变得过于繁琐。关于如何最好地实现这一点的任何想法?

谢谢!

1 个答案:

答案 0 :(得分:0)

一种选择是使用embedded (in-memory) database,例如H2,HSQLDB或SQLite - 数据库负责索引,因为它是内存数据库,您不需要重复磁盘访问的成本。

第二个选项是为每个属性维护Map<key, Set<data>>,然后取三个检索到的集合(mapA.get("A").intersection(mapB.get("B").intersection(mapC.get("C"))))的集合交集,这将在O(n)时间内运行n是三个检索集的总大小。

最后,有一些多维索引数据结构,例如k-d trees,可用于执行范围搜索。它们并不包含在大多数标准语言库中,但是有几种语言可以通过github或其他地方提供开源实现。

如果只有三个属性被索引,我的偏好是使用Map<key, Set<data>>,如果索引的属性超过六个或七个,则使用嵌入式数据库或k-d树。