
完结了,仅ann_benchmarks和附加题未完成🎉🎉🎉
队伍情况
其实本来是想和队友一起努力的,但是因为两位队友都有一些事情,所以在队友写完date和drop-table之后就变成我单挑了,总体上我个人拿了440分,差不多算是我一个人单挑了。
基本准备
2024年上半年简单的写过2023的几道题目,之后有事没有继续写,只有280分好像。考虑到今年新增了向量相关题目,框架可能会有较大变动,当然更重要的原因是我上半年写的代码非常烂,臭不可闻。
仗着我上半年写过miniob,写过cmu15445,写过rmdb,看过postgres,算是有一定程度的开发经验,所以没有着急提前写,而是在开赛之后才开始。
因为10.18号才发赛题,而那两天我正好csapp的lab2在收尾,所以队友先完成了date和drop-table,之后我接手比赛。
开发环境:wsl+vscode,编译器gcc,使用clang-format格式化代码,clangd进行文件跳转和智能提示。
分支管理:一个人一个分支,master分支用来在进行通过一定题目之后进行合并,比如我始终在DogDu分支。
赛题相关

这张图片是我大致的做题顺序,但其实是存在在写某道题目的时候就顺便考虑着别的题目的情况,比如:聚合,子查询和null三者一起考虑,再比如:unique,multi-index和update-select三个一起考虑。
不得不夸的是,今年的框架真的很好,模块与模块之间的分离做的非常好,他们之间的耦合很低,比如expression可以当作一个分离的模块,这样功能实现起来很简单了就。
但是不得不吐槽的是,今年的题目顺序非常生草,题目与题目之间的相互依赖非常恶心,而本地所提供的测试样例不仅少,缺而且错,只能参考MySQL进行一定程度测试。稍等一下我会列出题目之间相互依赖关系。
题目主要分为与存储引擎相关的题目和与查询引擎相关的题目,但是查询引擎是大头,存储引擎相关的题目一般对存储引擎修改不大。
题目依赖问题
用 A->B 表示 B依赖于A
大概是:
basic -> date
basic -> drop-table
basic -> update
basic -> like
aggregation_and_groupby -> expression
date -> join-tables
update -> join-tables
aggregation_and_groupby -> simple-sub-query
basic -> multi_index
basic -> text
multi-index -> unique
update-select -> unique
null -> unique
multi-index -> update-mvcc
update -> update-select
simple-sub-query -> update-select
null -> order-by
order-by -> big-order-by
join-tables -> aggregation_and_groupby
join-tables -> alias
aggregation_and_groupby -> alias
expression -> alias
alias -> create-table-select
aggregation_and_groupby -> complex-sub-query
simple-sub-query -> complex-sub-query
expression -> create-view
aggregation_and_groupby -> create-view
alias -> create-view
text -> vector_basic (唯独这个不是指测试样例,而是在技术上依赖)
expression -> vector_basic
order-by -> vector_basic
aggregation_and_groupby -> vector_basic
vector_basic -> vector_format
vector_basic -> vector_high_dim
vector_basic -> vector_search
vector_basic -> vector_rewrite
vector_rewrite -> ann_benchmark
大概的依赖图片(图片较大,加载较慢,可以下载下来看):

一些问题和建议
如果想拿到好分数,expression越早考虑越好,不然发现依赖的时候,很多代码可能都需要推翻重写。这个非常关键
alias最好早点考虑一个表有两个名字的自表连接的情况,虽然alias好像没有这个测试,但是create-view有,导致后面写的时候被坑了。
因为我是一个人写,所以所有题目第一要务是能够在尽快短的时间内写完,所以不优先考虑效率,最优先考虑的是方法简不简单还有模块耦合低不低。写代码的一定一定要考虑好模块之间的耦合,一定不能太高,我在写expression发现了这个问题,还好比较早,改的还不是太多。
update-mvcc不知道为什么突然过了,后面就没看。
关于simple-sub-query和complex-sub-query,要考虑运行期间出现异常怎么办并注意要让算子支持重复open和close,怎么回撤已经写入communication缓冲区的内容。
关于vector的题目,其实不难,就是相当于添加几个系统函数,然后像text一样支持大字段即可,但是rewrite中如果没有实现向量索引的话,ann_benchmarks是一定过不了的,因为没时间了,没实现lvvflat,所以ann_benmarks没过。
其他题目没有太多想说的,写代码的时候尽量多考虑各种情况,有些题目比如unique和multi-index在写的时候部分修改的地方是完全重合的,因此可以一起写。
注意休息,不要因为比赛而天天熬夜,不如把写代码的时候多放在白天,集中两三个小时精神写代码更好。
完结了,仅ann_benchmarks和附加题未完成🎉🎉🎉
队伍情况
其实本来是想和队友一起努力的,但是因为两位队友都有一些事情,所以在队友写完date和drop-table之后就变成我单挑了,总体上我个人拿了440分,差不多算是我一个人单挑了。
基本准备
2024年上半年简单的写过2023的几道题目,之后有事没有继续写,只有280分好像。考虑到今年新增了向量相关题目,框架可能会有较大变动,当然更重要的原因是我上半年写的代码非常烂,臭不可闻。
仗着我上半年写过miniob,写过cmu15445,写过rmdb,看过postgres,算是有一定程度的开发经验,所以没有着急提前写,而是在开赛之后才开始。
因为10.18号才发赛题,而那两天我正好csapp的lab2在收尾,所以队友先完成了date和drop-table,之后我接手比赛。
开发环境:wsl+vscode,编译器gcc,使用clang-format格式化代码,clangd进行文件跳转和智能提示。
分支管理:一个人一个分支,master分支用来在进行通过一定题目之后进行合并,比如我始终在DogDu分支。
赛题相关
这张图片是我大致的做题顺序,但其实是存在在写某道题目的时候就顺便考虑着别的题目的情况,比如:聚合,子查询和null三者一起考虑,再比如:unique,multi-index和update-select三个一起考虑。
不得不夸的是,今年的框架真的很好,模块与模块之间的分离做的非常好,他们之间的耦合很低,比如expression可以当作一个分离的模块,这样功能实现起来很简单了就。
但是不得不吐槽的是,今年的题目顺序非常生草,题目与题目之间的相互依赖非常恶心,而本地所提供的测试样例不仅少,缺而且错,只能参考MySQL进行一定程度测试。稍等一下我会列出题目之间相互依赖关系。
题目主要分为与存储引擎相关的题目和与查询引擎相关的题目,但是查询引擎是大头,存储引擎相关的题目一般对存储引擎修改不大。
题目依赖问题
用 A->B 表示 B依赖于A
大概是:
basic -> date
basic -> drop-table
basic -> update
basic -> like
aggregation_and_groupby -> expression
date -> join-tables
update -> join-tables
aggregation_and_groupby -> simple-sub-query
basic -> multi_index
basic -> text
multi-index -> unique
update-select -> unique
null -> unique
multi-index -> update-mvcc
update -> update-select
simple-sub-query -> update-select
null -> order-by
order-by -> big-order-by
join-tables -> aggregation_and_groupby
join-tables -> alias
aggregation_and_groupby -> alias
expression -> alias
alias -> create-table-select
aggregation_and_groupby -> complex-sub-query
simple-sub-query -> complex-sub-query
expression -> create-view
aggregation_and_groupby -> create-view
alias -> create-view
text -> vector_basic (唯独这个不是指测试样例,而是在技术上依赖)
expression -> vector_basic
order-by -> vector_basic
aggregation_and_groupby -> vector_basic
vector_basic -> vector_format
vector_basic -> vector_high_dim
vector_basic -> vector_search
vector_basic -> vector_rewrite
vector_rewrite -> ann_benchmark
大概的依赖图片(图片较大,加载较慢,可以下载下来看):

一些问题和建议
如果想拿到好分数,expression越早考虑越好,不然发现依赖的时候,很多代码可能都需要推翻重写。这个非常关键
alias最好早点考虑一个表有两个名字的自表连接的情况,虽然alias好像没有这个测试,但是create-view有,导致后面写的时候被坑了。
因为我是一个人写,所以所有题目第一要务是能够在尽快短的时间内写完,所以不优先考虑效率,最优先考虑的是方法简不简单还有模块耦合低不低。写代码的一定一定要考虑好模块之间的耦合,一定不能太高,我在写expression发现了这个问题,还好比较早,改的还不是太多。
update-mvcc不知道为什么突然过了,后面就没看。
关于simple-sub-query和complex-sub-query,要考虑运行期间出现异常怎么办并注意要让算子支持重复open和close,怎么回撤已经写入communication缓冲区的内容。
关于vector的题目,其实不难,就是相当于添加几个系统函数,然后像text一样支持大字段即可,但是rewrite中如果没有实现向量索引的话,ann_benchmarks是一定过不了的,因为没时间了,没实现lvvflat,所以ann_benmarks没过。
其他题目没有太多想说的,写代码的时候尽量多考虑各种情况,有些题目比如unique和multi-index在写的时候部分修改的地方是完全重合的,因此可以一起写。
注意休息,不要因为比赛而天天熬夜,不如把写代码的时候多放在白天,集中两三个小时精神写代码更好。