天天看點

一場沒有硝煙的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,等資料庫。但這遠不是終點,中國的資料庫要走下去,還需要容納不同的血液與人才。

對參與這場比賽的很多技術人來說,正是因為資料庫這件事有挑戰,才更有趣、更吸引人。他們相信:中國的資料庫不會止步于此,而他們想要為中國資料庫的未來添磚加瓦。

繼續閱讀