1024程序员节 | 我在腾讯自研数据库,我为技术代言
隨著互聯(lián)網(wǎng)的發(fā)展,“程序員”這個(gè)名字逐漸為人們所關(guān)注到,其所代表的標(biāo)簽印象也變得更加多樣 —— 改變世界?Debug專(zhuān)業(yè)戶(hù)?格子衫代言人?……事實(shí)上,有那么一群人,比如騰訊數(shù)據(jù)庫(kù)工程師,他們將自己定義為“數(shù)字的工匠”,初心如一地用代碼創(chuàng)造產(chǎn)品、解決問(wèn)題,為國(guó)產(chǎn)數(shù)據(jù)庫(kù)發(fā)展助力。而對(duì)于我們來(lái)說(shuō),有他們的努力,數(shù)字世界也不再是虛無(wú)縹緲的數(shù)據(jù),而像冰山盤(pán)亙?cè)诤C嬉粯?#xff0c;深邃而沉穩(wěn)。
?
在“1024”程序員節(jié)到來(lái)之際,我們推出本期特別分享,邀請(qǐng)騰訊6位數(shù)據(jù)庫(kù)技術(shù)工程師,講述了他們對(duì)代碼技術(shù)的理解:
01
—
“我是騰訊云數(shù)據(jù)庫(kù)技術(shù)負(fù)責(zé)人雷海林,2007年大學(xué)畢業(yè)加入騰訊,負(fù)責(zé)過(guò)計(jì)費(fèi)、支付底層各大模塊的開(kāi)發(fā),包括分布式Cache系統(tǒng)‘Hold(厚德)’等,以及騰訊金融級(jí)安全可控分布式數(shù)據(jù)庫(kù)研發(fā)。我在騰訊,為數(shù)據(jù)庫(kù)國(guó)產(chǎn)化發(fā)展助力。”?
“我是騰訊云數(shù)據(jù)庫(kù)高級(jí)工程師賴(lài)錚,2018年加入騰訊,曾經(jīng)在MySQL數(shù)據(jù)庫(kù)官方團(tuán)隊(duì)工作,現(xiàn)在負(fù)責(zé)騰訊云數(shù)據(jù)庫(kù)內(nèi)核開(kāi)發(fā)。我在騰訊,為數(shù)據(jù)庫(kù)國(guó)產(chǎn)化發(fā)展助力。”
?
“我是騰訊IEG數(shù)據(jù)庫(kù)專(zhuān)家工程師陳福榮,2011年加入騰訊,曾經(jīng)做過(guò)Tendb Cluster和Tendis項(xiàng)目,現(xiàn)在騰訊IEGCROS團(tuán)隊(duì)負(fù)責(zé)騰訊游戲云存儲(chǔ)開(kāi)發(fā)。我在騰訊,為數(shù)據(jù)庫(kù)國(guó)產(chǎn)化發(fā)展助力。”
?
“我是騰訊云數(shù)據(jù)庫(kù)高級(jí)工程師陳再妮,2019年加入騰訊,從事數(shù)據(jù)多活、Oracle兼容、讀寫(xiě)分離等項(xiàng)目開(kāi)發(fā)。我在騰訊,為數(shù)據(jù)庫(kù)國(guó)產(chǎn)化發(fā)展助力。”
?
“我是騰訊云數(shù)據(jù)庫(kù)工程師張風(fēng)嘯,2019年加入騰訊,從事多源同步和數(shù)據(jù)校驗(yàn)?zāi)K的設(shè)計(jì)與開(kāi)發(fā)。我在騰訊,為國(guó)產(chǎn)數(shù)據(jù)庫(kù)發(fā)展助力。”
“我是騰訊云數(shù)據(jù)庫(kù)高級(jí)工程師陳松威,2018年加入騰訊,從事云數(shù)據(jù)庫(kù)內(nèi)核研發(fā),開(kāi)發(fā)過(guò)的功能包括企業(yè)級(jí)列加密函數(shù)、數(shù)據(jù)恢復(fù)工具、異步審計(jì),數(shù)據(jù)預(yù)熱等。我在騰訊,為國(guó)產(chǎn)數(shù)據(jù)庫(kù)發(fā)展助力。”
02
—
1 你為什么選擇從事數(shù)據(jù)庫(kù)底層研發(fā)?
雷海林:個(gè)人興趣更喜歡與計(jì)算機(jī)打交道,通過(guò)code去解決問(wèn)題;而一般來(lái)說(shuō),越是偏低層的系統(tǒng)軟件,技術(shù)挑戰(zhàn)也越大,而數(shù)據(jù)庫(kù)領(lǐng)域在性能優(yōu)化、高可用、擴(kuò)展性、數(shù)據(jù)一致性等方面一直有無(wú)限的可能,技術(shù)上可以做各種嘗試、各種創(chuàng)新探索,同時(shí)驅(qū)動(dòng)更廣泛的技術(shù)生態(tài)創(chuàng)新突破。
雷海林
?
賴(lài)錚:數(shù)據(jù)庫(kù)系統(tǒng)作為基礎(chǔ)的系統(tǒng)軟件,是很多應(yīng)用系統(tǒng)的核心。它涉及到的知識(shí)領(lǐng)域非常廣泛,包括操作系統(tǒng)、事務(wù)系統(tǒng)、并發(fā)處理等等,可以說(shuō)是軟件領(lǐng)域的明珠、人類(lèi)智慧的結(jié)晶。能從事這個(gè)領(lǐng)域的研發(fā)工作,會(huì)有一種使命感,同時(shí),如果做出了一點(diǎn)點(diǎn)成績(jī),也會(huì)給自己帶來(lái)巨大的滿(mǎn)足感。尤其是在數(shù)據(jù)爆炸的時(shí)代,對(duì)于數(shù)據(jù)的存儲(chǔ)和管理技術(shù)越來(lái)越成為計(jì)算機(jī)領(lǐng)域的關(guān)鍵性技術(shù),能在這樣快速變化的大潮中奮發(fā)搏擊,也是一件幸事。
?
陳福榮:應(yīng)該說(shuō)比較幸運(yùn),研究生階段就是從事數(shù)據(jù)庫(kù)方面的學(xué)習(xí)和研究,第一份工作是跟著導(dǎo)師做國(guó)產(chǎn)數(shù)據(jù)庫(kù),積累了一些經(jīng)驗(yàn),后來(lái)加入了騰訊游戲的DBA團(tuán)隊(duì)。所以,從學(xué)生到現(xiàn)在超過(guò)10年了,一直都是做數(shù)據(jù)庫(kù)相關(guān)的開(kāi)發(fā)工作。也很慶幸一直做著自己比較喜歡的工作。
?
陳再妮:最早在業(yè)務(wù)系統(tǒng)的后臺(tái)開(kāi)發(fā)時(shí),底層數(shù)據(jù)存儲(chǔ)使用到了數(shù)據(jù)庫(kù),發(fā)現(xiàn)很多大段的業(yè)務(wù)邏輯代碼,一條SQL就可以搞定,這使得我對(duì)數(shù)據(jù)庫(kù)產(chǎn)生了濃厚的興趣,開(kāi)始進(jìn)入這個(gè)領(lǐng)域。進(jìn)入后發(fā)現(xiàn)數(shù)據(jù)庫(kù)底層確實(shí)是復(fù)雜的東西,做起來(lái)特別有挑戰(zhàn),但一旦完成后也會(huì)讓我產(chǎn)生更多的成就感,這也驅(qū)動(dòng)了我一直從事下去。
?
張風(fēng)嘯:才開(kāi)始接觸技術(shù)是寫(xiě)Java Web的,參與了校內(nèi)小項(xiàng)目的開(kāi)發(fā),做了有一年多。在開(kāi)始覺(jué)得只是用框架,不夠深入有點(diǎn)無(wú)聊。后來(lái)通過(guò)社區(qū)接觸了很多之前沒(méi)接觸的新技術(shù),對(duì)一些基礎(chǔ)組件的底層實(shí)現(xiàn)產(chǎn)生了比較濃厚的興趣。后來(lái)進(jìn)入騰訊實(shí)習(xí)期間,調(diào)研了解了一些新的DB技術(shù),從而對(duì)數(shù)據(jù)庫(kù)的興趣更加濃烈。后來(lái)面試的時(shí)候也和面試官表達(dá)了想去做數(shù)據(jù)庫(kù)的意愿,沒(méi)想到真的遇上了。
?
陳松威:數(shù)據(jù)庫(kù)是三大系統(tǒng)軟件之一,涉及到的模塊眾多,是非常有深度、值得探索的領(lǐng)域。能從事數(shù)據(jù)庫(kù)底層研發(fā),是一件非常榮幸的事情。特別是在我們團(tuán)隊(duì),有多位在數(shù)據(jù)庫(kù)內(nèi)核領(lǐng)域深耕多年的技術(shù)大牛,他們總能知無(wú)不言言無(wú)不盡地幫助我,使我快速成長(zhǎng),這我更加堅(jiān)信從事數(shù)據(jù)庫(kù)內(nèi)核研發(fā)的選擇是正確的。
2 作為程序員,你做過(guò)的覺(jué)得最有成就感的三個(gè)業(yè)務(wù)或者事情是什么?
雷海林:我覺(jué)得最有成就感的事情是技術(shù)上比較追求完美地做出一些組件或者產(chǎn)品,解決難以解決的BUG,或者性能上的每一次超越和升級(jí):
a)??? 比如封裝zkapi,能讓大家用起來(lái)更方便,屏蔽很難處理的一些細(xì)節(jié)問(wèn)題,實(shí)現(xiàn)一個(gè)基本無(wú)鎖化的內(nèi)存池組件,解決偶發(fā)的毛刺問(wèn)題等等;
b)??? 比如花一個(gè)星期以上的時(shí)間,構(gòu)造數(shù)十億的請(qǐng)求去解決某個(gè)難以重現(xiàn)的數(shù)據(jù)一致性BUG;
c)???? 負(fù)責(zé)騰訊國(guó)產(chǎn)分布式數(shù)據(jù)庫(kù)的研發(fā),支撐各行業(yè)對(duì)分布式數(shù)據(jù)庫(kù)的需求。
?
賴(lài)錚:a)在InnoDB存儲(chǔ)引擎中實(shí)現(xiàn)了透明加密功能;
b)在InnoDB存儲(chǔ)引擎中實(shí)現(xiàn)了基于R樹(shù)的空間索引;
c)通過(guò)優(yōu)化熱點(diǎn)更新大幅度提升了秒殺場(chǎng)景下的系統(tǒng)性能。
賴(lài)錚
?
陳福榮:作為程序員,最有成就感的事情應(yīng)該就是做的一些核心功能或者優(yōu)化,能夠真正在業(yè)務(wù)上落地并且發(fā)揮作用。舉三個(gè)例子:
第一個(gè)是在數(shù)據(jù)庫(kù)上增加了在線(xiàn)加字段的能力。這應(yīng)該是我個(gè)人加入騰訊做的第一個(gè)比較大的功能點(diǎn),需要對(duì)Innodb底層存儲(chǔ)格式進(jìn)行優(yōu)化,當(dāng)時(shí)做的時(shí)候技術(shù)上挑戰(zhàn)很大,但完成后,它對(duì)業(yè)務(wù)減少停服時(shí)間的收益也特別明顯。當(dāng)?shù)谝粋€(gè)Demo做出來(lái)并且在第一個(gè)業(yè)務(wù)(當(dāng)年應(yīng)該是斗戰(zhàn)神)上線(xiàn)時(shí),還是很有成就感的。
第二個(gè)是研發(fā)互娛的分布式解決方案TenDBCluster,解決了原來(lái)數(shù)據(jù)庫(kù)無(wú)法水平擴(kuò)展的問(wèn)題,順應(yīng)了手游時(shí)代的爆發(fā)。大約在2015年,第一款業(yè)務(wù)從單機(jī)數(shù)據(jù)庫(kù)切換到TenDB Cluster時(shí),我跟另外一個(gè)同事一直堅(jiān)守了凌晨?jī)扇c(diǎn),最終業(yè)務(wù)順利切換,雖然比較晚了,但心里還是感到非常興奮。
第三個(gè)是TendisX冷熱混合存儲(chǔ)在騰訊云商業(yè)化,通過(guò)騰訊云對(duì)外開(kāi)放。
陳福榮
?
陳再妮:a)數(shù)據(jù)庫(kù)多中心多活模塊研發(fā):保障企業(yè)數(shù)據(jù)庫(kù)的高可用,為客戶(hù)業(yè)務(wù)系統(tǒng)實(shí)現(xiàn)7×24小時(shí)不間斷高效平穩(wěn)運(yùn)行發(fā)揮了重要作用;
b)Oracle兼容特性研發(fā),助力Oracle兼容版本的數(shù)據(jù)庫(kù)產(chǎn)品功能順利上線(xiàn),極大提升了騰訊云數(shù)據(jù)庫(kù)助力行業(yè)技術(shù)國(guó)產(chǎn)化的優(yōu)勢(shì);
c)完成騰訊自研分布式HTAP國(guó)產(chǎn)數(shù)據(jù)庫(kù)開(kāi)源。
?
張風(fēng)嘯:a)一個(gè)是實(shí)現(xiàn)了數(shù)據(jù)庫(kù)遷移中異構(gòu)數(shù)據(jù)遷移和同步的數(shù)據(jù)校驗(yàn)?zāi)K,解決了據(jù)遷移中的一致性校驗(yàn)問(wèn)題。
b)進(jìn)一步完善了數(shù)據(jù)庫(kù)異構(gòu)多源同步的功能,提升了產(chǎn)品的易用性。
c)最關(guān)鍵的是大學(xué)期間教女孩子寫(xiě)計(jì)算機(jī)的大作業(yè),最后變成了女朋友。
?
陳松威:a)原創(chuàng)了業(yè)界唯一的數(shù)據(jù)恢復(fù)工具,能夠從損壞的表文件中恢復(fù)用戶(hù)數(shù)據(jù),保障數(shù)據(jù)安全。
b)設(shè)計(jì)并實(shí)現(xiàn)了異步審計(jì),將審計(jì)性能影響降至3%,在業(yè)界遙遙領(lǐng)先。
c)原創(chuàng)了數(shù)據(jù)庫(kù)主從切換前,備機(jī)的數(shù)據(jù)預(yù)熱功能。
?
3、你認(rèn)為對(duì)程序員來(lái)說(shuō)最重要的非技術(shù)要素是什么?
雷海林:尋根問(wèn)底的精神。比如程序出現(xiàn)了某個(gè)罕見(jiàn)的異常現(xiàn)象,那也一定是在代碼層面出現(xiàn)了問(wèn)題,我們要盡全力找到并解決它,不能因?yàn)樗浅E及l(fā)而忽視。
?
賴(lài)錚:保持好奇。
?
陳福榮:第一,需要刨根問(wèn)底的精神。對(duì)于一個(gè)技術(shù)問(wèn)題,如果這個(gè)問(wèn)題是自己的主要工作,或者是某個(gè)待解決問(wèn)題的關(guān)鍵路徑,必須把這些問(wèn)題完全搞清楚,不能似懂非懂。對(duì)于底層技術(shù)而言,對(duì)更多底層問(wèn)題的鉆研,會(huì)發(fā)現(xiàn)這些問(wèn)題的解決思路其實(shí)是類(lèi)似的,漸漸會(huì)建立自己的方法論,因此不要輕易放過(guò)一個(gè)問(wèn)題或者bug。
第二,對(duì)最終結(jié)果負(fù)責(zé)。不能僅僅滿(mǎn)足于功能開(kāi)發(fā)完成,這點(diǎn)特別重要。一個(gè)任務(wù),一定不僅僅是希望這個(gè)功能跑起來(lái),更多是希望真正能夠解決業(yè)務(wù)問(wèn)題和痛點(diǎn)。如果開(kāi)發(fā)人員僅僅把自己定位成代碼編寫(xiě)者,是不夠的。
第三,可以有一點(diǎn)點(diǎn)代碼潔癖,這樣會(huì)讓自己寫(xiě)出風(fēng)格更好的代碼。
?
陳再妮:做事嚴(yán)謹(jǐn),就像計(jì)算機(jī)的世界非0即1;態(tài)度認(rèn)真負(fù)責(zé),值得信賴(lài)。
陳再妮
?
張風(fēng)嘯:我覺(jué)得是對(duì)感興趣的事情的喜愛(ài)和追求。技術(shù)和其他方面都一樣,一定是有興趣、有追求,才能做得更好。
?
陳松威:我覺(jué)得是,要有一種“空杯心態(tài)”。
4、厲害的程序員都有哪些特別的能力?
雷海林:a)學(xué)習(xí)能力。個(gè)人很渺小,要不斷地虛心學(xué)習(xí),看書(shū)、看文章論文、多掌握原理性質(zhì)的東西;
b)熱愛(ài)閱讀開(kāi)源社區(qū)好的代碼,通過(guò)學(xué)習(xí)別人的代碼提升自己的編程能力;
c)對(duì)自己有信心,遇事不妥協(xié),高標(biāo)準(zhǔn)要求自己,喜歡去解決工作領(lǐng)域各種技術(shù)上的挑戰(zhàn)。
?
陳福榮:第一是學(xué)習(xí)能力。開(kāi)發(fā)這個(gè)領(lǐng)域新技術(shù)是層出不窮,如果不具備很好的學(xué)習(xí)能力,很容易會(huì)出現(xiàn)一些力不從心的狀態(tài)。當(dāng)然,如果有比較好的計(jì)算機(jī)基礎(chǔ)理論的背景,學(xué)習(xí)起來(lái)是可以觸類(lèi)旁通的。
第二個(gè)是抗壓能力。線(xiàn)上bug是不可避免的,如果出現(xiàn)線(xiàn)上故障壓力一定是很大的。但此時(shí)最重要的是優(yōu)先恢復(fù)業(yè)務(wù),因此,一定要頂住壓力,保持思路清晰,尋找最高效的解決辦法。
第三個(gè)是心態(tài)調(diào)整能力。厲害的程序員都會(huì)表現(xiàn)出干勁十足,精神飽滿(mǎn),除了本身對(duì)工作的熱愛(ài)外,還需要自己心態(tài)上的調(diào)整,以及適當(dāng)?shù)男箟悍绞桨ㄥ憻捝眢w等。
?
陳再妮:a)極客精神:對(duì)未知技術(shù)保持好奇之心,并持續(xù)學(xué)習(xí);
b)看待問(wèn)題可以通過(guò)表象直到問(wèn)題根源;
c)有趣的靈魂:代碼注釋寫(xiě)的讓人如沐晨風(fēng),比如讓模塊運(yùn)行起來(lái):
/* Do the modulemagic dance */PG_MODULE_MAGIC;賴(lài)錚:思維縝密,邏輯性極強(qiáng)。?
張風(fēng)嘯:專(zhuān)注, 細(xì)致,心思縝密,思考全面;以及對(duì)問(wèn)題刨根究底的態(tài)度,深入鉆研。
陳松威:邏輯性強(qiáng)、創(chuàng)造力強(qiáng)、思維嚴(yán)謹(jǐn)、良好的溝通能力。
5、對(duì)數(shù)據(jù)庫(kù)未來(lái)發(fā)展趨勢(shì),有什么看法或建議?
雷海林:數(shù)據(jù)庫(kù)必定還是會(huì)往分布式數(shù)據(jù)庫(kù)的方向繼續(xù)發(fā)展。整體來(lái)看,則將在數(shù)據(jù)庫(kù)彈性擴(kuò)展、跨地域進(jìn)行分布調(diào)度、6個(gè)9(99.9999%)以上的可用性、HTAP融合、SQL智能診斷與優(yōu)化、極致的性能等方向持續(xù)發(fā)展——最后回歸數(shù)據(jù)庫(kù)的本質(zhì):當(dāng)某個(gè)業(yè)務(wù)獲取到一個(gè)數(shù)據(jù)庫(kù)的域名地址,數(shù)據(jù)庫(kù)就是一個(gè)黑盒子以極致的性能提供SQL讀寫(xiě)服務(wù)。不用再關(guān)心容量、SQL調(diào)優(yōu)、容災(zāi)等細(xì)節(jié)。
?
賴(lài)錚:數(shù)據(jù)庫(kù)未來(lái)會(huì)操作面向云計(jì)算的方向發(fā)展,云原生數(shù)據(jù)庫(kù)將會(huì)成為主流。彈性擴(kuò)展、TP+AP、海量數(shù)據(jù)等特點(diǎn)將會(huì)充分顯示出云原生數(shù)據(jù)庫(kù)的優(yōu)勢(shì)。
?
陳福榮:1)分布式。未來(lái)的數(shù)據(jù)庫(kù)一定主要是使用分布式的架構(gòu),無(wú)論是share nothing還是share disk,都能較好解決數(shù)據(jù)庫(kù)的容量問(wèn)題,便于彈性擴(kuò)縮容;
2)軟硬結(jié)合。未來(lái)數(shù)據(jù)庫(kù)一定會(huì)結(jié)合軟硬一體化的設(shè)計(jì)理念,充分發(fā)揮硬件的性能,滿(mǎn)足企業(yè)級(jí)用戶(hù)的需求,如更快的響應(yīng)時(shí)間、更高的安全性、更大的容量、更低的成本等;
3)智能化。未來(lái)的數(shù)據(jù)庫(kù)會(huì)結(jié)合數(shù)據(jù)庫(kù)的運(yùn)行狀態(tài)以及AI的能力,提升數(shù)據(jù)庫(kù)管理的智能化水平,包括故障診斷、故障預(yù)測(cè)、自動(dòng)擴(kuò)縮容、更優(yōu)的執(zhí)行計(jì)劃等。
?
陳再妮:未來(lái)數(shù)據(jù)庫(kù)一定會(huì)依據(jù)新型硬件做架構(gòu)層面的改良,舉個(gè)例子:傳統(tǒng)數(shù)據(jù)庫(kù)是基于存儲(chǔ)不可靠以及存儲(chǔ)性能差設(shè)計(jì)的(WAL、REDO、UNDO、DO、CHECKPOINT),是基于當(dāng)前CPU運(yùn)算速度設(shè)計(jì)的(32位事務(wù)ID,64位事務(wù)ID),但是好多理論隨著硬件的快速發(fā)展會(huì)被徹底顛覆:比如基于云原生數(shù)據(jù)庫(kù)(接近于基于存儲(chǔ)可靠的設(shè)計(jì)),云原生內(nèi)存數(shù)據(jù)庫(kù)(數(shù)據(jù)全部存儲(chǔ)于內(nèi)存,主要解決網(wǎng)絡(luò)問(wèn)題 RDMA、DPDK、SPDK 等)、量子數(shù)據(jù)庫(kù)等,這些基于新硬件新理論才是數(shù)據(jù)庫(kù)的未來(lái)。
?
張風(fēng)嘯
張風(fēng)嘯:一方面是,當(dāng)前業(yè)界關(guān)于數(shù)據(jù)庫(kù)的架構(gòu)、存儲(chǔ)結(jié)構(gòu)等很多方面的研究已經(jīng)很多且比較完善了,而存儲(chǔ)介質(zhì)等硬件方面的變化,可能給會(huì)給存儲(chǔ)的架構(gòu)設(shè)計(jì)帶來(lái)很大的變化,所以我們可以多關(guān)注新型存儲(chǔ)產(chǎn)品的出現(xiàn)帶來(lái)的一些變化。
另一方面是我很贊同的觀點(diǎn):性能不是唯一的肌肉,穩(wěn)定性、產(chǎn)品化、運(yùn)營(yíng)體系等方面,才是當(dāng)前國(guó)產(chǎn)數(shù)據(jù)庫(kù)面對(duì)最突出的幾個(gè)挑戰(zhàn)。數(shù)據(jù)庫(kù)要發(fā)展好,發(fā)展優(yōu)秀的生態(tài)和做好產(chǎn)品化是至關(guān)重要的。
?
陳松威:數(shù)據(jù)庫(kù)未來(lái)趨勢(shì)是云原生。在未來(lái)的產(chǎn)業(yè)互聯(lián)網(wǎng)中,數(shù)據(jù)庫(kù)的彈性擴(kuò)展能力、自我診斷快速運(yùn)維能力、個(gè)性化服務(wù)能力將非常重要。
?
陳松威
?
6、推薦一段值得稱(chēng)道或推薦的簡(jiǎn)短代碼片段?
雷海林:Linux內(nèi)核的list.h組件,實(shí)現(xiàn)簡(jiǎn)單,通用性好:
/* * Insert a new entry between two known consecutive entries. * * This is only for internal list manipulation where we know * the prev/next entries already! */#ifndef CONFIG_DEBUG_LISTstatic inline void __list_add(struct list_head *new, struct list_head *prev, struct list_head *next){ next->prev = new; new->next = next; new->prev = prev; prev->next = new;}#elseextern void __list_add(struct list_head *new, struct list_head *prev, struct list_head *next);#endif /** * list_add - add a new entry * @new: new entry to be added * @head: list head to add it after * * Insert a new entry after the specified head. * This is good for implementing stacks. */static inline void list_add(struct list_head *new, struct list_head *head){ __list_add(new, head, head->next);}賴(lài)錚:存儲(chǔ)引擎里字節(jié)序轉(zhuǎn)換函數(shù)代碼,簡(jiǎn)單明了,非常精巧。
?
陳再妮:
/* * TransactionIdPrecedes --- is id1 logically < id2? */boolTransactionIdPrecedes(TransactionId id1, TransactionId id2){ /* * If either ID is a permanent XID then we can just do unsigned * comparison. If both are normal, do a modulo-2^32 comparison. */ int32 diff;if (!TransactionIdIsNormal(id1) || !TransactionIdIsNormal(id2)) return (id1 < id2);diff = (int32) (id1 - id2); return (diff < 0);}這段代碼乍一看平平無(wú)奇,但要結(jié)合PG事務(wù)環(huán)來(lái)看,這個(gè)算法設(shè)計(jì)得很巧妙的,而且剛好在PG這種事務(wù)環(huán)下才是有效的。它在半個(gè)事務(wù)環(huán)的限制下,巧妙的運(yùn)行 2 的補(bǔ)碼,實(shí)現(xiàn)無(wú)符號(hào)事務(wù)ID的比較:
?
張風(fēng)嘯:世界上最簡(jiǎn)單的數(shù)據(jù)庫(kù)可以只用2個(gè)bash函數(shù)實(shí)現(xiàn)。這是在書(shū)籍《DesigningData-IntensiveApplication》中截取的,也非常推薦大家去閱讀。
#!/bin/bashdb_set () { echo"$1,$2" >> database}?
db_get () { grep"^$1," database | sed -e "s/^$1,//" | tail -n 1}陳松威:想推薦一個(gè)存儲(chǔ)引擎里實(shí)現(xiàn)中的一個(gè)頁(yè)面校驗(yàn)函數(shù):btr_validate_level。這個(gè)函數(shù)將所有可能的校驗(yàn)條件都一一列舉,包括頁(yè)面在區(qū)中的狀態(tài)校驗(yàn)、頁(yè)面本身校驗(yàn)、相鄰頁(yè)面指針校驗(yàn)、父子節(jié)點(diǎn)指針校驗(yàn)、父子節(jié)點(diǎn)相鄰節(jié)點(diǎn)指針環(huán)校驗(yàn)等等。代碼非常嚴(yán)謹(jǐn),對(duì)我啟發(fā)很大。
?
陳福榮:簡(jiǎn)短代碼片段意義不是很大,一個(gè)片段不管有多好,也不是一個(gè)可服務(wù)的載體。相對(duì)于代碼片段,一個(gè)完整系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)顯得更重要。如果是C語(yǔ)言,推薦redis;如果是C++,推薦LevelDB或RocksDB。如果把成熟的開(kāi)源軟件代碼認(rèn)真看一遍,對(duì)個(gè)人的提升還是很大的。
總結(jié)
以上是生活随笔為你收集整理的1024程序员节 | 我在腾讯自研数据库,我为技术代言的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Golang 单元测试详尽指引
- 下一篇: 如何有效地进行代码 Review?