データベース管理システム(6)

ファイル内部形式。

ファイルの最初の512バイトは、ファイルの情報を管理する領域に使おう。この領域を、「ファイル管理ブロック」と名付けよう。ファイル管理ブロックが管理する情報は、「格納データ数」、「未使用領域の位置」、などが考えられる。「未使用領域の位置」とは、insert() がデータをファイルに書き込むときに利用する情報である。計算不要でその位置に書き込み、書き込んだサイズを加算する。

次の512バイトは、「データ管理ブロック」と名付ける領域としよう。データとファイル管理ブロックの間に管理領域を1つ、はさむことにする。データ管理ブロックでは、データ1件1件の「データ格納位置」と「使用領域サイズ」が管理されている。この2情報をまとめて、「データエントリ情報」と名付けよう。「データ格納位置」、「使用領域サイズ」はそれぞれ、4バイト使用するとして、「データエントリ情報」は8バイト、つまり、データ管理ブロックには、64件のデータエントリ情報が格納される。

さて、65件以上のデータのデータエントリ情報はどうするか。新たにデータ管理ブロックを割り当てて、あふれたデータエントリ情報を格納する。新たに割り当てられるデータ管理ブロックは、512バイト境界に割り付けること。さて、複数できるデータ管理ブロックの「格納位置」はどう管理するか。これはファイル管理ブロックで管理することにする。そのファイル管理ブロックがいっぱいになったら、どうするか。これは、新たに第2のファイル管理ブロックを割り当てて、そこで管理することにする。ファイル管理ブロック同士は、チェーン形式で管理する。

さて、「削除情報」はどこに持つか。これは、データエントリ情報以外ありえない。とりあえず単純に「使用領域サイズ」3バイト、「削除情報」1バイトとしておこう。すると、insert() のデータ長に制限がついて、2の23乗バイトまで、となる。8MB。

そろそろコーディングできるかな。