【发布时间】:2013-04-26 12:21:02
【问题描述】:
好吧,解释一下问题......
我有:
一个包含数百万个条目的 Big DB 表(每个条目可能有“n”个列)。
概念:
我想向 Web 界面显示两个列表(例如“可用”和“已选择”)。 当用户将条目从一个列表移动到另一个列表时,我需要将条目的唯一 ID(字符串类型)临时存储到我的服务器中名为“selected”的“未知数据结构”中,并且当用户最终单击提交时我会将此列表进一步传递给其他应用程序。
在数据库中完成排序和过滤,然后将全部数据量(以块为单位)加载回java,然后检查每个条目是否被选中,并将其添加到将要被选中的列表中显示在网络界面中。
for each entry{
if(selected.contains(currentEntry.ID)){
selectedList.add(currentEntry)
}else{
availableList.add(currentEntry)
}
}
selectedList 和 availableList 列表将仅包含数百个条目(向用户显示的条目,大约是一个最多包含 100-200 个条目的页面),因此“条目”类型的列表足够好并且可以保存我的排序。
问题:
“选定”的结构必须包含数千个 id(有时可能达到数百万个)。
需求:
我需要快速访问以查找 id 是否存在(structure.contains(id)),所以我肯定会使用哈希结构。
我需要使用最少内存资源的结构。
不需要的:
不需要删除时的良好性能。不需要排序。
【问题讨论】:
-
我认为最好设置。
-
如果它必须包含这么多条目,您可能应该将其转储到数据库表中,并带有额外的 id(例如某种类型的 session-id)
-
经过大量测试后,我意识到所有 Hash 结构(HashSet、LinkedHashMap 等)的性能大致相同。 TreeSet 是我测试过的性能较差的结构,需要最多的时间来查找和元素。当我超过 200.000 个元素时(当然这与硬件等有关),我开始面临测试系统溢出的问题。我可能会使用数据库表来保存选定的 id 并使用连接直接从数据库中获取数据的解决方案(无论我使用数据库进行排序和过滤的方式)谢谢您的帮助。
标签: java data-structures