在HDD上存储大哈希

时间:2014-07-31 23:10:11

标签: c linux storage hashtable

我正在尝试在硬盘驱动器上存储大小约为80Gb的简单大型哈希表(64位密钥,64位值)。如果我想获得最佳性能,最有效的方法是什么?

查找的键是完全随机的,我必须每隔10ms查找一次?是否有一个抽象可用作C / Linux库,它可以将密钥映射/散列到HDD的逻辑块地址,以便访问速度更快?

请给出一些指导。

3 个答案:

答案 0 :(得分:1)

您可以使用内存映射文件(mmap),然后按照每次查找只读一页的方式对数据进行排序。这可以通过将所有键排序在文件中,然后具有保存每页的第一个键的内存索引来完成。

答案 1 :(得分:0)

依靠文件系统来完成工作,并使用哈希来形成文件系统路径&文件名。例如,在64位时,假设您的密钥(16个十六进制字符)是

5a5bf28dcd794499

将该哈希的值存储在文件\ 5a \ 5b \ f2 \ 8d \ cd \ 79 \ 44 \ 99.txt

此方案仅加载每个子目录,最多包含256个文件夹/文件。 Git会这样做,但只会深入一个目录,可能(合理地)假设您不会将数十亿个文件提交到您的git商店。

答案 2 :(得分:0)

一些一般性指导原则:

  • 使用线性探测的开放式寻址来解决冲突。这应该导致每次查询最多只有一次HDD访问。
  • 在64位系统上,尝试mmap文件以获得更好的缓存性能。
  • 创建单独的分区并通过/dev/sd??直接访问它可能会有所帮助。
相关问题