我正在尝试在硬盘驱动器上存储大小约为80Gb的简单大型哈希表(64位密钥,64位值)。如果我想获得最佳性能,最有效的方法是什么?
查找的键是完全随机的,我必须每隔10ms查找一次?是否有一个抽象可用作C / Linux库,它可以将密钥映射/散列到HDD的逻辑块地址,以便访问速度更快?
请给出一些指导。
答案 0 :(得分:1)
您可以使用内存映射文件(mmap
),然后按照每次查找只读一页的方式对数据进行排序。这可以通过将所有键排序在文件中,然后具有保存每页的第一个键的内存索引来完成。
答案 1 :(得分:0)
依靠文件系统来完成工作,并使用哈希来形成文件系统路径&文件名。例如,在64位时,假设您的密钥(16个十六进制字符)是
5a5bf28dcd794499
将该哈希的值存储在文件\ 5a \ 5b \ f2 \ 8d \ cd \ 79 \ 44 \ 99.txt
中此方案仅加载每个子目录,最多包含256个文件夹/文件。 Git会这样做,但只会深入一个目录,可能(合理地)假设您不会将数十亿个文件提交到您的git商店。
答案 2 :(得分:0)
一些一般性指导原则:
mmap
文件以获得更好的缓存性能。/dev/sd??
直接访问它可能会有所帮助。