發表日期 5/10/2022, 10:29:38 AM
在基礎軟件領域,國産數據庫的自主可控是一條必須要走的路。
數據庫,是計算機領域的基礎設施之一。所有應用的使用、用戶的行為,都需要容納進數據庫裏。從問世那一天起,數據庫就承擔著嚮上支撐應用軟件,嚮下調動係統資源的功能,在 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”隊隊長黃人煌錶示,在計算機的世界裏,數據不僅要存儲,還涉及到讀取,比如瀏覽記錄、購物車、遊戲存檔,都需要調取壓縮數據,而用戶是不會等上十幾秒、甚至幾分鍾去等待界麵跳齣的。
圖 | 中國人民大學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開始係統化學習數據庫理論知識,也更能幫助學生走嚮企業積纍經驗。
黃人煌拉上瞭女友塗薦泓、學弟王元楨,三人一起報名。“這種組閤其實很微妙,我們三個都有各自不同的想法”,黃人煌介紹,“麵對問題時,我們可以産生不同的思路和方案,最後評估誰的最有效,就用誰的方案。”
這次決賽,“NoPassCET4”也選擇瞭不同路徑結題。
黃人煌的想法是將這些數據通過編碼壓縮成列存,節省空間,其他保留行存,“就像一張錶格裏,把有規律的數字用簡單函數錶示,起到節省空間的效果。”
王元楨則提齣更大膽的思路,他希望找到一個編碼把所有的列都進行壓縮,再統一讀取――這意味著他不僅要找到規律列的編碼,還要找到非規律列的編碼,整體涉及到的計算量就非常大。
短時間內,雙方都無法說服對方接受自己的方案。為瞭最快完成解題,他們決定先各自為戰。
王元楨把9列字符串列也全部壓縮成瞭20比特的字符串,嘗試用字典編碼進行解壓。但字符串大多沒有規律,王元楨這邊的計算難度很大,他有些擔心,似乎很難在24小時內完成目標。
但慶幸的是,黃塗小分隊在3個小時內就有瞭一些眉目。以一個全局遞增的數據列為例,塗薦泓通過在列前加隱藏字段的方式解決瞭復雜運算的問題,很快嚮下一步進軍。
就在黃人煌信心滿滿的開啓下一階段時,決賽場的另一支隊伍則陷入一片焦灼――來自華東師範大學的“東亞男兒隊”發現,數據導不齣來瞭。
隊長連薛超“當時腦袋裏都懵瞭”。在參與決賽前,上海正遭遇復雜疫情,隊伍裏三個成員都被睏在宿捨樓,每天隻能通過在綫會議軟件交流,遇到復雜的情況則共享屏幕讓隊員互相查看代碼是否有問題。
圖 | 華東師範大學東亞男兒隊三人小組閤照
為瞭振奮士氣,隊伍三人都給自己換上瞭“小黃雞頭像”,喜歡阿拉伯文化的隊長連薛超是一隻頭戴阿拉伯頭巾和默罕默德的徽章的小黃雞,喜歡道教文化的翁飛揚是一隻帶道冠的小黃雞,而鬍梓銳則給自己的小黃雞頭像帶上瞭馬剋思同款白發。
他們本希望,通過一緻的頭像鼓舞士氣,但誰能想到,比賽過程中齣瞭這樣的岔子。
和“NoPassCET4”的黃塗小分隊一樣,“東亞男兒隊”也發現瞭數據裏某些數據列的規律性,並在淩晨1點左右,找到瞭與之對應字典編碼和delta編碼,準備開始建錶。
通常來說,在做數據的技術操作時,大傢會先基於基本想法寫齣技術命令,然後將這一技術命令配置到錶格裏,導入原始數據驗證。但沒想到的是,正當他們準備繼續攻剋delta編碼、以及索引所涉及到的B+樹編碼時,電腦彈齣來的內容卻是“建錶失敗!”
此時,距離比賽已經過瞭12個小時。和工作人員反復溝通後,東亞男兒隊纔排查齣來,原來是程序裏呈現齣來的加載時間太長,等成功建錶後,時間已到瞭淩晨4點,離比賽結束隻剩下9小時不到。
因為長時間比賽,沒有休息,隊員裏每個人都精疲力盡,但沒有一個人喊纍,大傢依然在堅持解題。
和“東亞男兒隊”相似的是,另一支來自電子科技大學的參賽隊伍“push-d”,也因為一個小問題被卡住瞭3個小時,他們的時間同樣變得緊張。
“push-d”隊長李浩、隊友李世豪和王書涵在最開始時采用瞭“NoPassCET4”王元楨同樣的思路,但他們沒有從編碼著手,而是選擇瞭哈夫曼算法。
哈夫曼算法屬於熵編碼,根據數據中不同字符齣現的概率,用不同長度的編碼錶示不同字符,“push-d”希望通過另外6組沒有規律的數據列,用哈夫曼算法解決問題。
隊長李浩一開始信心滿滿,畢竟“push-d”三人小組曾在半年時間內,利用師兄師姐們打下的設計基礎,實打實地做齣瞭大學數據庫實驗室內數據庫的基本功能。因為導師姓段,因此在比賽時他們留下瞭D字母,把隊伍命名為“push-d”,用那段時光鞭策自己,帶著老師的期望前進。
圖 | 電子科技大學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”的哈夫曼算法也同樣讓人驚艷。
在這次比賽中,還有其它的一些隊伍也錶現齣瞭相當亮眼的一麵。
圖 | 此次大賽獲奬名單
“兩隻老虎吃蘿蔔”隊伍,團隊成員單海康、陳勁鋼分彆在武漢、深圳兩地,跨地閤作,決賽時因為場地簡陋、蚊蟲眾多,兩人打瞭一夜蚊子,又在比賽過程中遭遇實驗室服務器宕機、分布式遭遇宕機,但最終在淩晨5點調通代碼,拿到第三名。
華東師範大學的“lying_flat”隊伍,名為躺平,實則全力以赴。隊裏隻有隊長賈宇航一人,他獨自扛起瞭一支隊伍,他的生存理念是《死亡詩社》裏的“seize the day”,把握當下。
這種理念也讓他在上海封控期間通過數據庫的比賽把握他自己的人生,最終拿到瞭季軍。在黑客鬆的導師評語裏,導師評點他:“一人成隊,對B+樹優化分析較深入,且對列存有一定的瞭解,個人能力較強。”
中國科學技術大學的“健胃又消食”小隊,原本有2位同學,後來隊友因故中途退賽,隊長潘仁華白天在公司實習、晚上抽時間比賽,一個人走完瞭全程。
華中科技大學的“一一一一一一一一”小隊,同樣遭遇瞭隊友退賽的意外,隊長一人撐著走完瞭全程。他們的分值或許不高,但堅持到這場黑客馬拉鬆最後的毅力和耐性,卻依然讓人感動。
事實上,這纔是技術比賽最動人的地方,大傢通過技術的碰撞與交流相互學習、共同進步,而並不僅僅以是否獲奬而論。
這場24小時的對決,並不是這次數據庫大賽的全部。從去年十月開始,所有的隊伍一邊學、一邊練,最終這20支隊伍走到瞭決賽。
在這些技術人員的稱呼裏,決賽還有另外一個名字:“黑客鬆”。它原指一種程序員聚集在一起、以緊密閤作的形式去實現某種技術的嘗試,是一種程序設計裏的馬拉鬆,也是一種程序員用技術溝通和碰撞的狂歡。
在數據庫大賽裏,它也意味著最後的這24小時,是這些參賽者們這場馬拉鬆的終點。
在這個時刻,每一支隊伍所麵臨的壓力都是巨大的,但每一組都頂著這種壓力,走瞭下來。
在技術的世界裏,並沒有一個清晰的“第一”的概念。
大傢對技術的理解不同,在麵臨同一個技術問題時,也常常會想齣不同的技術實現路徑。當這種路徑並不是唯一的時候,百花齊放纔會成為可能。因為每個人都可以去瞭解其他人技術實現的方法,在這種和而不同裏相互學習、共同進步。
這正是技術的魅力所在。
在比賽結束後,每個隊伍也對技術有瞭不同的理解。
“NoPassCET4”的黃人煌,感受到數據庫的重點之一,在於平衡,平衡各方麵的性能,達到綜閤錶現更好的效果。他覺得數據庫越學越復雜、越學越有魅力。
“東亞男兒隊”的連薛超,在從前做學術研究時,總是關注性能,但這次實打實地上手操作之後,他發現:性能固然重要,但對用戶來說,性能達到一定程度再提升消費者的感知是不大的,這時將精力放在數據庫生態方麵可能會更好。他有瞭從學術到應用上的感受的轉變。
“Push-d”則在這個過程中接觸到一些原來沒有接觸過的知識,數據庫大賽一邊學、一邊比的整體設計,讓他們對數據庫從理論到實踐,都有瞭全新的體驗。
在十四五規劃裏,國傢提倡技術自主,而在計算機領域,數據庫作為基礎設施之一,它的自主顯得尤其重要。
在過去十年,中國的數據庫從無到有,建立起瞭達夢、OceanBase,等數據庫。但這遠不是終點,中國的數據庫要走下去,還需要容納不同的血液與人纔。
對參與這場比賽的很多技術人來說,正是因為數據庫這件事有挑戰,纔更有趣、更吸引人。他們相信:中國的數據庫不會止步於此,而他們想要為中國數據庫的未來添磚加瓦。