我正在寻找一种适用于基于大块的设备(例如机械硬盘驱动器)的算法/数据结构,该结构针对插入、获取、更新和删除进行了优化,其中始终使用数据的 ID 和数据的位置进行搜索任何 ID 的字段都有可变长度。
B-Tree 似乎是一种常用的结构,但主要用于固定长度的记录。我还期望获取和更新比插入和删除要多得多。我可以摆脱 B 树的 O(log m) 查找吗?
我很高兴它是一个组合系统,例如 ISAM 结合了 B-tree 和线性文件存储,看起来它可以使用可变长度记录作为一种方法。有更好的吗?
一些进一步的限制:
1) ID 可能是稀疏的,但它们可以以线性数字块的形式出现 - 但范围很大(64 位)
2) 我不想使用 DBMS,我的特定问题的性能并不是很好。我不需要完整 DBMS 使用的任何操作,也不需要搜索。我需要一些可以轻松调整和优化的东西。称之为学术好奇心,如果它被 MySQL 完成,那么我会使用它,但我必须尝试走得更快。
3)数据集大于内存,但是如果索引像键,偏移量一样简单,它可能很适合内存。我当然正在研究存储中的 10 亿个或更多实体。
4) 理想情况下,删除记录时应恢复空间。这可能是通过压缩,但我很想看看是否有更好的方法(例如,B 树很容易恢复空间)。