CMU数据库15-445/645
学弟突然对你发出了击剑邀请
建议先大概看一遍CMU 15-445/645 (Spring 2023) Database Systems 通关指北。
搭建好WSL2的ubuntu环境,配置好github的ssh,在WSL中clone该项目,而不是Windows下clone。不要用windows下面的账户去管控、提交WSL的git,会有文件权限变化问题。
Schedule
目标 | 周一 | 周二 | 周三 | 周四 | 周五 | ||
---|---|---|---|---|---|---|---|
Project:C++ Primer Homework:SQL |
1. 课程概述 2. C++ Primer |
1. 关系模型和代数 | 1. 现代SQL 2. 作业 |
||||
Project:Buffer Pool Manager Homework:Storage |
1. 数据库存储 | ||||||
Homework:Indexes & Filters Project:Database Index |
|||||||
Project:Query Execution Homework:Query Execution |
|||||||
Homework:Concurrency Control Project:Concurrency Control |
|||||||
Homework:Distributed Databases |
PROJECT
- C++ Primer:完成hyperloglog.h、hyperloglog_presto.h
- Buffer Pool Manager:
- Database Index:
- Query Execution:
- Concurrency Control:
C++ Primer
HyperLogLog
HyperLogLog是一种概率数据结构,用于统计一个大数据集合的基数,仅使用传统方法所需内存的一小部分。
使用哈希函数将每一个字符串key均匀地映射到二进制上。
定义几个值:
- $b$ : 哈希值的前 $b$ 位作为索引,用于将哈希值的剩余位映射到某个固定的桶,一共 $2^b$ 个桶。
- $m$ :桶的个数,记为 $register[m]$, $m = 2^b$。
- $p$ :最左侧第一个 $1$ 的位置。
其中 $constant=0.79402,N=m$。
Task #1 MSB
hyperloglog.h
中有几个函数需要实现:
HyperLogLog(inital_bits)
: 桶内的前 bits (b) 会被用来计数。GetCardinality()
: 返回给定集合的基数值。AddElem(val)
: 计算并将 $val$ 放入 $register$中。ComputeCardinality()
: 根据上述公式计算基数。
还可以再添加几个辅助函数:
ComputeBinary(hash_t hash)
: 计算给定哈希值的二进制值。哈希值应转换为 64 位二进制(否则测试可能失败)。PositionOfLeftmostOne(....)
: 计算最左侧的1的位置。
要计算哈希值,可以使用给定的函数:
CalculateHash(...)
: to calculate hash
请参考 std::bitset 库中的二进制存储方式。当获得十进制数值时,将其转换为小于或等于十进制的最大整数。详情请参考 std::floor。
Task #2 LSB
可以先看下HyperLogLog in Presto这篇文章,当元素较多的时候,由 $sparse$ 转为 $dense$ 模式。
In hyperloglog_presto.h
following functions will be used for grading:
GetDenseBucket()
- 返回密集桶数组GetOverflowBucketOfIdx(..)
- 返回给定索引的溢出位集(如果存在)。GetCardinality()
- 返回基数值
实现以下功能:
HyperLogLogPresto(initial_bits)
- HyperLogLogPresto 的构造函数AddElem()
- 计算并将值放入寄存器中。ComputeCardinality()
- 根据上述公式计算基数。
为了计算哈希值,您可以使用给定的函数:
CalculateHash(...)
- 计算哈希值
Gradescope注册:How can people not enrolled in the class test their projects?
项目的所有源代码均可在Github上找到。非 CMU 学生可以使用Gradescope提交网站(入口代码: WWWJZ5
)。⚠请确保将您的学校设置为“Carnegie Mellon University
”。我们将在 CMU 学生的截止日期**之后**在 Gradescope 上为非 CMU 学生提供每项作业的自动评分器。作为向公众开放此功能的交换条件,我们要求您不要在Github 或其他源代码存储库上公开您的项目实现。
注意每年的邀请码不一样。
调试
项目中有用GTest写好的测试程序,将第二个参数的DISABLE_前缀去掉即可运行。
通过本地测试用例后,提交到Gradescope上进行最终的评分。
提交
将src目录下需要打包的文件用zip命令打包。
TODO
看了前3P
课程总体概述
数据库管理系统的设计与实现,并不注重与实践和应用,注重如何去构建和设计。CMU 95-703和CMU 15-415更注重实践。
在这门课中需要自己构建数据库存储管理器,注意这里并不是完整的数据库系统。
面向disk的数据库管理系统,支持Volcano风格查询处理,支持插拔式API,这样可以替换系统中算法,使用不同索引数据结构或者日志格式和控制方案。
有五个作业:
- SQLlite数据库查询
HOW TO CHECK
CLion+WSL环境配置
https://blog.csdn.net/jiexijihe945/article/details/131894202
1. 将CLion官方提供shell脚本放在WSL的ubuntu系统下执行
直接执行
1 | wget https://raw.githubusercontent.com/JetBrains/clion-wsl/master/ubuntu_setup_env.sh && bash ubuntu_setup_env.sh |
或者将shell拷贝到WSL中执行
1 | !/bin/bash |
配置CLion toolchain
在工具链中新增一个WSL。
CMake中新建一个Debug-WSL.
配置CLion Deployment
设置根目录为
1 | /home/yankf/prj |
如果勾选rsync,需要另外配置,后续再说。
配置
CLion编译运行
1 | sudo apt-get install clang-format |
安装后再执行
1 | rm -rf build |
没看到报error大概就是OK的。
已过时的内容
参考材料
教材是数据库系统概念第七版。
CMU 15-445: Database Systems中文简介
[中文讲解] CMU-15445 数据库内核-Moody-老师
【双语字幕机翻+资料下载】CMU 14-455 | 数据库系统导论(2019·完整版)
【卡内基梅隆大学】CMU-15-445/645 Database Systems | 感觉是机翻 (Fall 2021)
https://www.bilibili.com/video/BV1rN411f7Ef
1. 关系模型
- 关系结构:可以理解为数据表table
- 数据完整性:
- 操纵和访问: