Upgrade to Pro — share decks privately, control downloads, hide ads and more …

iOSDC Japan 2026 - Swiftで作って学ぼう!データベース自作入門

iOSDC Japan 2026 - Swiftで作って学ぼう!データベース自作入門

Avatar for kaseken (Kent Kaseda)

kaseken (Kent Kaseda)

September 11, 2026

More Decks by kaseken (Kent Kaseda)

Other Decks in Programming

Transcript

  1. 13

  2. 14

  3. 15

  4. 16

  5. 17

  6. ファイル ページ 0 ページ 1 ページ 2 ページ 3 レコード

    0 レコード 1 レコード 2 レコード 3 23
  7. ファイル ページ 0 ページ 1 ページ 2 ページ 3 レコード

    0 レコード 1 レコード 2 レコード 3 カラム1 (id) カラム2 (name) カラム3 (email) 24
  8. 行指向DB (e.g. MySQL) カラム ① カラム ② カラム ① カラム

    ② 列指向DB (e.g. BigQuery) カラム ① カラム ① カラム ① カラム ① ︙ カラム ① カラム ② カラム ① カラム ② ︙ カラム ② カラム ② カラム ② カラム ② ︙ 27
  9. B+Tree ページ2ください ページャー キャッシュ ページ 0 ページ 1 nil nil

    ページ2ください ファイル ページ 0 ページ 1 ページ 2 ページ 3 32
  10. B+Tree ページ 2 ページャー キャッシュ ページ 0 ページ 1 ページ

    2 nil ページ 2 ファイル ページ 0 ページ 1 ページ 2 ページ 3 33
  11. B+Tree ページ 2 ページャー キャッシュ ページ 0 ページ 1 ページ

    2 nil ページ 0 ページ 1 ページ 2 ページ 3 ファイル 34
  12. B+Tree ページャー キャッシュ ページ 0 ページ 1 ページ 2 nil

    flush ファイル ページ 0 ページ 1 ページ 2 ページ 3 35
  13. 19 21 22 #1 17 #2 35 #3 #1 22

    #2 29 #3 24 26 29 30 31 35 48
  14. #1 8 #2 17 #3 子ノード #1 子ノード #2 子ノード

    #3 8以下 9以上・17以下 18以上 50
  15. 内部ノードは、 1ページ内で大量の子ノードを管理 ページ #1 12 #2 31 #3 47 #4

    67 #5 78 #6 91 #7 103 #8 123 #9 140 #10 159 #11 171 #12 192 #13 213 #14 244 #15 265 #16 287 #17 302 #18 330 52
  16. SELECT * FROM users WHERE id = 24 SQLパーサー id

    = 24のレコードを検索 B+Tree 54
  17. id = 24のレコードを検索 B+Tree #1 17 #2 35 #3 ルートノードのページを取得

    ページャー (未キャッシュの場合) ページを取得 ファイル 55
  18. id = 24のレコードを検索 B+Tree #1 17 #2 35 #3 #1

    22 #2 29 #3 ノードのページを取得 ページャー (未キャッシュの場合) ページを取得 ファイル 57
  19. id = 24のレコードを検索 B+Tree #1 17 #2 35 #3 #1

    22 #2 29 #3 #2に含まれる (23以上・29以下) 58
  20. id = 24のレコードを検索 B+Tree 24 #1 17 #2 35 #3

    #1 22 #2 29 #3 レコード 26 レコード 29 レコード ノードのページを取得 ページャー 59
  21. id = 24のレコードを検索 B+Tree 検索結果 24 #1 17 #2 35

    #3 #1 22 #2 29 #3 レコード 26 レコード 29 レコード 60
  22. id = 27のレコードを追加 B+Tree 24 #1 17 #2 35 #3

    #1 22 #2 29 #3 レコード 26 レコード 29 レコード ここに追加すべき 62
  23. id = 27のレコードを追加 B+Tree 24 レコード #1 17 #2 35

    #3 #1 22 #2 29 #3 26 レコード 27 レコード 29 レコード 追加された 63