Skip to content

Latest commit

 

History

History
152 lines (126 loc) · 13.6 KB

introduction.md

File metadata and controls

152 lines (126 loc) · 13.6 KB

大赛名称:第四届全球数据库大赛—PolarDB性能挑战赛 赛道名称:分布式NewSQL性能挑战(PolarDB-X)

大赛概况

2022年第四届全球数据库大赛—PolarDB性能挑战赛,是由阿里云、英特尔联袂主办,阿里云数据库、阿里云天池承办的数据库年度品牌赛事。自2018年以来,“阿里云数据库大赛”已经连续成功举办三届,吸引了国内外数千支队伍和个人参加,参赛者遍布11个国家和地区。

PolarDB是阿里巴巴自研的下一代云原生数据库,100%兼容MySQL、PostgreSQL、高度兼容Oracle语法。采用存储计算分离架构和软硬一体化等创新设计,成本只有传统商用数据库的1/10。从诞生起,PolarDB就充分利用了高性能CPU、RDMA、英特尔傲腾等新硬件的技术红利,打造先进的高性能云原生数据库,并在业界率先提出了计算、分布式共享内存、分布式共享存储的三层解耦架构。

本届大赛采用双赛道机制,聚焦分布式共享内存池、基于索引的多维查询等数据库核心业务场景,参赛者在充分认知英特尔第二代傲腾持久内存(BPS)、Icelake CPU特质特性的情况下,设计最优的数据结构,探索数据库创新场景最佳实践。

参赛对象

面向全社会开放,高等院校、科研单位、互联网企业等人员均可报名参赛。 注:活动主办方拥有最终解释权; 1)大赛主办和技术支持单位如有机会接触赛题背景业务、产品、数据的员工,则自动退出比赛,放弃参赛资格。 2)阿里云员工,可参与排名,但不参与决赛晋级评奖及领取奖金。除了1)限制参赛的人员之外,阿里云员工参赛进入复赛的队伍,均可以获得综合价值500元的礼品大礼包一份。

奖项设置

分布式NewSQL性能优化(PolarDB-X)赛道共设奖金20万元人民币。 冠军:1支队伍,每支队伍奖金6万元人民币,颁发获奖证书。 亚军:2支队伍,每支队伍奖金3万元人民币,颁发获奖证书。 季军:3支队伍,每支队伍奖金2万元人民币,颁发获奖证书。 优胜奖:4支队伍,每支队伍奖金5千元人民币,颁发获奖证书。 (上述奖项以总决赛答辩的最终名次决定) 参与奖:初赛TOP50队伍的选手将获得大赛限量版纪念T恤一件,数量按照各队伍选手人数发放。 极客奖:复赛最终排名入围TOP20所在队伍的选手将获得阿里云数据库产品事业部优先推荐招聘名额。 注:同一选手只能获得一个参赛奖。多赛道入围前10排行榜的选手,按最高排行所在赛道计入名次。其余赛道该选手所在团队名次作废,获奖资格顺延。 (例:A选手在赛道1获得第一名,与B选手组队在赛道2获得第二名,则按赛道1名次发放奖品,赛道2名次作废,获奖资格向下顺延一位。)

赛程安排

报名与实名认证(即日起—2022年8月3日8月10日,UTC+8) 1.报名方式:登录比赛官网,完成个人信息注册,即可报名参赛。 2.选手可2-3人组队或单人成队参赛,每位选手只能加入一支队伍。 3.选手需确保报名信息准确有效,组委会有权取消不符合条件队伍的参赛资格及奖励。 4.选手报名、组队变更等操作截止时间为8月3日8月10日中午11:00。 5.各队伍(包括队长及全体队伍成员)需要在8月3日8月10日中午11:00完成实名认证(认证入口:天池官网-右上角个人中心-认证-支付宝实名认证),未完成认证的参赛团队将无法进行正式比赛。

第一赛季【初赛】(2022年6月27日-8月8日8月15日,UTC+8) 1.6月27日11:00开放代码评测入口,每天提供5次代码运行机会,并提供运行日志。6月28日起,每日10:00——22:00每小时将在天池平台更新排行榜,按照得分从高到底排序。 2.第一赛季截止时(8月8日15日10:00截止提交,8月8日15日20:00产生最后排行),最好成绩排名前100名的队伍可进入第二赛季。

第二赛季【复赛】(2022年8月11日8月18日-9月23日9月30日,UTC+8) 1.8月11日18日10:00放提交入口,每天提供5次代码运行机会,并提供运行日志。8月11日18日起,每日10:00——22:00每小时将在天池平台更新排行榜,按照得分从高到底排序。 2.9月23日30日10:00关闭代码评测入口,9月23日30日22:00产生最后排行,最好成绩排名前10名队伍受邀参加决赛答辩。

决赛(时间待定) 1.决赛将视疫情情况,以线下或线上答辩的形式进行,晋级决赛的队伍需提前准备答辩材料,包括答辩PPT、参赛总结、核心代码。 2.晋级决赛团队需提交答辩PPT初稿,具体时间待组委会通知。组委会将审核并反馈修改建议,而后提交答辩PPT终稿。决赛答辩时间地点安排另行通知。 3.答辩形式,每支队伍15分钟的陈述时间和10分钟的评委问答时间。评委将根据选手的技术思路、理论深度和答辩表现进行综合评分。 4.决赛分数将根据参赛队伍的线上程序成绩和答辩成绩加权得出。 评分权重:复赛线上成绩占60%,决赛答辩成绩占40%,主办方将依据决赛分数评选出大赛奖项。

大赛组织

主办:阿里云、英特尔(中国) 承办:阿里云天池平台、阿里云数据库事业部 阿里云数据库logo更新为下图,源文件钉钉小窗提供

赛事声明

  1. 为了确保整个大赛顺利、公正地进行,以及保证参赛选手的合法权益,参赛选手报名时应阅读和确认大赛官网上的参赛协议,自觉遵守协议规定。
  2. 在大赛举办过程中,竞赛规程可能会有少量的变更和调整,所有内容均以大赛官网为准。
  3. 本大赛规程的最终解释权归本届大赛组织委员会所有。

竞赛题目

PolarDB-X是阿里云自研云原生数据库PolarDB的分布式版本,近十多年来,业界逐渐开始探索分布式数据库,通过多服务器水平扩展方式替换传统的单机数据库垂直升配,满足降低成本、增长性能的需求。PolarDB-X目前具备分布式的水平扩容、Paxos金融级高可用、强一致分布式事务、HTAP混合负载、以及MySQL生态兼容等重要特性。2021年10月份,阿里云宣布正式开源 PolarDB-X 数据库,基于全内核开源的模式,可满足云上和云下对于分布式数据库的一致体验。

本次比赛以分布式NewSQL为背景,围绕数据库索引的多维查询。比如用户登录时可以按照用户名、账号id等多种查询方式,在数据库实现上主要依赖于索引,在写入的时候维持数据和索引的一致性,查询时基于索引来提供多维查询的诉求。

本赛题设计的业务背景主要参考典型的分布式应用场景-用户信息注册,在登录时可以按照用户名、账号id等多种查询方式,数据库实现上主要依赖于索引,在写入的时候维持数据和索引的一致性,同时查询时基于索引来提供多维查询的诉求。

另外,赛题结合英特尔®傲腾™第二代傲腾持久内存(BPS),探索新介质和新软件系统上极致的持久化和性能。参赛者在充分认知 BPS 硬件特质特性的情况下设计最优的数据结构。

赛题说明

参赛阶段,选手需要实现一个简化版的分布式NewSQL引擎, 我们提供8C 32G RAM和126G AEP的运行机器,其中评测数据会大于RAM,如何充分利用AEP特性将成为获胜关键。以下为赛题详细介绍:

初赛:提供1台126G的高性能AEP机型,实现单机版的高效的KV存储引擎,支持write、read、init接口。 赛题页遗漏了下方配图

复赛:提供4台126G的高性能AEP机型,实现分布式的高效的KV存储引擎,支持write、read、init接口,并实现自定义通讯协议。 赛题页遗漏了下方配图

表结构定义: id int64, user_id char(128), name char(128), salary int64 pk : id //主键索引 uk : user_id //唯一索引 sk : salary //普通索引 整个比赛涉及的表结构定义,其中第一行为具体的列名和对应的类型,第二行之后为对应的索引列信息,包含

  1. 主键索引(pk),测试数据本身会保证唯一,程序可不用额外处理
  2. 唯一索引(uk),测试数据本身会保证唯一,程序可不用额外处理
  3. 普通索引(sk),存在重复的值记录,程序需要考虑多值索引的优化

接口说明:

  1. void write (column_value[]),插入某张表的一行数据,包含了所有列信息。输入列按照schema的列定义顺序,且不存在null值。
  2. int read(select_column, where_column, column_key, column_value[]) , 读取某张表的多行记录按照返回列select_column做升序返回,模拟关系数据库的查询SELECT select_column FROM tmpWHERE where_column= column_key,结果集不会超过2000行。
  3. void init(host_ip_port, peer_ip_port[],String pmem_path, String disk_path),初始化接口,会在进程启动后调用,传递本机及集群信息,选手可以在这里做初始化和恢复流程。初赛中该接口传递null,复赛中传递相关集群信息。

read接口示例: read( "user_id", "name", "Alice",columnValue[]) 应该返回name为Alice的所有user_id

注意:(赛题页的注意未加粗)这里需要将结果写入columnValue,返回columnValue的条数;这样设计是为了降低java的GC损耗,降低因语言带来的性能差异。

由于语言限制和实现原因,实际接口以赛事方提供demo为准。

初赛

实现单机版的高效的KV存储引擎,支持write、read、init接口。 评测环境: ● 机器规格:(8 Core + 32G RAM + 126G AEP + 256G SSD) ● 数据集:数据总规模大于内存容量,小于总AEP存储容量 评测逻辑: 1)正确性评测: 此阶段评测程序会并发写入特定的行数据,同时进行任意次kill -9来模拟进程意外退出(参赛引擎需要保证进程意外退出时数据持久化不丢失),接着重新打开DB,调用init接口返回后,调用read接口来进行正确性校验。

2)性能评测: ● 随机写入:50个线程并发随机写入,每个线程使用write各写100万次随机数据 ● 随机读取:50个线程并发随机读取,每个线程各使用read读取100万次随机数据,其中查询pk/uk/sk的比例为2:2:1 提示:为简化复杂度,仅需考虑同一行记录的插入操作,不需要考虑行记录的更新或者删除。读取阶段会对所有读取的结果校验是否匹配,如不通过则终止,则评测失败。

复赛

实现分布式的高效的KV存储引擎,支持write、read、init接口,并实现自定义通讯协议。 我们沿用初赛的测试要求的同时,额外增加了挑战:增加NewSQL分布式的特性,提供4个和初赛相同的节点规格,组成一个分布式集群,集群内多个节点之间可自定义RPC进行通讯,以整个集群维度进行write/read处理,读写请求可能会在任意节点上被调用。 评测环境: ● 机器规格:4台 * (8 Core + 32G RAM + 126G AEP + 256G SSD) ● 数据集:数据总规模大于内存容量,小于总AEP存储容量 评测逻辑: 1)正确性评测(同初赛): 此阶段评测程序会并发写入特定的行数据,同时进行任意次kill -9来模拟进程意外退出(参赛引擎需要保证进程意外退出时数据持久化不丢失),接着重新初始化,调用init接口返回后,调用read接口来进行正确性校验。

2)性能评测: ● 随机写入:200个线程并发随机写入,每个线程使用write各写100万次随机数据。 ● 随机读取:200个线程并发随机读取,每个线程各使用read读取100万次随机数据,其中查询pk/uk/sk的比例为2:2:1 提示:简化复杂度,仅需考虑同一行记录的插入操作,不需要考虑行记录的更新或者删除。读取阶段会对所有读取的结果校验是否匹配,如不通过则终止,则评测失败

赛题规则

赛题页遗漏了下方配图

● 语言限定 JAVA/C/C++ ○ java 代码模板:https://code.aliyun.com/tianchi_polardbx_2022/java_demo ○ c/c++ 代码模板:https://code.aliyun.com/tianchi_polardbx_2022/cpp_demo

● 注册阿里云git账号: ○ 云效平台地址:https://code.aliyun.com/ ○ 需要将赛事方git用户tianchi_polarx_2022设为reporter,以便于拉取参赛选手代码 ○ 约定参赛选手提交git地址为https形式 ○ 建议参赛选手git仓库建议设为私有,并妥善保管账号、密码

● 程序目标 赛事方提供了模板代码,请仔细阅读模板代码中基类Engine定义,我们已为大家定义了比赛专用的Engine子类,参赛者通过编写代码,完善Engine子类来实现自己的存储引擎。 ● 排名规则 在正确性验证通过的情况下,对性能评测阶段整体计时,如果该阶段的正确检测全部通过,则成绩有效,根据总用时从低到高进行排名(用时越短排名越靠前)。 ● 作弊说明 赛事方对排名靠前的进行代码审核,如果发现有作弊行为,比如通过hack评测程序,绕过了必须的评测逻辑等行为,则程序无效,且取消参赛资格。 ● 评测限制 因评测资源有限,赛事方会对选手的评测次数进行一定的限制,具体限制如下: ○ 1个自然日提交不超过3次 ○ 超时时间约定为10分钟

赛题注意事项与参考资料

本地开发:对于没有AEP硬件的选手,可以本地完成基本的编译和调试后,通过提交代码方式进行性能测试。 AEP 开发参考手册: