オンディスク ポインタはoffsets
、ファイルの先頭からのものです。
あなたがアドレスnkey
を指している場合、それはそれを意味します
- データファイルを開く
- nバイトを読み取りますが、それらを破棄します(または単にそれらを飛び越えます。これはシークと呼ばれます。方法については以下を参照してください)。
- 興味のあるデータの読み取りを開始します。
今、最適化として、
- プログラムの開始時など、データファイルはすでに開いている可能性があります。もちろん、部分的にメモリにキャッシュすることもできます。
- バイトを読み取って破棄するのではなく、ファイル内の特定の場所に移動するようフレームワークに具体的に指示できます。ほとんどの言語にはその機能があります。すべての OS が行います。これをシークと呼びます。のようなメソッドを呼び出します
file.seek(1024)
。ジャンプを実行するには、OS は、探しているデータがディスク内のどのポイントにあるかを認識している必要があります。これにはさらにルックアップとディスクの移動が必要ですが、それはすべて OS によって行われます。
- データの読み取りを開始できますが、いつ停止するかを知るには、固定幅のレコードを使用するか、レコードの最初の 4 バイトにレコード長を入れることができます。これにより
headers
、複雑さとともに成長するメタデータが作成されます。
key
興味深いのは、各ポイントにleft
関連付けられたポインターright
nodes
がデータを格納する場所がないことです。したがって、教科書の例では
struct node {
int key; //this generally is the primary key of the table
node left;
node right;
long offsetOfDataInDataFile; // <----------- we need to add this line.
}
node
この方法では、最初に で を見つけますtree
。次に、 を見つけますkey
。そこでoffset
実際のデータを取得します。データ ファイル内の場所に移動し、内容を読み取ります。
テーブルに複数のインデックスがある場合、またはテーブル内の各インデックスの場合、そのようなツリーを 1 つ維持する必要があります。そのkey
ツリーの は、インデックス付けされた列の内容になります。