我有非常大的不可变数组存储在磁盘文件中。
它是二进制文件,所有记录大小相同,因此我可以直接查找和访问任何记录。这是过于简单化,但是很好的例子:
struct Record{
char key[8];
char value[16];
uint16_t some_data;
// ...
} __attribute__((__packed__));
为了找到一个元素,目前我在那里进行二进制搜索,但是对于大型数组,它需要20次或更多次查找,例如磁盘寻求。
有没有简单明了的方法可以通过创建一些额外的索引文件来加速这个find_element函数?
我想到了BTrees / B + Trees,但我不确定如何轻松地将数组转换为BTree。
我也想过级别有序的数组,但是我不确定它是否会产生如此大的影响,即使前几次查找也会非常"关闭"每个人都是。
这"正常"阵列:
1,2,3,4,5,6,7
看起来像这样订购水平:
4,2,6,1,3,5,7
我正在使用C ++。