ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Caltech CS122 数据库系统实现:聚焦 SQL 层与查询优化器的数据库进阶课程指南

Caltech CS122 数据库系统实现:聚焦 SQL 层与查询优化器的数据库进阶课程指南 Caltech CS122 数据库系统实现聚焦 SQL 层与查询优化器的数据库进阶课程指南【免费下载链接】cs-self-learning计算机自学指南项目地址: https://gitcode.com/GitHub_Trending/cs/cs-self-learningCS122Database System Implementation是加州理工学院Caltech开设的数据库系统实现课程与侧重存储层实现的 CMU 15-445 不同它的 Lab 重点落在 SQL 层查询优化器各模块、Join 实现、统计信息与代价估计、子查询、聚合与 Group By以及 B 树与 WAL 实验。读完本篇指南你将了解 CS122 每个 Assignment 的技术任务、它在数据库学习路径中的定位以及推荐的工程环境与学习策略便于判断这门课是否适合作为你学完数据库入门课之后的进阶选择。课程基本信息与学习定位CS122 的基本信息如下所属大学Caltech加州理工学院先修要求无课程层面未设硬性先修但强烈建议在学完存储层课程之后学习编程语言Java课程难度五星难度本仓库文档中评级为最高档预计学时150 小时作业规模7 个 Assignments 2 个 Challenges从课程定位上看CS122 与仓库中介绍的 CMU 15-445 形成鲜明互补。15-445 要求你在 C 教学数据库 Bustub 中实现 Buffer Pool Manager、B 树、查询执行器、并发控制等存储层与执行层组件但其代码中并不提供 SQL 层功能而 CS122 的 Lab 恰好覆盖 15-445 没有深入的部分——SQL 解析Parser、Translate、查询优化器Optimizer的各个模块。文档原文给出的学习建议很明确本门课程适合在学完 CMU 15-445 之后、对查询优化相关内容有兴趣的同学。换句话说如果你希望完整走通一条从磁盘上的字节到一条 SQL 的执行计划的数据库实现之路15-445 负责下半程存储与执行CS122 则补齐上半程SQL 层与优化。实验主线围绕 NanoDB 的 SQL 层实现CS122 的 Lab 围绕一个名为NanoDB的教学数据库展开要求你在其上逐层实现 SQL 层的完整能力链。按照一条 SQL 语句在系统中的处理顺序课程涉及的模块包括SQL 解析Parser把 SQL 文本解析为结构化的语法表示Translate将解析结果翻译为内部表示/计划节点Join 实现用具体的连接算法nested-loop join实现 Join 计划节点统计信息与代价估计收集表统计信息、计算计划代价、估计谓词选择性子查询实现处理嵌套查询的语义与执行Agg / Group By 实现聚合与分组算子的执行B 树实验索引结构的实现WALWrite-Ahead Logging实验日志与恢复相关机制。下面按文档给出的前 3 个 Assignment 逐一展开。Assignment 1数据修改语句与 Buffer PoolAssignment 1 的任务清单为为 NanoDB 提供delete、update语句的支持为Buffer Pool Manager添加合适的pin/unpin代码提升insert语句的性能同时不使数据库文件大小过分膨胀。从任务结构看这一阶段的落脚点是让 NanoDB 从只读走向可更新。delete 与 update 意味着系统必须能定位并改写已有元组并保证修改与缓冲区管理正确协同Buffer Pool Manager 中页面被 pin 住时不会被换出unpin 之后才允许淘汰——添加合适的 pin/unpin 代码正是要求你在读写路径上正确管理页面的引用计数与脏页标记这是缓冲池实现的经典易错点。第三个任务则引入工程约束意识insert 提速例如批量写、减少随机 I/O与数据库文件大小膨胀之间存在取舍需要在两者之间做平衡而不是单方面追求插入吞吐。Assignment 2计划生成器与 Join 执行Assignment 2 的任务清单为实现一个简单的计划生成器Plan Generator将各种已经 Parser 过的 SQL 语句转化为可执行的执行计划使用nested-loop join算法实现支持inner join 和 outer join的 Join 计划节点添加一些单元测试保证 inner join 和 outer join 功能实现正确。这一 Assignment 是 SQL 层从静态表示跨入动态执行的关键一步。计划生成器接收 Parser 已经解析过的 SQL 语句为其构造一棵可执行的计划树——文档特意强调简单说明此阶段先建立从 AST 到执行计划的完整链路而非一开始就做最优计划。执行层则聚焦 nested-loop join以嵌套循环为最基础的连接算法同时覆盖 inner join只保留满足连接条件的元组对与 outer join保留不满足条件一侧的元组另一侧补 NULL两种语义。要求补充单元测试则意味着你需要自行构造能区分两类 join 语义的测试数据——例如外表中无匹配行的元组在 inner join 下被丢弃、在 outer join 下以 NULL 补齐——这是验证 join 正确性的最小充分条件。Assignment 3统计信息、代价估计与谓词选择性Assignment 3 的任务清单为完成收集表的统计信息完成各种计划节点的计划成本计算计算可出现在执行计划中的各种谓词的选择性selectivity根据谓词更新计划节点输出的元组统计信息。如果说 Assignment 2 解决的是能执行Assignment 3 解决的是执行得怎样才算便宜这正是查询优化器的核心表统计信息如行数、页数等是一切代价计算的输入代价计算需要为扫描、连接、聚合等各类计划节点分别建立成本模型谓词选择性估计回答WHERE 条件过滤后还剩多少元组是代价模型中最关键也最易失真的环节最后一条要求把前两者串起来谓词作用于某个计划节点后其输出端口的元组数/页数等统计必须随之更新下游节点的代价才能基于被过滤后的真实规模计算。四个任务合起来恰好构成一个最小可用的基于代价的优化器CBO的信息闭环统计信息 → 选择性估计 → 逐节点代价传播 → 计划成本汇总。后续 Assignment 与 Challenges除上述 3 个 Assignment 外课程共有7 个 Assignments 2 个 Challenges。文档指出课程的实验还包含B 树与WAL预写日志相关实验——这两块把课程从 SQL 层拉回存储与恢复层面B 树考察索引组织的实现WAL 考察事务日志与崩溃恢复机制。剩余 Assignment 与 Challenges 的具体内容文档建议直接查看课程介绍见下文课程资源此处不再展开以避免超出本仓库文档可确认的范围。工程环境与学习建议文档对动手实现给出了明确的工具链建议推荐用 IntelliJ IDEA 打开工程课程代码为 Java 工程IDEA 对重构、调试与单元测试组织更友好使用 Maven 构建依赖管理与模块构建统一由 Maven 负责注意日志相关配置文档特别提醒注意日志相关配置——在实现优化器与执行器时大量调试依赖对计划树与统计信息的日志输出日志级别与输出配置若不提前理顺排错成本会显著上升。此外结合文档给出的作业体量7 个 Assignments 2 个 Challenges与预计学时150 小时建议将 Assignment 2 的计划生成链路、Assignment 3 的统计-代价闭环作为两条主线优先打通前者决定能不能跑通一条查询后者决定查询能不能被合理优化两条主线交汇之后后续的子查询、Agg/Group By、B 树与 WAL 实验都可以在既有框架上增量推进。在仓库数据库学习体系中的位置本仓库的数据库系统板块收录了多门实现型课程CS122 在其中有清晰而独特的生态位。以仓库文档为参照可以这样对比课程文档位置语言侧重点作业规模UCB CS186docs/数据库系统/CS186.mdJava理论 实现 SQL 并发查询、B 树索引、故障恢复的数据库6 个 ProjectCMU 15-445docs/数据库系统/15445.mdC存储层Buffer Pool、B 树、执行器与优化器算子、并发控制5 个 Project 5 个 HomeworkCaltech CS122docs/数据库系统/CS122.mdJavaSQL 层Parser、Translate、Join、统计信息与代价估计、子查询、Agg/Group By外加 B 树与 WAL 实验7 Assignments 2 ChallengesStanford CS346docs/数据库系统/CS346.mdCRedBase记录管理、B 索引、系统管理、查询语言 RQL 与扩展组件4 Projects 1 ExtensionCMU 15-799docs/数据库系统/15799.mdC数据库前沿专题Streaming、Graph DB、NVM、Self-Driving DBMS 等2 Projects 1 Group Project从这张对照可以看出 CS122 的差异化价值相对CS186Java 入门实现课覆盖索引与恢复和15-445C 存储层实现课CS122 独占SQL 层 查询优化器这一环且同为 Java 实现语言切换成本低相对CS346 RedBase后者虽也含查询语言实现RQL 的 select/insert/delete/update但组织方式更偏组件式记录管理、索引、系统管理、查询语言四块 扩展CS122 则把优化器的统计-代价-选择性闭环作为独立 Assignment 深挖完成 CS122 与 15-445 之后若想进一步拓展视野前沿主题、论文导向可衔接仓库中的 CMU 15-799。一条合理的组合路线是先用 15-445 或 CS186 建立存储层与执行层的实现经验再用 CS122 补齐 SQL 层与查询优化器最后视兴趣选择 15-799 接触前沿方向。课程资源文档给出的课程资源如下课程网站Caltech CS122 官方课程站点courses.cms.caltech.edu 下的 cs122 页面后续 Assignment 与 Challenges 的完整安排以该站点课程介绍为准课程代码Caltech 课程代码仓库gitlab.caltech.edu 下的 cs122-19wiNanoDB 工程与实验代码以此为准课程教材无课程作业7 个 Assignments 2 个 Challenges。需要说明的适用前提本课程无指定教材理论部分需要结合数据库系统经典教材中的查询处理与优化章节自学代码仓库按学年组织如 19wi不同年份版本的手写要求可能存在差异动手前应先核对对应学年的 handout。小结Caltech CS122 是一门以 Java 实现 SQL 层为核心的数据库进阶课程Assignment 1 打通数据修改语句与缓冲池管理Assignment 2 建立解析 → 计划 → nested-loop join 执行的链路Assignment 3 补齐统计信息、谓词选择性与代价估计的优化器闭环其余 Assignment 与 B 树、WAL 实验进一步覆盖索引与恢复。文档原文给出的建议——先学完 CMU 15-445 再学 CS122、用 IDEA Maven 管理工程、注意日志配置——依然是上手这门课最省事的路线。对本仓库的读者而言CS122 与 15-445、CS186、CS346 组合使用可以覆盖数据库实现课程从存储层到 SQL 层的完整谱系。【免费下载链接】cs-self-learning计算机自学指南项目地址: https://gitcode.com/GitHub_Trending/cs/cs-self-learning创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表