哈希映射空间和性能问题
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)。有些提供交易支持,但我不确定您是否需要它。尽管如此,内存中的哈希映射更快。
【讨论】:
以上是关于哈希映射空间和性能问题的主要内容,如果未能解决你的问题,请参考以下文章