ちょっと詳しいNurseryの仕組み その0
書きかけです。後で編集します。
この記事は、はじめてのNursery その1から始まる一連の記事よりも内部構造に焦点を当てようと思います。
NUNurseryのサブクラス
NUNurseryのサブクラスは大きく分けて、2種類あります。
NUMainBranchNursery
実際にNurseryのデータベースファイル(単一のファイルのみで構成される)を保持します。
インスタンス変数objectTableには、NUObjectTableのインスタンスを保持し、それは構造体NUBellBall(永続的なOOP(Object-oriented pointer)とgradeのペア(どちらもNUUInt64(符号なし64ビット整数))からなる)をキーとして、永続化されたオブジェクトのデータベースファイル内の位置を記録します。
インスタンス変数reversedObjectTableには、NUReversedObjectTableのインスタンスを保持し、objectTableとは逆にデータベースファイル内のオブジェクトの位置からをキーとして、構造体NUBellBallを記録します。
この二つのクラスはNUOpaqueBPlusTreeのサブクラスであり、これは名前の通りキーとそれに対応する値をB+木で管理します。
NUBranchNursery
実際にはNurseryのデータベースファイルを保持しません。それと対応する別プロセス(同一ホストまたは別ホスト)にある、一つのデータベースを表すNUMainBranchNurseryにアクセスするためのものです。NUMainBranchNurseryとそれに対応するNUBranchNurseryを同一プロセスで使用することも出来ますが、二つのNursery間の通信はソケットを使用して行われるため、効率は劣ります。