哈希映射空间和性能问题

Posted

技术标签:

【中文标题】哈希映射空间和性能问题【英文标题】:Issue with Hash Map Space and Performance 【发布时间】:2012-03-30 14:08:23 【问题描述】:

我必须在我的 HashMultiMap 中存储超过 1 亿个键值(键可以有多个值)。谁能帮我存储和搜索哪个更快:

1) Berkeley DB

2) Tokyo Cabinet

3)H2

4) EhCache

5) 或其他

还有一点,那些性能是否与内存中的哈希映射大致相同?一点指导会更有帮助。谢谢。

注意:有关其中任何一项的信息也很有帮助。

【问题讨论】:

您的键/值大小是多少?它们有什么结构? @JeffFoster,键/值是整数。 @JeffFoster,更具体地说是***.com/questions/9930347/multimap-space-issue-guava 您的整数是否随机分布在 32 位空间中?我不明白为什么你不能将它全部存储在内存中(使用 MultiMap 的手写未装箱实现)。或者你可以试试 Redis。 @JeffFoster,是的,已分发。我必须为我的 JVM (2GB) 提供非常有限的内存。如果我要存储 1 亿个 int,则需要 3 GB 以上。 【参考方案1】:

我推荐Redis。它比其他存储更多的数据结构(例如,它支持地图和集合)并且需要很少的努力就可以开始使用。太不可思议了 使用简单,有一个很棒的Java API。

我将首先查看函数 here,它允许您将键与一组值相关联。

【讨论】:

非常感谢。根据您的经验,Redis 的性能是否与内存中的哈希映射大致相同? 这取决于您的情况。我从来没有遇到过 Redis 的性能问题。最好的建议是拼凑一个原型,然后看看会发生什么。另见redis.io/topics/benchmarks【参考方案2】:

我会看看leveldb,因为它声称是faster than Kyoto Cabinet。其他有趣的库是 Kyoto Cabinet 和 JDBM3。

这些是低级库(不支持关系查询或 SQL)。有些提供交易支持,但我不确定您是否需要它。尽管如此,内存中的哈希映射更快。

【讨论】:

以上是关于哈希映射空间和性能问题的主要内容,如果未能解决你的问题,请参考以下文章

C ++中的哈希表?

JavaScript 哈希映射是如何实现的?

Linux性能之内存篇

腾讯面试:linux内存性能优化总结

腾讯面试:linux内存性能优化总结

哈希和升序索引之间的 Mongodb 性能差异(有啥理由不在无序字段中使用哈希?)