我有一组散列(MD5 的前 64 位,所以它们的分布非常随机),我希望能够查看一个新的散列是否在一个集合中,并将其添加到一个集合中。
集合不是太大,最大的元素有几百万,但有数百个集合,所以我无法将它们全部保存在内存中。
到目前为止我的一些想法:
- 我尝试将其全部保存在 sqlite 表中,但是一旦它无法将所有内容都放入内存中,它就会变得非常慢。
- 布隆过滤器听起来像它们会有非常高的错误率。我不介意微小的错误率(64 位哈希已经在 4G 元素集上产生了 1 次冲突),但是像 1% 这样的错误率太高了。
- 在文件中保留带有间隙的散列排序列表,并在我没有足够的间隙时调整大小。哈希是均匀分布的,所以即使是这样非常简单的方案也应该可以工作。
我错过了一些非常明显的东西吗?任何提示如何实现良好的基于磁盘的哈希表?