复习
本次课回答的问题
本次课主要内容
使用文件系统存储数据
xxxxxxxx-2022-04-30-22-09-52.tar.bz2
xxxxxxxx-2022-04-30-22-09-52.tar.bz2.results
for f in wiki.UPLOAD_PATH.glob(
f'{course}/{module}/{stuid}/{file_pattern}'):
if not f.name.endswith('.result'):
# f 是一个提交
文件系统:优点
find OS2022/L1 -name "*.result" | xargs rm
spam template.md OS2022/students.csv
文件系统:局限
“Everything is a table”
SELECT *
FROM students, submissions
WHERE submission.sid = students.sid AND
submissions.course = 'OS2022' AND
submissions.module = 'M1';
for stu in students:
for sub in submissions:
if (stu.sid, sub.course, sub.module) ==
(sub.sid, 'OS2022', 'M1'):
yield stu, sub
“ACID” - Atomicity, Consistency, Isolation, Durability
BEGIN WORK;
-- All or nothing
INSERT INTO students VALUES (...);
INSERT INTO students VALUES (...);
INSERT INTO students VALUES (...);
COMMIT;
虚拟磁盘 (文件) 上的数据结构
想学习如何实现?
构造 planet-scale 数据库遭遇前所未有的挑战
“分布式共识协议”
LevelDB Key-Value Storage
一种实现方法:日志
snapshot()
返回当前文件的长度put(k, v)
都直接把 (k, v) 追加写入到文件尾部get(k, v)
遍历整个文件一个模拟出的 “Memory Hierarchy”
解决读放大
存储系统的基本假设一直受到挑战
未来?
本次课回答的问题
Takeaway messages