2024-Oceanbase数据库大赛总结
CYY

前言

我有幸参加了 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++基础语法的应用与提升

  • 过滤下推等高级查询优化技术

通过这次比赛,我不仅提升了技术能力,也深刻体会到了团队协作和时间管理的重要性。虽然与理想的名次有所差距,但这段经历无疑为我的技术成长奠定了坚实基础。

 评论
评论插件加载失败
正在加载评论插件
由 Hexo 驱动 & 主题 Keep