Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

DBMS を実装しながら学ぶ/cybozulabs-youth10-yamamoto

Cybozu
March 31, 2021

DBMS を実装しながら学ぶ/cybozulabs-youth10-yamamoto

Cybozu

March 31, 2021
Tweet

More Decks by Cybozu

Other Decks in Technology

Transcript

  1. 活動内容 ・RDBMS(Relational Database Management System) の学習 ・『Database Design and Implementation』で紹介され

    ているJavaのプログラムを参考にC言語でRDBMSを 実装 Database Design and Implementation ( http://www.cs.bc.edu/~sciore/simpledb/ ) 3
  2. プログラムの構成 File Manager : ファイル入出力を行う Buffer Manager : Buffer Pool(メモリ内で持つデータの集合)の

    管理を行う Log Manager : Logの書き込みを行う Transaction Manager ◦ Recovery Manager : Logの読み書きを行う。また、Logを用いて クラッシュリカバリを行う ◦ (Concurrency Manager : トランザクションの同時実行制御を行 う) Table Manager : 登録されるテーブルとフィールドの情報の管 理を行う Table Iterator : システムのファイルに保存されるTableの情報 に対し、参照・変更・追加・削除 File Manager Buffer Manager Log Manager Transaction Manager Table Manager / Table Iterator ユーザ テーブルに対する処理 トランザクションの 開始・終了 4
  3. 実装したLoggingの手法 Undo Logging : リカバリ時に、未完了のトランザクションのUndoのみを行うLoggingの手法 ・値の変更を行う際のディスクへの書き込み順序 1. Log FileにUpdate Logを書き込む

    2. DB本体の値の変更を書き込む 3. Log Fileに変更を行ったトランザクションのCommit Logを書き込む 古い値 Log File DB本体 ・クラッシュ後とその際のリカバリ後のディスク 古い値 DB本体 クラッシュ後 リカバリ後 (ディスクへの書き込みが 無いときにクラッシュする) なにもしない 5
  4. ・クラッシュ後とその際のリカバリ後のディスク(続き) Update Log 古い値 Log File DB本体 古い値 古い値 DB本体

    クラッシュ後 リカバリ後 Undoする Update Log 古い値 新しい値 Log File DB本体 新しい値 古い値 DB本体 Undoする Update Log Commit Log 新しい値 Log File DB本体 新しい値 DB本体 なにもしない (Update Logがディス クに書き込まれた後 にクラッシュする) (新しい値がディスク に書き込まれた後に クラッシュする) (Commit Logがディス クに書き込まれた後 にクラッシュする) 6