地图中有3亿个项目

时间:2013-01-26 16:29:13

标签: java hash map hashmap

  1. 如果每个人都保证有一个唯一的密钥(生成和 由外部键控系统强制执行的Map实现 适合我吗?假设必须优化它 仅限并发查找(数据在期间初始化一次) 应用程序启动)。
  2. 这3亿个唯一键是否有正面或负面 对撞击/碰撞的影响?
  3. 还有其他建议吗?
  4. 我的地图看起来像这样

    Map<String, <boolean, boolean, boolean, boolean>>
    

4 个答案:

答案 0 :(得分:3)

我不会使用地图,这需要很多内存。特别是在你的情况下。 将值存储在一个数据数组中,并将键存储在已排序的索引数组中。 在排序数组中,您使用binSearch在data []中找到键的位置。

棘手的部分是构建阵列,而不会耗尽内存。

你不需要考虑concurreny因为你只读取数据

进一步尝试避免使用String作为键。尝试将它们转换为长 此解决方案的优点:搜索时间不超过log n。即使在最糟糕的情况下,当密钥出现哈希码时也会出现问题

答案 1 :(得分:3)

其他建议?你敢打赌。

使用正确的键值存储,Redis是第一个想到的选项。当然,这是一个独立的过程和依赖,但在适当的系统设计方面,你将赢得大量的时间。

我已经多次尝试过,而且总是被证明是错误的。

答案 2 :(得分:0)

在我看来,您可以简单地使用TreeMap,因为由于其排序结构,它会为您提供O(log(n))数据搜索。此外,它是合格的方法,因为正如您所说,所有数据都将在启动时加载。

答案 3 :(得分:0)

如果你需要将所有内容保存在内存中,那么你需要使用一些库来使用这些元素,例如Huge collections。最重要的是,如果写入的数量很大,那么你还必须考虑一些更复杂的解决方案,如Non-blocking hash map