
前言
我有幸参加了 2024 Oceanbase 数据库大赛,在初赛中从 1212 名参赛者中脱颖而出,获得第 30 名的成绩,成功晋级决赛。在决赛阶段,我们团队一度保持在前十的位置,然而在最后一周,由于项目组的紧急任务和期末考试的双重压力,我们放缓了比赛节奏。眼看排名尚可,我们选择了暂缓投入,不料在最后两天排名迅速下滑至第 21 位。为挽回局面,我们进行了最后一次提交,却因测试的随机性因素,获得了所有提交中最不理想的结果,最终排名第 24,遗憾地与二十强擦肩而过。
这场比赛历时约两个月,分为初赛和决赛两个阶段。初赛基于开源的 MiniOB 数据库平台,要求参赛者实现数据库的基础功能;决赛则基于 Oceanbase 社区版源码,挑战我们优化现有的向量检索流程,以提升检索效率。
初赛
在初赛阶段,我主要负责实现以下数据库核心功能:
日期类型的支持与处理
基于 like/not like 关键字的模糊匹配功能
表达式计算与优化
聚合函数的设计与实现
多字段索引的构建与维护
简单及复杂子查询的处理
唯一索引的实现与约束
SQL 查询中的别名支持
向量索引的设计与实现
视图(create view)的创建与管理
决赛
决赛设置了四个关键优化指标:
Annbenchmark 基准测试:针对无过滤条件、limit 固定为 10 的一系列查询,优化查询的每秒处理量(QPS)
Q1 优化:针对无过滤条件但 limit 不固定的向量查询
Q2 优化:针对有过滤条件(查询 id 列)且 limit 不固定的查询
Q3 优化:针对有过滤条件(查询 id 列和 col1 列)且 limit 不固定的查询
收获
这次比赛让我收获颇丰,深入学习了多方面的数据库技术:
数据库底层查询执行引擎的设计模型,包括火山模型和向量化执行引擎
AI 领域关键技术——向量检索,特别是 HNSW 算法、向量底层存储机制以及向量索引构建方法
SQL 完整执行流程:从 SQL 解析到 ParseNode,再到 Statement,继而转化为逻辑计划和物理计划,最终从存储层提取数据到上层的全过程
代码性能测试技术,尤其是火焰图的应用
代码性能优化策略,包括 CPU 优化、缓存优化和 I/O 减少
多线程编程技术的实践与巩固
C++基础语法的应用与提升
过滤下推等高级查询优化技术
通过这次比赛,我不仅提升了技术能力,也深刻体会到了团队协作和时间管理的重要性。虽然与理想的名次有所差距,但这段经历无疑为我的技术成长奠定了坚实基础。