こんにちは。君が今、この「階層型DBMS」という、ITの歴史を築き上げたレジェンド級のアーキテクチャの門を叩こうとしていること、心から歓迎するよ。
現代のデータベースといえば、表形式の「リレーショナル(RDB)」が主流だ。でもね、かつて宇宙開発や巨大な銀行システムを支えたのは、間違いなくこの「階層型」だった。木構造の中にデータの真実が詰まっている。その本質を理解することは、システム設計の「深淵」に触れることと同じなんだ。
今日は、その中でも特に重要で、かつ「現場の匂い」がする GHU/GHN/GHNP(Get Hold Calls) について話そう。これさえ掴めば、君はもう階層型DBMSの心臓部を触れるようになる。
—
1. なぜ「Hold(ロック)」が必要なのか?
まず、身近な例え話をしよう。
君が図書館で、非常に貴重な「一冊しかない歴史書」を書き換えたいとする。
1. 本を棚から探す(読み込み)
2. 内容を修正する(更新)
3. 元の場所に戻す(書き込み)
もし、君がその本を手に取っている最中に、別の誰かが同じページを書き換えようとしたらどうなる? 悲劇だよね。だから、「書き換えるつもりで本を手に取る」時は、他の人が触れないように「確保(Hold)」しておく必要がある。
これが、階層型DBMSにおける「Get Hold」の正体だ。
2. Get Hold Calls の三銃士
階層型DBMSでは、目的のデータ(セグメント)にアクセスする際、単に「読み込む(Get)」だけでなく、「更新・削除の予約席を確保しながら読み込む」命令を使います。
GHU (Get Hold Unique)
- 意味: 「これが欲しい!」とピンポイントで指定して、確保する。
- 例え: 図書館の司書に「『世界史』の第3章を貸して。修正するから誰にも触らせないで」と指名手配するイメージ。
GHN (Get Hold Next)
- 意味: 今いる場所から「次のデータ」を順番に探し、確保する。
- 例え: 本を読んでいる最中に「次のページも修正が必要だな」と、順番にページをめくってロックをかけていくイメージ。
GHNP (Get Hold Next within Parent)
- 意味: 「今の親(カテゴリー)」の中で、次の子データを順番に探し、確保する。
- 例え: 「『世界史』という章の中にある項目だけを順番に修正したい」という時、章を飛び越えないように範囲を限定するイメージ。
—
3. コードの背後で起きていること
もし君がプログラムを書くなら、こんな流れになるはずだ。この「ロック」を意識したコードを見てほしい。
- GHUを使って、特定の顧客(ID: 100)のレコードを確保(Hold)する
CALL ‘DLITCBL’ USING DLI-GHU, PCB-MASK, SEG-IO-AREA, SSA-CUSTOMER.
- — ここで他のユーザーはこのレコードを触れない(排他制御中) —
- データを更新する
MOVE ‘NEW-ADDRESS’ TO CUSTOMER-ADDR.
- 更新を確定(REPL: Replace)する
CALL ‘DLITCBL’ USING DLI-REPL, PCB-MASK, SEG-IO-AREA.
- 処理が完了すればロックが外れる
ポイント:
`GHU` を発行した瞬間、データベース管理システムは「このデータは現在、彼が調理中です」と看板を掲げる。これがあるからこそ、巨大なシステムでもデータの不整合が起きないんだ。
—
4. 先輩からのアドバイス:なぜこれを知るべきか
初心者のうちは、「ただ読み込むだけでいいのでは?」と思うかもしれない。でも、実際の現場では「読み込んだ瞬間に世界が変わる(他人が更新する)」というリスクと常に隣り合わせなんだ。
「Hold」を伴う命令を使うということは、「自分が今、データの整合性に責任を持っている」というプロ意識の表れでもある。
- GHUは、狙いを定めて確実に仕留める時。
- GHNは、全体を巡回してメンテナンスする時。
- GHNPは、親子の関係を守りながら整理する時。
この使い分けができるようになれば、君はもう階層型DBMSの基本をマスターしたと言っても過言じゃない。
—
最後に
階層型DBMSは古い技術かもしれない。でも、その設計思想は、現代のクラウドネイティブなマイクロサービスにおける「分散トランザクション」の考え方と深く繋がっているんだ。
ここを理解した君なら、どんな新しいデータベースを触っても、その本質がすぐに見抜けるはずだよ。
もし何か分からないことがあれば、いつでも聞きに来てほしい。データベースという広大な森を歩くための地図は、いつでもここにあるからね。
さあ、次は実際にコードを動かしてみようか。楽しみだね。
コメント