miniob 概述
miniob 是 OceanBase 与华中科技大学联合开发的、面向"零"基础同学的数据库入门学习项目。
miniob 设计的目标是面向在校学生、数据库从业者、爱好者,或者对基础技术有兴趣的爱好者, 整体代码量少,易于上手并学习, 是一个系统性的数据库学习项目。miniob 设置了一系列由浅入深的题目,以帮助同学们"零"基础入门, 让同学们快速了解数据库并深入学习数据库内核,期望通过相关训练之后,能够熟练掌握数据库内核模块的功能与协同关系, 并能够在使用数据库时,设计出高效的 SQL 。miniob 为了更好的学习数据库实现原理, 对诸多模块都做了简化,比如不考虑并发操作, 安全特性, 复杂的事物管理等功能。
(注意:此代码仅供学习使用,请勿用于生产项目。)
快速上手
为了帮助开发者更好的上手并学习 miniob, 建议阅读:
- miniob 框架介绍
- 如何编译 miniob 源码
- 使用 GitPod 开发 MiniOB
- 开发环境搭建(本地调试, 适用 Linux 和 Mac)
- 开发环境搭建(远程调试, 适用于 Window, Linux 和 Mac)
- miniob 词法语法解析开发与测试
- doxygen 代码文档
更多的文档, 可以参考 docs 目录下的文档, 为了帮助大家更好的学习数据库基础知识, OceanBase 社区提供了一系列教程, 建议学习:
系统架构
其中:
-
网络模块:负责与客户端交互,收发客户端请求与应答;
-
SQL解析:将用户输入的SQL语句解析成语法树;
-
执行计划缓存:执行计划缓存模块会将该 SQL第一次生成的执行计划缓存在内存中,后续的执行可以反复执行这个计划,避免了重复查询优化的过程(未实现)。
-
语义解析模块:将生成的语法树,转换成数据库内部数据结构(部分实现);
-
查询缓存:将执行的查询结果缓存在内存中,下次查询时,可以直接返回(未实现);
-
查询优化:根据一定规则和统计数据,调整/重写语法树。(部分实现);
-
计划执行:根据语法树描述,执行并生成结果;
-
会话管理:管理用户连接、调整某个连接的参数;
-
元数据管理:记录当前的数据库、表、字段和索引元数据信息;
-
客户端:作为测试工具,接收用户请求,向服务端发起请求。
OceanBase 大赛
2022 OceanBase 数据库大赛是由中国计算机学会(CCF)数据库专业委员会指导,OceanBase 与蚂蚁技术研究院学术合作团队联合举办的数据库内核实战赛事。本次大赛主要面向全国爱好数据库的高校学生,以“竞技、交流、成长”为宗旨,搭建基于赛事的技术交流平台,促进高校创新人才培养机制,不仅帮助学生从0开始系统化学习数据库理论知识,提升学生数据库实践能力,更能帮助学生走向企业积累经验,促进国内数据库人才的发展,碰撞出创新的火花。
OceanBase 初赛基于一套适合初学者实践的数据库实训平台 miniob,代码量少,易于上手学习,包含了数据库的各个关键模块,是一个系统性的数据库学习平台。基于该平台设置了一系列由浅入深的题目,以帮助同学们更好"零"基础入门。
更多详情, 请参考 OceanBase 大赛
1. 大赛手把手入门教程
2. 大赛赛题
3. 提交测试
题目完成并通过自测后,大家可以在 miniob 训练营 上提交代码进行测试。
在提交前, 请参考并学习 训练营使用说明
客户端输出需要满足一定要求,如果你的测试结果不符合预期,请参考 miniob 输出约定。
4. 大赛FAQ
在线开发平台
本仓库基于 Gitpod 建立了快速在线开发平台, 点击下面按钮一键体验(建议使用 Chrome 浏览器)
首次进入 Gitpod 时需要安装一些依赖,依赖安装完成后,终端界面会显示 "Dependency installed successfully"。运行 bash build.sh --make -j4
命令即可编译miniob。
Contributing
OceanBase 社区热情欢迎每一位对数据库技术热爱的开发者,期待携手开启思维碰撞之旅。无论是文档格式调整或文字修正、问题修复还是增加新功能,都是对 OceanBase 社区参与和贡献方式之一,立刻开启您的 First Contribution 吧!更多详情, 请参考 社区贡献.
License
miniob 采用 木兰宽松许可证,第2版, 可以自由拷贝和使用源码, 当做修改或分发时, 请遵守 木兰宽松许可证,第2版.