さまざまなファイル形式でシークを実装する方法と、効率的なシークを可能にするために大量のデータを含むファイルを作成するための良い方法は何でしょうか。私が検討したいくつかの方法は、同じサイズのパケットを使用することでした。これにより、各データチャンクがどのようなものかがわかっているため、すばやくスキップできます。また、ファイルが読み込まれるたびに事前インデックスを作成することも考えられます。
2 に答える
これは、データの種類と、何を求めているかに完全に依存します。
レコードインデックスで検索しようとしている場合は、必ず確認してください。固定サイズのフィールドを使用すると作業が楽になりますが、スペースが無駄になります。他の方法で検索しようとしている場合は、key:locationのインデックスを保持するとうまくいきます。ファイルを順番に作成できるようにする場合は、インデックスを最後に配置しますが、ファイルの最初の4バイト(マジックナンバーなどの後)を保持して、インデックス自体の場所を表すことができます(それらの最初の4バイトを書き換えます)。
可変長ブロックで一種のバイナリチョップを実行できるようにしたい場合は、ブロックの開始を検出するための合理的に効率的な方法があると役立ちます-アレクサンダーが述べたように、次/前のポインターがある場合と同様です。
基本的にはメタデータがすべてですが、実際には、適切な種類のメタデータは、データの種類と、そもそもシークするためのユースケースによって異なります。
各チャンクに次のチャンクへのサイズオフセットを与えることは一般的であり、未知のデータの高速スキップを可能にします。もう1つの方法は、ファイルの先頭にあるインデックスチャンクで、ファイル内のすべてのチャンクのテーブルとそのオフセットを格納します。プログラムは、インデックスチャンクをメモリに読み込むだけです。