经常随机访问大型数组

时间:2013-06-20 09:49:08

标签: c memory-management hash large-data

我必须实现4个哈希表。哈希表的大小将非常大〜每个1 GB。哈希值将是访问数据的地址。现在,由于哈希值将随机分布,我必须随机插入和读取哈希表中的数据。实现这种设计的最佳方法是什么?我不能在RAM中使用数组,因为它会导致溢出。我会因使用mmap而受益吗?或任何其他设计方案。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

Berkeley DB支持磁盘哈希表。

答案 1 :(得分:0)

由于你说哈希表不能适合RAM,我想把这些hash tables以文件的形式存储在hard disk上,其中每个值都可以存储在不同的行中或以delimiter分隔的方式存储。

每当你想要更新文件中的值时,我建议你不要读取整个文件并更新一个相当慢的值,而是可以存储一些关于每个值的确切位置的信息。该文件,只有seek到该位置并更新它。关于mmap,您仍然可以选择它,因为它在将文件带入内存时执行demand paging。但我想这不会比一次性seek and write更快,而不是每次出现page-fault时都会带来部分文件。