南京大学 操作系统 (JYY) 学习笔记:从文件系统到数据库,持久化的终极抽象 (SQL/NoSQL)
写在前面这是本系列的第二十五篇。操作系统为我们的应用程序提供了多种持久化控制的机制包括fsync等保证崩溃一致性的 API。但如果所有的业务逻辑都要靠手工去调这些底层的 API那开发者的心智负担就太大了。在此基础上我们能否在应用程序之上实现一套更为可靠、更为高可用的数据存储抽象本讲内容作为《操作系统》课程的彩蛋延伸我们将跳出内核的泥潭探讨数据库系统SQL 与 NoSQL的设计原理与实现技术。文件系统 API 到此结束作为操作系统留给上层应用的基础原语文件系统 API 的核心可以概括为四个方面文件 (数据 元数据) 管理:open,read,write,close,stat,chmod,chown,fsetxattr/fgetxattr,ftruncate…目录树管理:mount,mkdir,readdir,link,symlink,unlink,rename,chdir…科普rename_ 系统调用是极其强大的它在很多文件系统底层被保证为绝对的原子操作。_一致性管理:syncsyncfsfsyncfdatasync。其他相关 API:flock,mmap…关系代数、SQL 和数据库 (Spicy ️)什么是“应用程序”软件是物理世界过程在信息世界中的投影。软件天生有着 Persist Data (持久化数据) 的需求个人信息学籍、订单、交易流水、维护日志……试想一下如果我们不借助现成的数据库要如何“从零开始”手搓一个南京大学的教务系统尽管我们平时总是吐槽学校的教务系统多么难用但在潜意识里我们依然敢把成绩和学分数据放心地交给它这就是持久化带来的信任。纯手工保存应用数据的痛点方案 1在文件虚拟磁盘上直接构建数据结构就像定义 ELF、BMP 文件格式一样自己定义数据的字节排布structsuperblock{structstudent*s;structcourse*c;}structstudent{charstuid[16];...};structcourse{charcid[16];...}任何需求如expel(s)退学enroll(s, c)选课都需要应用系统自己去翻译成繁琐的read,write,lseek或mmap。(注某些极端的应用确实是这么干的比如单机游戏存档或者直接记录 UI 事件的 Replay 快照)。方案 2利用目录树用文件夹代表实体用文件代表属性。ehall.nju.edu.cn/teacherJxrwApp/22020230/4 ├── enrollment │ ├──231220001.md │ ├──231220002.md │ └──...这样 UNIX 世界里的find,grep等工具都能直接用。但问题接踵而至如何关联学生和成绩用Symlink软链接吗如何在万人同时抢课时保证并发访问的安全和Crash Consistency我们需要的到底是什么Concurrency (并发):全校一起抢课系统不能崩。且不能无脑用一把全局大锁否则几万人的请求排队会直接让系统超时。Persistence (持久化):系统故障甚至是机房断电落盘的数据绝对不能丢。Atomicity (原子性):withAllOrNothing():// 要么全成功要么全失败回滚forid in enroll_list:Path(fenrollment/{id}.md).write_text(y)降维打击Relational Database (关系型数据库)有没有一个比目录/文件更好用的 API 呢有这就是 1981 年图灵奖得主 Edgar F. Codd 提出的关系模型。“Future users of large data banks must be protected from having to know how the data is organized in the machine.”必须保护未来大型数据库的用户使他们不必去了解数据在机器中是如何组织和存储的。数据抽象的极致Everything is a table (万物皆表)。每行代表一个对象对象可以用ID(指针) 关联其他对象。这就消解了 C 语言里繁琐的指针链表。SQL 查询指针的优雅“配对”我们不需要写循环去遍历链表了只需写一条声明式的语句SELECTCourses.TitleFROMStudentJOINTakes_CourseONStudent.IDTakes_Course.IDJOINCoursesONTakes_Course.ClassIDCourses.ClassIDWHEREStudent.NameLIKE张%数据库系统开启了软件的新时代ACID 数据库的承诺A (Atomicity, 原子性)C (Consistency, 一致性)I (Isolation, 隔离性):Strong serializability (强可串行化)无论怎么并发最终结果都像是一个接一个按顺序完成的。D (Durability, 持久性):Strong crash consistency系统断电 Crash 也绝不会损坏或丢失数据。学过了《操作系统》底层机制的你应该很好理解这背后的技术含金量。数据库不仅帮你做了“一把大锁保平安”的效果还在底层疯狂优化实现了大规模并行的恐怖性能并且附赠了基于Redo Log的完全自动崩溃恢复。把应用数据交给数据库对于程序员来说就是一劳永逸。只要不是大到“国民级”的逆天并发应用关系数据库分库、分表、B树索引、读写分离全都能帮你搞定。关系数据库底层的深渊实现 (Spicy ️)Database v.s. Compilers (数据库本质是编译器)实现 SQL 查询本质上就是在做编译优化语义等价的 Rewriting。数据库引擎要把你的 SQL 语句翻译成底层的物理执行计划。数据库是一个超级复杂的并发程序SQL 查询底层对应的无非就是对内存和磁盘的Write(x)和Read(y)。它必须自己维护一套“磁盘上的数据结构”。它大量使用类似文件系统的 Write-ahead Logging (WAL) 技术来保证 Crash Consistency。但它的并发控制比操作系统更困难。因为长事务Transactions是不可能用简单的lock/unlock来实现的这会瞬间锁死整个库。伟大的例子SQLite“SQLite is the most used database engine in the world. SQLite is built into all mobile phones and most computers…”Android, iOS, macOS, Chrome 等几乎所有平台中都深深内嵌了 SQLite。Zero Configuration无需配置守护进程发行版自带libsqlite3.so。它是年轻程序员开发第一个应用的首选。不用关系的数据库NoSQL (Spicy ️)如果要实现“国民级”的应用当你的数据达到了亿级、甚至十亿级别传统的 SQL 就显得吃力了。SELECT*FROMchat_recordsWHERE(sender_iduser_id1ANDreceiver_iduser_id2)OR(sender_iduser_id2ANDreceiver_iduser_id1)ORDERBYtimestampDESCLIMIT10对于国民级社交软件这样一条“合法且正确”的 SQL如果碰上没有建立完美索引的亿级表会瞬间让数据库引擎 CPU 拉满甚至瘫痪整个系统。因为系统提供商永远无法预知应用程序员会写出怎样逆天的 Query 语句。只要提供了功能就必然会被滥用 $ \rightarrow $ 导致 Performance Bug。这是任何底层 Systems 都无法避免的技术债。解决方法做减法(NoSQL 诞生)牺牲掉极其复杂的“多表联查 (JOIN)”和“通用性”换来极简的能力、极其残暴的读写性能和极其容易的横向扩展性。Key/Value (键值对):最简单、最高效。适合缓存、计数器。Document (文档型 JSON):NoSQL 实现“国民级”应用的主力。Column (列族):适合海量数据的分析。Graph (图):适合社交网络关系。AI 时代的 Vector (向量):大语言模型检索的基石。为什么 Key-Value 这么好扩展 (Scale)只要给 Key 做个 Hash就可以把数据完美地散列扔到上千台不同的机器节点上。写操作只需 Append-only 追加写入日志。分布式的高可靠瞬间完成。例如国民级 APP 的点赞功能应用程序全靠 Key 找数据user:{uid}历史记录user:{uid}:like_history(一个简单的 List)List 直接支持极速的append/pop/range速度极快。内存数据库的王者RedisEveything is In-memory.基于简单的 GET / SET。极度丰富的数据结构抽象String, JSON, List, Set, Hash, Sorted Set, Stream。甚至支持复杂的搜索FT.SEARCH products price:[200 300]。支持简单的事务MULTI/WATCH/EXEC也支持异步持久化落盘。持久化 NoSQL 的妥协很多文档型和列族数据库为了降低学习门槛会提供一个 SQL 的“子集”。通过极简的语句接口强行限制程序员的滥用从而在底层保证分布式横向扩展的能力。MongoDB (Document):Key $ \rightarrow $ JSON。比如直接创建一个 JSON 并 append 到user:{uid}.messages。Cassandra (Column):语言叫CQL看起来很像 SQL但功能极其受限。INSERTINTOmessages(user_id,message_id,content,timestamp)VALUES(1234567,now(),message,toTimestamp(now()));总结Take-away messages:在操作系统底层为我们提供的文件、目录、网络等“粗糙”的 API 之上开发者们发挥了惊人的创造力。我们看到了为了降低心智负担而兴起的关系数据库看到了为了应对亿级高并发而做减法繁荣起来的 NoSQL以及今天浪潮正盛的 AI 向量数据库。在这几波狂暴的技术浪潮之间虽然操作系统的内部实现发生过天翻地覆的重构但操作系统的 API 却相当惊人地保持了稳定POSIX。正是这种数十年的“稳定性”支撑起了上层应用生态无所顾忌的繁荣。这也是操作系统作为一切软件“基石平台”最伟大的使命。

相关新闻

AI生成品牌故事为何总像“假人说话”?(神经语言学+品牌心理学双视角拆解)

AI生成品牌故事为何总像“假人说话”?(神经语言学+品牌心理学双视角拆解)

更多请点击: https://kaifayun.com 第一章:AI生成品牌故事为何总像“假人说话”? AI生成的品牌故事常陷入一种微妙的失真困境:语法精准、逻辑连贯,却缺乏真实人类叙事中特有的呼吸感、矛盾性与温度。这种“假人说话”…

2026/8/5 14:58:36 阅读更多 →
AR模型核心公式解析:从延迟算子到Green函数的实战应用

AR模型核心公式解析:从延迟算子到Green函数的实战应用

1. 从预测明天股价说起:为什么我们需要AR模型? 如果你尝试过预测明天的股票价格、下个月的用电量,或者仅仅是下周的气温,你大概率会感到沮丧。这些数据点按时间顺序排列,彼此之间并非独立,明天的价格深受今…

2026/8/5 14:58:36 阅读更多 →
AI时代知识IP的生死线:为什么97%的AI专栏在第3周就停更(附续更SOP)

AI时代知识IP的生死线:为什么97%的AI专栏在第3周就停更(附续更SOP)

更多请点击: https://intelliparadigm.com 第一章:AI时代知识IP的生死线:为什么97%的AI专栏在第3周就停更(附续更SOP) 当AI生成内容工具普及率突破82%,知识创作者正面临一场静默崩塌:数据追踪显…

2026/8/5 14:58:35 阅读更多 →

最新新闻

【服装一致性黄金阈值】:基于12,846组真实电商图测试,曝光SD v2.1/v3.0/v3.5在Pose-Refine模式下的3.8mm像素偏移临界点

【服装一致性黄金阈值】:基于12,846组真实电商图测试,曝光SD v2.1/v3.0/v3.5在Pose-Refine模式下的3.8mm像素偏移临界点

更多请点击: https://intelliparadigm.com 第一章:【服装一致性黄金阈值】核心发现与行业意义 在多模态视觉识别与时尚产业数字化实践中,我们通过大规模服饰图像聚类实验(覆盖12.7万张标注样本、38个主流品牌、96种基础品类&…

2026/8/5 17:07:51 阅读更多 →
UART串口通信:从核心原理到实战调试的嵌入式开发指南

UART串口通信:从核心原理到实战调试的嵌入式开发指南

1. 项目概述:为什么我们今天还要聊UART? 在嵌入式开发、单片机编程乃至一些桌面应用的调试场景里,如果你问一个老工程师最可靠、最直接的调试和通信方式是什么,十有八九他会告诉你:串口。而这个“串口”通信的核心&…

2026/8/5 17:07:51 阅读更多 →
PDF补丁丁:5个核心功能解决90%的PDF编辑难题

PDF补丁丁:5个核心功能解决90%的PDF编辑难题

PDF补丁丁:5个核心功能解决90%的PDF编辑难题 【免费下载链接】PDFPatcher PDF补丁丁——PDF工具箱,可以编辑书签、剪裁旋转页面、解除限制、提取或合并文档,探查文档结构,提取图片、转成图片等等 项目地址: https://gitcode.com…

2026/8/5 17:07:51 阅读更多 →
终极Linux Wi-Fi适配器解决方案:rtl88x2bu驱动完全指南

终极Linux Wi-Fi适配器解决方案:rtl88x2bu驱动完全指南

终极Linux Wi-Fi适配器解决方案:rtl88x2bu驱动完全指南 【免费下载链接】rtl88x2bu rtl88x2bu driver updated for current kernels. 项目地址: https://gitcode.com/gh_mirrors/rt/rtl88x2bu rtl88x2bu驱动是为Linux系统开发的专业级开源Wi-Fi驱动程序&…

2026/8/5 17:07:51 阅读更多 →
003011001_WPF布局实例

003011001_WPF布局实例

003011001_WPF 布局实例摘要:本文面向 WPF 开发者,系统梳理从入门到工业级的四大布局实战案例——设备登录界面(Grid StackPanel)、设备列表界面(DockPanel 数据绑定)、工业设备操作面板(Canv…

2026/8/5 17:07:51 阅读更多 →
企业网站建设智恒网络:深度解析为何选择智恒网络打造行业标杆级数字门户

企业网站建设智恒网络:深度解析为何选择智恒网络打造行业标杆级数字门户

在这个数字化浪潮席卷全球的时代,企业的官方网站已经不再仅仅是一个展示产品信息的“电子名片”,它是企业品牌形象的核心载体,是客户信任的第一道门槛,更是转化流量的关键枢纽。然而,当我在行业内摸爬滚打多年,见过太多光鲜亮丽却华而不实的网站,也见过无数因为技术选型…

2026/8/5 17:06:51 阅读更多 →

日新闻

Java缓存框架:JetCache

Java缓存框架:JetCache

TOC 一、简介 JetCache 是一个 Java 缓存抽象框架,为不同的缓存解决方案提供了统一的使用方式。 它提供的注解比 Spring Cache 更加强大。 JetCache 的注解支持原生 TTL、两级缓存以及在分布式环境中的自动刷新功能,同时你也可以通过代码直接操作 Cach…

2026/8/5 0:00:43 阅读更多 →
AD 铺铜设置十字连接,过孔全连接,新版AD的简单设置

AD 铺铜设置十字连接,过孔全连接,新版AD的简单设置

需求:通孔焊盘 十字花;过孔 Via 实心直连;贴片焊盘按需设置 AD 测试版本AD24 很多工程师踩坑:全部统一十字,导致接地过孔阻抗高、大电流发热! 一、快捷键打开规则 PCB 界面按下:D R 展开…

2026/8/5 0:00:43 阅读更多 →
AI素描转换技术深度拆解(2024最新论文+工业级落地代码):从Stable Diffusion ControlNet到LoRA微调全链路解析

AI素描转换技术深度拆解(2024最新论文+工业级落地代码):从Stable Diffusion ControlNet到LoRA微调全链路解析

更多请点击: https://kaifayun.com 第一章:AI生成素描效果 AI生成素描效果是计算机视觉与风格迁移技术融合的典型应用,其核心在于将彩色照片或RGB图像转换为具有手绘质感、明暗对比强烈、边缘清晰的单色素描图像。该过程通常依赖于深度学习模…

2026/8/5 0:00:43 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/5 15:00:43 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/5 13:13:56 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/5 10:20:36 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/4 13:38:24 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/4 11:09:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/4 13:38:40 阅读更多 →