$30 off During Our Annual Pro Sale. View Details »

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

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

Cybozu
PRO

March 31, 2021
Tweet

More Decks by Cybozu

Other Decks in Technology

Transcript

  1. DBMSを実装しながら学ぶ
    山本祥平
    1

    View Slide

  2. 自己紹介
    ・山本祥平
    ・芝浦工業大学大学 3年
    ・サイボウズ・ラボユース研究生 10期生
    ・セキュリティ・キャンプでデータベースゼミが開講されていたことから、DBMSに興味を持つ
    2

    View Slide

  3. 活動内容
    ・RDBMS(Relational Database Management System)
    の学習
    ・『Database Design and Implementation』で紹介され
    ているJavaのプログラムを参考にC言語でRDBMSを
    実装
    Database Design and Implementation
    ( http://www.cs.bc.edu/~sciore/simpledb/ )
    3

    View Slide

  4. プログラムの構成
    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

    View Slide

  5. 実装したLoggingの手法
    Undo Logging : リカバリ時に、未完了のトランザクションのUndoのみを行うLoggingの手法
    ・値の変更を行う際のディスクへの書き込み順序
    1. Log FileにUpdate Logを書き込む
    2. DB本体の値の変更を書き込む
    3. Log Fileに変更を行ったトランザクションのCommit Logを書き込む
    古い値
    Log File DB本体
    ・クラッシュ後とその際のリカバリ後のディスク
    古い値
    DB本体
    クラッシュ後 リカバリ後
    (ディスクへの書き込みが
    無いときにクラッシュする)
    なにもしない
    5

    View Slide

  6. ・クラッシュ後とその際のリカバリ後のディスク(続き)
    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

    View Slide

  7. 実行結果①
    ・insert
    ・update
    ・delete
    insert
    update
    delete
    insert
    7

    View Slide

  8. 実行例②
    ・rollback
    (変更を加えたトランザクションをcommitではなく、rollbackで終了させると、
    テーブルがそのトランザクション開始前の状態に戻っていることが確認できる)
    8

    View Slide

  9. 実行結果③
    ・リカバリ機能の確認
    (変更を加えたトランザクションをcommitせず終了)
    (DBを起動し直し、commitしていないトランザクションの開始前の
    状態に戻っていることが確認できる)
    9

    View Slide

  10. まとめ
    ・DBMSを学びながら、C言語で実装をした
    ◦ (最終的にできるようになったDBの操作の列挙 update/insert/print table/rollback/commit)
    ・大きなプログラムを実装する上で必要なコードの書き方を知ることができた
    ・これから
    ◦ トランザクションに関わる研究に触れたい
    ◦ 並行性制御(Concurrency Control)を持ったDBを実装したい
    10
    このような貴重な機会を頂きありがとうございました。

    View Slide