【发布时间】:2010-02-27 08:47:59
【问题描述】:
我需要存储一个大哈希集,最多可以包含大约 2 亿个 40 位值。将其存储为 2 亿个 64 位值是可以接受的(尽管有 2 亿个 * 16 位丢失)。
要求是:
很小的内存占用(磁盘空间不是问题,内存是问题)
快速的
contains(long l)和add(long l)方法(比SQL 快得多)嵌入式
免费且没有令人讨厌的许可(没有 Berkeley DB)。 LGPL 很好。
没有误报也没有误报,所以像基于磁盘的布隆过滤器之类的东西不是我所追求的
SQL 不是我在这里所追求的。
因为我真的认为我更喜欢这样的快速(请注意该解决方案比 SQL 解决方案快得多):
Google 有这样的 Java API 吗?
我只使用“键”的基于磁盘的快速键/值对实现是否可行?
还是别的什么?
我宁愿不重新发明轮毂。
【问题讨论】:
-
2亿大约是28位。
-
@Thorbjorn:我说的是存储 2 亿个值,每个值都是 40 位。我从来没有谈论过存储可能包含高达 2 亿价值的价值 :)
-
出于好奇,你用SQLite等试过了吗?在您链接的问题中,我没有看到任何证据表明 OP 关闭了日记功能,甚至创建了索引...
-
@Steven Huwig:不,我指定 SQL 不是我所追求的……当我在谈论某件事时 fast 我想到了更多类似 Peter 的答案Lawrey 提出 :) 您是否真的认为与花时间调整 SQLite 相关的答案会接近已接受的答案,具体说明它正在绕圈运行 SQL?我们不关心关系属性,也不关心 ACID 保证等。对于这样简单的问题,SQL 是一个 massive 过度膨胀。换句话说,是一把金锤。
-
@Steven Huwig:我们正在使用 Java 进行高性能计算(实际上,Java 擅长于此)。游戏的名字是优化。我问了一个非常具体的,不太粗鲁的问题,并明确表示 SQL 不是我所追求的。我不喜欢“SQL”和“XML”类型的答案。我正在寻找像彼得劳里那样的答案。
标签: java hashset disk-based