相关数据结构

时间:2011-11-16 20:03:34

标签: data-structures key-value

我有500万个键值对。请建议用于存储如此庞大数据的相关数据结构。如果我的数据将来可以扩展到10亿个键值对怎么办?请建议使用Java中的数据结构来容纳这些数据。

4 个答案:

答案 0 :(得分:4)

Hash tables 支持最有效的搜索方式之一。

答案 1 :(得分:1)

您可能想要使用TreeMap。要回答关于在内存中执行此操作的问题,它不能同时在内存中(至少在2011年的桌面上使用今天的标准技术),您希望在数据中进行分块。由于信息已经使用树形图进行排序,因此您可以使用二进制排序或其中一个变体有效地确定树中的位置。 Trove不会修复与JVM设置有关的内存不足异常。

答案 2 :(得分:1)

任何数据结构都可以存储大量信息,但要知道您需要使用哪种信息,您必须考虑如何添加,删除和访问信息。您可能还必须考虑信息是否需要保留在内存中,或者是否只接受内存中最近/最常使用的数据部分。

键值对意味着Map s,它们通常是键值对的集合。但是,有很多方法可以实现Map,从一个简单的数组(需要连续的键,所有整数)到B-Trees的键,以及对它们的值的相关引用。

在不知道程序的运行特性应该是什么的情况下,无法知道算法或数据结构对于数据集大小是否“足够好”。

按字母顺序排列完整列表,键值对的有序列表最快。使用可用的完整密钥进行搜索,HashMap(或基于哈希的算法)将为您提供良好的服务。使用可以部分匹配密钥的模式进行搜索,可能是为了便于搜索而订购的密钥树更好。简而言之,除了预期的数据集大小外,它还取决于数据的使用方式。

答案 3 :(得分:0)

所有这些数据都需要在内存中?如果答案是否定的,您可以使用数据库并通过密钥索引数据。

如果上述问题的答案是肯定的:您打算存储哪种对象?它们可以表示为原始数据类型吗?我建议您查看Trove库中实现的高速集合。