Miniob数据库比赛总结
Miniob比赛是OceanBase比赛的初赛,通过Miniob数据库框架实现比赛给出的功能。比如,数据库的删除表操作(drop_table)、数据库的 DATE 时间字段、数据库的 LIKE 匹配功能。初赛时间是10.18-11.11总共25天时间,约为三周时间,虽然最终分数并不是很高,但对于完全没有做过数据库内核设计的我们来说已经很满意了。
1. 赛前准备
最开始我们以为这个数据库比赛是像本科一样写写 Sql 语句,然后部署就可以了。但是我们报名了比赛才发现,这个比赛是需要去实现数据库功能。
设计数据库内核需要设计很多知识,单纯从 Miniob 框架而言,需要会词法分析(Lex/Flex)、语法分析(Yacc/Bison)、磁盘存储、操作系统文件管理、内存缓冲池等相关知识。如果从零开始参加这个比赛的话应该只能完成比较简单的功能(drop_table,LIKE,Update等),因为需要学习的东西实在是太多了。没有学过数据库内核知识很难支撑后面题目的完成。
此外还需要有一定的 C++ 基础,Miniob 大部分代码都是 C++,并且涉及面向对象编程知识。除此外,还涉及一部分 Git 使用、Docker 使用、Linux 命令。
2. 比赛节奏
Miniob 对我来说其实就是给你一个较大的项目,然后让你在此基础上扩展功能。因此第一步需要理清 Miniob 的代码框架,我比较推荐的方法是花 2-3 天时间学习比赛官网的入手视频和 Miniob 说明文档。其中有一些功能会带你手把手实现,然后也能快速的过一遍数据库内核相关知识。
我在最开始的代码框架和数据库内核知识上花了大概一周的时间,但是最终收益甚微。比赛最缺的就是时间,而且就算花了很多时间去看数据库内核的理论也很难理解实现逻辑(至少最开始看的那些理论对于我来说后面并没有全部用到)。
因此比较好的方法就是去找 Github 上往届参赛人员公开的库,根据他们的提交记录看看每个功能具体是怎么实现的。然后根据项目学习理论知识,会对 Miniob 框架理解得更快。
但是往年的 Miniob 框架可能会和新的 Miniob 框架不同,并且功能的测试用例也可能不同。因此一定要去官网看一遍题目难易程度和测试用例,否则就会在学习往年代码,实现功能后才发现后续还要实现很多功能才能提测成功。
3. 心得体会
这是第一次和我的同门参加数据库内核比赛,因此刚开始的时候大家都无所适从,都在问怎么做,做什么。对于整体的任务规划不是很明确,因此如果是团体比赛的话最好定期商量一下各自进度,然后尽快把任务进行分配。
虽然没学过任何数据库内核知识就来参加这个比赛了,但是确实也能学习到很多项目知识。从 Github 协同开发到 Docker 使用,再到 C++ 面向对象编程,总归是能有所收获。
也感谢我的同门在比赛中的互帮互助,独行快,但众行远!!!



