数据库系统

数据库系统

2025 南京大学《操作系统原理》
数据库系统

什么是 “应用程序”?

软件是物理世界过程在信息世界中的投影。

  • 软件天生有 persist data 的需求
    • 个人信息 (学籍……)
    • 订单
    • 日志 (支付记录、维护记录……)
    • ……
  • 让我们 “重新实现” 教务系统吧!
    • 先让我们去 ehall.nju.edu.cn 看一眼
2025 南京大学《操作系统原理》
数据库系统

保存应用数据 (1)

在文件 (虚拟磁盘) 上构建数据结构

  • 就像 ELF, BMP, ...
struct superblock {
    struct student *s;
    struct course *c; 
}
struct student { char stuid[16]; ...  };
struct course  { char cid[16]; ...  }
  • 需求:expel(s); enroll(s, c); ...
    • 应用系统实现翻译成 read, write, lseek 系统调用
    • (也可以 mmap/msync)
2025 南京大学《操作系统原理》
数据库系统

典型的应用数据结构

游戏是一个状态机 (Everything is a state machine)

  • 可以做状态的快照 (存档): 金钱、建筑、好感度……
  • 也可以记录所有的 UI Events (replay!); BWChart

center

2025 南京大学《操作系统原理》
数据库系统

保存应用数据 (2)

利用目录树

ehall.nju.edu.cn/teacherJxrwApp/22020230/4
├── enrollment
│   ├── 231220001.md
│   ├── 231220002.md
│   └── ...
├── syllabus
│   ├── 1-intro.md
│   ├── 2-app-view.md
│   └── ...
└── textbook
    └── 1-ostep.md
  • UNIX 世界中的工具都能用了:find, grep, ...
    • 如何关联学生和选课/成绩?Copy? Symlink?
    • 如何实现并发访问 (和 crash) 的 consistency?
2025 南京大学《操作系统原理》
数据库系统

我们需要的到底是什么?

Concurrency (Parallelism)

  • 全校一起选课,系统不能崩 (不能一把大锁保平安)

Persistence (Crash Consistent)

  • 系统故障,数据不能丢

Atomicity 😊

enroll_list = random_enroll()
with AllOrNothing():
    for id in enroll_list:
        Path(f'enrollment/{id}.md').write_text('y')
    ...
2025 南京大学《操作系统原理》
数据库系统

思考

有没有一个比目录/文件更好用的 API 呢?

  • 能实现应用的任何数据结构
  • 支持并发和 Crash Consistency

反思:我们是怎么实现数据结构的?

  • Pointer machine (实现数据结构其实不需要 “数组”)
  • Pointer 是对象之间的关系
struct node {
    char value[32];  // Record
    struct node *left, *right;  // Pointers
}
2025 南京大学《操作系统原理》
数据库系统

Relational Database (关系型数据库)

一个 surprisingly simple 的模型

  • A relational model of data for large shared data banks
    • Edgar F. Codd: 1981 Turing Award Winner
    • “Future users of large data banks must be protected from having to know how the data is organized in the machine.”
      • 我做了很多年 program synthesis; 但凡是 end-user 的,最后的设计理念都会回到这一篇 paper
  • Everything is a table
    • 每行一个对象;对象可以用 id 索引其他对象
2025 南京大学《操作系统原理》
数据库系统

关系数据库模型

“对象和指针”

2025 南京大学《操作系统原理》
数据库系统

关系数据库查询:指针 “配对”

SELECT Courses.Title
FROM Student 
JOIN Takes_Course
    ON Student.ID = Takes_Course.ID  -- Key
JOIN Courses
    ON Takes_Course.ClassID = Courses.ClassID  -- Key
WHERE Student.Name LIKE '张%'

center

2025 南京大学《操作系统原理》
数据库系统

数据库系统开启软件的新时代

“ACID” 数据库

  • A (Atomicity), C (Consistency), I (Isolation), D (Durability)
    • Strong serializability: 查询结果 “按照某种顺序完成”
    • Strong crash consistency: 系统 crash 也不会损坏或丢失

支持任意长 (允许混合任意计算) 的 Transaction

  • 这个特性太重要了
tx_begin();
if (user1.balance < m) tx_abort();  // SQL
user1.balance -= m;  // SQL
user2.balance += m;  // SQL
tx_commit();
2025 南京大学《操作系统原理》
数据库系统

ACID 数据库

学过《操作系统》就很好理解了

  • 一把大锁保平安的效果
  • 大规模并行执行的性能
  • 完全自动的崩溃回复

关系数据库:海量的实现优化

  • 查询优化 (rewriting)
  • 连接索引 (B+ Tree)
  • 缓存、分库分表、并发控制、读写分离……
    • 只要不是大到 “国民级” 的应用,数据库都能搞定
2025 南京大学《操作系统原理》