天天看点

一场没有硝烟的24小时人机大战,这群95后拼了

一场没有硝烟的24小时人机大战,这群95后拼了

在基础软件领域,国产数据库的自主可控是一条必须要走的路。

数据库,是计算机领域的基础设施之一。所有应用的使用、用户的行为,都需要容纳进数据库里。从问世那一天起,数据库就承担着向上支撑应用软件,向下调动系统资源的功能,在 IT 架构中处于核心位置,被誉为“软件行业皇冠上的明珠”。

世界知名的数据库甲骨文(Oracle)、IBM和微软目前控制着全球75%的数据库市场份额。甲骨文去年的市场份额为39.8%,2021财年收入达到405亿美元(约合2700亿人民币),其重要性就可见一斑。

2021年3月,“十四五”规划纲要正式颁布,着重提到了要培育壮大大数据等新兴数字产业。这几年,中国涌现出越来越多国产自研数据库。特别是在分布式数据库领域,中国探索出自己的一条路。

但国内数据库领域研发人才紧缺,严重影响着数据库产业发展。中国的数据库要继续走下去,必然需要吸纳新鲜的血液,也需要一些高校、互联网企业的计算机人才,支撑起中国数据库未来的发展。

“OceanBase 数据库大赛” 作为国内首个分布式数据库内核开发大赛,希望汇聚数据库领域的青年人才,为他们搭建一个技术交流的平台,让国内数据库人才在这里碰撞出新的火花。

这场比赛从去年8月,一直持续到今年4月,参赛队伍一边学、一边比,通过较长时间的学与练,对数据库有了从浅到深,从整体粗疏到深入攻克某个难题,每一支队伍都获得了成长。

在2022年4月28日,这场漫长的程序员马拉松迎来最后的决赛,在这最后的24个小时里,每一支队伍都全力以赴。

因为疫情的关系,最后的比赛面临的坎坷比此前多,但这些青年计算机人,却不畏困难,最后拿出了他们亮眼的成绩。而他们提出的各种不同的解决方案,也让彼此之间的相互学习,互相进步,成为可能。

技术的魅力正在于此:因为实现路径不同,有时很难有一个公认的NO.1,但不同思路之间的相互碰撞,百花齐放,最终才会让中国计算机技术整体走得更远。

以下是他们的真实故事:

文 | 小北

编辑 | 蔡玉

4月28日中午12时,一群年轻人迎来了一场特殊的“战争”。

这场战争没有硝烟,但却不影响其所带来的紧张感。现场的20支学生队伍需要在电脑前进行24小时的编程——他们要和内存进行一场关于争夺空间的较量,一场人和机器之间的博弈。

当中国网民数量走到10亿的庞大量级,如何存储数据、分析数据,成为当前互联网行业所必须解决的问题。空间无法无序扩张,那么,如何在有限的空间里通过技术去分析和处理更大的数据量,则成为决定互联网能否有序、顺畅运行的基础。

带着这样的愿景,来自中国人民大学的“NoPassCET4”、华东师范大学的“东亚男儿队”、中国电子科技大学的“push_d_”等20支队伍冲进“OceanBase 数据库大赛”决赛圈。

“我们要做的,是让数据和存储空间达到最完美的平衡,不仅是压缩数据,还要考虑各种性能“,冲进决赛圈“NoPassCET4”队队长黄人煌表示,在计算机的世界里,数据不仅要存储,还涉及到读取,比如浏览记录、购物车、游戏存档,都需要调取压缩数据,而用户是不会等上十几秒、甚至几分钟去等待界面跳出的。

一场没有硝烟的24小时人机大战,这群95后拼了

图 | 中国人民大学NoPassCET 4 三人小组合照

在此之前,“NoPassCET4”从去年8月开始到现在,先后和国内外246所高校、200家企业、1179支团队,来自清华大学、人民大学、浙江大学、南开大学、电子科技大学、华东师范大学、华中科技大学、哥伦比亚大学、香港中文大学、南洋理工大学等国内外高校近2000名数据库爱好者进行角逐,走到终点,实属不易。

13:00,“NoPassCET4”等决赛队伍拿到了最终决定胜负的考题:将一组300万行*48字节的数据,分为9列,存储为128M的数据文件,以及60M的索引文件。

以往在学校实验室里,这样的数据量往往需要7~10天才能完成。但现在,他们只有24个小时,在这24个小时里,他们需要对数据进行分析、找出解决路径、编写编码或算法、实现文件压缩、实现索引压缩,最后再验证效果。

同时,他们还必须在这些所有的步骤里,寻求一种平衡,让最后的技术呈现能完整、好用,甚至具有美感,时间非常紧张。

接下来的24个小时,他们必须全力以赴。

如果把“NoPassCET4”队名直接翻译成中文,是“未过4级小队”。

在程序员圈子里,这是一个“老梗”——如果队伍里有人连大学英语4级都没过,那他肯定把所有时间都花在实验室里搞研究了。“都这么努力了,害怕冠军不是你的吗?”队长黄人煌说道。

“NoPassCET4”的队伍构成有些特殊,三个小队里包括了一对情侣。“跟神雕侠侣似的,他俩是侠侣,我是神雕”,平日里热爱武侠小说的队员王元桢笑着说道。

一次校园宣讲活动上,队长黄人煌和他的女友涂荐泓了解到了“2021 OceanBase 数据库大赛”,该赛事由国内分布式数据库领导者OceanBase与蚂蚁集团学术合作团队一起举办,面向全国爱好数据库的高校学生,不仅可以帮助学生从0开始系统化学习数据库理论知识,也更能帮助学生走向企业积累经验。

一场没有硝烟的24小时人机大战,这群95后拼了

黄人煌拉上了女友涂荐泓、学弟王元桢,三人一起报名。“这种组合其实很微妙,我们三个都有各自不同的想法”,黄人煌介绍,“面对问题时,我们可以产生不同的思路和方案,最后评估谁的最有效,就用谁的方案。”

这次决赛,“NoPassCET4”也选择了不同路径结题。

黄人煌的想法是将这些数据通过编码压缩成列存,节省空间,其他保留行存,“就像一张表格里,把有规律的数字用简单函数表示,起到节省空间的效果。”

王元桢则提出更大胆的思路,他希望找到一个编码把所有的列都进行压缩,再统一读取——这意味着他不仅要找到规律列的编码,还要找到非规律列的编码,整体涉及到的计算量就非常大。

短时间内,双方都无法说服对方接受自己的方案。为了最快完成解题,他们决定先各自为战。

王元桢把9列字符串列也全部压缩成了20比特的字符串,尝试用字典编码进行解压。但字符串大多没有规律,王元桢这边的计算难度很大,他有些担心,似乎很难在24小时内完成目标。

但庆幸的是,黄涂小分队在3个小时内就有了一些眉目。以一个全局递增的数据列为例,涂荐泓通过在列前加隐藏字段的方式解决了复杂运算的问题,很快向下一步进军。

就在黄人煌信心满满的开启下一阶段时,决赛场的另一支队伍则陷入一片焦灼——来自华东师范大学的“东亚男儿队”发现,数据导不出来了。

队长连薛超“当时脑袋里都懵了”。在参与决赛前,上海正遭遇复杂疫情,队伍里三个成员都被困在宿舍楼,每天只能通过在线会议软件交流,遇到复杂的情况则共享屏幕让队员互相查看代码是否有问题。

一场没有硝烟的24小时人机大战,这群95后拼了

图 | 华东师范大学东亚男儿队三人小组合照

为了振奋士气,队伍三人都给自己换上了“小黄鸡头像”,喜欢阿拉伯文化的队长连薛超是一只头戴阿拉伯头巾和默罕默德的徽章的小黄鸡,喜欢道教文化的翁思杨是一只带道冠的小黄鸡,而胡梓锐则给自己的小黄鸡头像带上了马克思同款白发。

他们本希望,通过一致的头像鼓舞士气,但谁能想到,比赛过程中出了这样的岔子。

和“NoPassCET4”的黄涂小分队一样,“东亚男儿队”也发现了数据里某些数据列的规律性,并在凌晨1点左右,找到了与之对应字典编码和delta编码,准备开始建表。

通常来说,在做数据的技术操作时,大家会先基于基本想法写出技术命令,然后将这一技术命令配置到表格里,导入原始数据验证。但没想到的是,正当他们准备继续攻克delta编码、以及索引所涉及到的B+树编码时,电脑弹出来的内容却是“建表失败!”

此时,距离比赛已经过了12个小时。和工作人员反复沟通后,东亚男儿队才排查出来,原来是程序里呈现出来的加载时间太长,等成功建表后,时间已到了凌晨4点,离比赛结束只剩下9小时不到。

因为长时间比赛,没有休息,队员里每个人都精疲力尽,但没有一个人喊累,大家依然在坚持解题。

和“东亚男儿队”相似的是,另一支来自电子科技大学的参赛队伍“push_d_”,也因为一个小问题被卡住了3个小时,他们的时间同样变得紧张。

“push_d_”队长李浩、队友李世豪和王书涵在最开始时采用了“NoPassCET4”王元桢同样的思路,但他们没有从编码着手,而是选择了哈夫曼算法。

哈夫曼算法属于熵编码,根据数据中不同字符出现的概率,用不同长度的编码表示不同字符,“push_d_”希望通过另外6组没有规律的数据列,用哈夫曼算法解决问题。

队长李浩一开始信心满满,毕竟“push_d_”三人小组曾在半年时间内,利用师兄师姐们打下的设计基础,实打实地做出了大学数据库实验室内数据库的基本功能。因为导师姓段,因此在比赛时他们留下了D字母,把队伍命名为“push_d_”,用那段时光鞭策自己,带着老师的期望前进。

一场没有硝烟的24小时人机大战,这群95后拼了

图 | 电子科技大学push_d_三人小组合照

队伍三人都更习惯于用计算机交谈,在现实中显得有些腼腆,总是动不动就低头,看起来似乎不大自信,但其实他们是所有队伍里“最勇的那一支”,他们是最快想到用非编码方式、对所有数据列实现直接压缩的人。

也许是因为太过于紧张,队友李世豪在数值转换时忽略了0,卡了3个小时后,才发现是基础数值错了,他一拍脑袋,“怎么犯了这样一个错!脑袋写麻了!”

李浩和王书涵被他赶着去休息,李世豪一个人自己想,想好之后又把所有的内容全部过了一次——在之前的初赛和复赛时,他感到自己做的事不够多,就想让兄弟们多休息一会儿,自己在决赛多承担一些。

比赛的整整24个小时,李世豪一分钟也没有休息,最终三人终于在次日12点钟完成了他们的所有技术步骤,实现了压缩目标。

4月29日早上10点,比赛已持续了21小时。

因建表失败卡了3个小时的“东亚男儿队”,终于在10点左右完成了所有的技术指令,看到自己在黑客松实时榜上排到了第一后,他们松了一口气,趴在桌子上休息了一会。

结果,当他们11:30醒来时,实时榜的第一名却出现了“NoPassCET4”的名字,黄人煌和涂荐泓在中午11:30时也完成了所有的技术步骤。

紧接着,12点钟,“push_d_”也一路猛追,终于完成了哈夫曼算法、比分快速爬升。

“东亚男儿队”队长连薛超吓坏了,他本想着他们的压缩程度较高,索引压缩了40%,存储压缩了47%,应该不会有其他队伍会赶超。发现“NoPassCET4”超越他们后,“东亚男儿队”马上去查自己的路径里还有没有可以压缩的空间,但时间已来不及了。

最终,“NoPassCET4”获得了冠军。复盘时,“NoPassCET4”分享了他们对索引数据的字节优化改动,“东亚男儿队”看完后恳切地评价道:这个方法的确简单粗暴,非常直接地实现了压缩结果,而“push_d_”的哈夫曼算法也同样让人惊艳。

在这次比赛中,还有其它的一些队伍也表现出了相当亮眼的一面。

一场没有硝烟的24小时人机大战,这群95后拼了

图 | 此次大赛获奖名单

“两只老虎吃萝卜”队伍,团队成员单海康、陈劲钢、李响分别在武汉、深圳两地,跨地合作,决赛时因为场地简陋、蚊虫众多,团队打了一夜蚊子,又在比赛过程中遭遇实验室服务器宕机、分布式遭遇宕机,但最终在凌晨5点调通代码,拿到三等奖。

华东师范大学的“lying_flat”队伍,名为躺平,实则全力以赴。队里只有队长贾宇航一人,他独自扛起了一支队伍,他的生存理念是《死亡诗社》里的“seize the day”,把握当下。

这种理念也让他在上海封控期间通过数据库的比赛把握他自己的人生,最终拿到了季军。在黑客松的导师评语里,导师评点他:“一人成队,对B+树优化分析较深入,且对列存有一定的了解,个人能力较强。”

中国科学技术大学的“健胃又消食”小队,原本有2位同学,后来队友因故中途退赛,队长潘仁华白天在公司实习、晚上抽时间比赛,一个人走完了全程。

华中科技大学的“一一一一一一一一”小队,同样遭遇了队友退赛的意外,队长一人撑着走完了全程。他们的分值或许不高,但坚持到这场黑客马拉松最后的毅力和耐性,却依然让人感动。

一场没有硝烟的24小时人机大战,这群95后拼了

事实上,这才是技术比赛最动人的地方,大家通过技术的碰撞与交流相互学习、共同进步,而并不仅仅以是否获奖而论。

这场24小时的对决,并不是这次数据库大赛的全部。从去年十月开始,所有的队伍一边学、一边练,最终这20支队伍走到了决赛。

在这些技术人员的称呼里,决赛还有另外一个名字:“黑客松”。它原指一种程序员聚集在一起、以紧密合作的形式去实现某种技术的尝试,是一种程序设计里的马拉松,也是一种程序员用技术沟通和碰撞的狂欢。

在数据库大赛里,它也意味着最后的这24小时,是这些参赛者们这场马拉松的终点。

在这个时刻,每一支队伍所面临的压力都是巨大的,但每一组都顶着这种压力,走了下来。

在技术的世界里,并没有一个清晰的“第一”的概念。

大家对技术的理解不同,在面临同一个技术问题时,也常常会想出不同的技术实现路径。当这种路径并不是唯一的时候,百花齐放才会成为可能。因为每个人都可以去了解其他人技术实现的方法,在这种和而不同里相互学习、共同进步。

这正是技术的魅力所在。

在比赛结束后,每个队伍也对技术有了不同的理解。

“NoPassCET4”的黄人煌,感受到数据库的重点之一,在于平衡,平衡各方面的性能,达到综合表现更好的效果。他觉得数据库越学越复杂、越学越有魅力。

“东亚男儿队”的连薛超,在从前做学术研究时,总是关注性能,但这次实打实地上手操作之后,他发现:性能固然重要,但对用户来说,性能达到一定程度再提升消费者的感知是不大的,这时将精力放在数据库生态方面可能会更好。他有了从学术到应用上的感受的转变。

“push_d_”则在这个过程中接触到一些原来没有接触过的知识,数据库大赛一边学、一边比的整体设计,让他们对数据库从理论到实践,都有了全新的体验。

在十四五规划里,国家提倡技术自主,而在计算机领域,数据库作为基础设施之一,它的自主显得尤其重要。

在过去十年,中国的数据库从无到有,建立起了达梦、OceanBase,等数据库。但这远不是终点,中国的数据库要走下去,还需要容纳不同的血液与人才。

对参与这场比赛的很多技术人来说,正是因为数据库这件事有挑战,才更有趣、更吸引人。他们相信:中国的数据库不会止步于此,而他们想要为中国数据库的未来添砖加瓦。

继续阅读