挿入、取得、更新、削除に最適化された大規模なブロック ベースのデバイス (機械式ハード ドライブなど) でうまく機能するアルゴリズム/データ構造を探しています。 ID のフィールドは可変長です。
B-Tree は一般的に引用される構造のようですが、主に固定長レコード用です。また、挿入や削除よりも取得や更新の方がはるかに多いと予想しています。B ツリーの O(log m) ルックアップを取り除くことはできますか?
結合されたシステムであることに非常に満足しています。たとえば、ISAM は B ツリーと線形ファイル ストレージを結合し、アプローチとして可変長レコードを操作できるように見えます。もっと良いものはありますか?
いくつかのさらなる制約:
1) ID は疎である可能性がありますが、線形の数字のブロックにすることができますが、範囲は広い (64 ビット)
2) DBMS を使用したくありません。特定の問題に対するパフォーマンスはあまり良くありません。完全な DBMS が使用する操作は必要ありません。検索も必要ありません。簡単に微調整して最適化できるものが必要です。それをアカデミックな好奇心と呼んでください。MySQL よりもパフォーマンスが優れている場合は、それを使用しますが、より速く実行する必要があります。
3) データセットはメモリに収まりきらないサイズですが、インデックスはキーやオフセットのように単純な場合はメモリに収まる可能性があります。私は確かに、ストレージ内に 10 億以上のエンティティを見ています。
4) 理想的には、レコードが削除されたときにスペースを回復する必要があります。それは圧縮によるものかもしれませんが、より良い方法があるかどうかを知りたいです(たとえば、Bツリーはスペースを簡単に回復します)。