优化磁盘数据结构,以最少的随机访问进行搜索

问题描述 投票:0回答:1

我有一个巨大的文件(~16TB),其中包含映射到 8 字节值的 8 字节键的列表。 (2^40 对,每对 16 字节)。

我现在想优化该文件,以便我可以有效地搜索它。我目前已对文件进行排序并对其执行二进制搜索。这在 30 次读取内完成,但这些读取高度分布在文件周围,尤其是在开始时。

我知道我可以将 10 步后剩下的整个二分搜索分区加载到 16GB 内存中,并在那里继续搜索。但是,我的可用内存量可以忽略不计,所以这不是一个选择。

有没有一种方法可以安排磁盘上的数据,以便搜索文件所需的访问从一开始就紧密相连?这将允许我加载需要读入内存的整个“范围”的值,以减少

read
调用的总数,并减少随机访问的数量。

在初始构建之后,文件永远不会改变,因此插入和删除是不相关的,并且构建任何类型的索引都允许花费很长时间。此外,密钥(大致)均匀分布在 2^64 空间中。

algorithm sorting optimization search binary-search
1个回答
0
投票

鉴于您已经对文件进行了排序,我认为构建一个简单的索引(仅包含主文件中每个第 1024 个键的列表)会很有用。首先对此索引进行二分搜索,然后这将告诉您需要查看主文件的哪一部分,然后您可以在那里恢复搜索。索引将为 256Mb,因此它应该适合主内存。

© www.soinside.com 2019 - 2024. All rights reserved.