為啥想寫(xiě)這樣一個(gè)系列的blog?
最主要的原因肯定是出于興趣吧,自從接觸了數(shù)據(jù)庫(kù)內(nèi)核開(kāi)發(fā),覺(jué)得里面真的是博大精深,很多子系統(tǒng)的設(shè)計(jì)初看不知所云,細(xì)讀就發(fā)現(xiàn)已經(jīng)做到了極致。然后特別希望有大牛能夠深入淺出地把這些精髓講解出來(lái)。但可惜,一直沒(méi)有發(fā)現(xiàn)類(lèi)似的資源或者課程(筆者雖然工作多年,但自覺(jué)還是比較注重積累,每天都關(guān)注科技新聞,技術(shù)博客甚至領(lǐng)域內(nèi)的新的學(xué)術(shù)文章)。近期也看到有越來(lái)越多的付費(fèi)培訓(xùn),從算法到系統(tǒng)設(shè)計(jì),到大數(shù)據(jù),應(yīng)有盡有,但唯獨(dú)沒(méi)有發(fā)現(xiàn)非常好的關(guān)于數(shù)據(jù)庫(kù)內(nèi)核設(shè)計(jì)的資源。自己當(dāng)然沒(méi)有實(shí)力可以去開(kāi)那樣一門(mén)課程,但我希望可以通過(guò)寫(xiě)blog來(lái)完善自己的知識(shí)儲(chǔ)備。也希望讀者能有所收獲。不過(guò)想歸想,自己從來(lái)沒(méi)下定決心去做這樣一件事,因?yàn)榭偸怯X(jué)得自己積累還不夠,還要準(zhǔn)備準(zhǔn)備云云。
什么契機(jī)讓你真正去行動(dòng)了?
這契機(jī)真的是一個(gè)非常偶然的故事。上個(gè)周末的一天晚上,小葡萄(我最?lèi)?ài)且僅愛(ài)的老婆大人)正在給我洗臉。感覺(jué)閑著也是閑著,加之正好下午剛討論過(guò)SQL,我就半開(kāi)玩笑地說(shuō),“老婆,你不是對(duì)數(shù)據(jù)庫(kù)感興趣嗎?我給你講講數(shù)據(jù)庫(kù)是怎么實(shí)現(xiàn)的,數(shù)據(jù)庫(kù)是怎么去執(zhí)行一個(gè)SQL語(yǔ)句的” 小葡萄:“你說(shuō)呀,你能說(shuō)得出來(lái)嗎?”;“嘿,小看我,你聽(tīng)著哦 。。。” 然后我就blahblah地講了大半個(gè)小時(shí),用盡量通俗易懂的語(yǔ)言給老婆描述了數(shù)據(jù)庫(kù)最初是怎么起源的;怎么去實(shí)現(xiàn)最基本的存儲(chǔ);有了存儲(chǔ),怎么去實(shí)現(xiàn)基本的數(shù)據(jù)讀?。挥辛俗x取怎么去實(shí)現(xiàn)基本的數(shù)據(jù)操作,等等。聽(tīng)完,小葡萄真的是突然有種對(duì)我肅然起敬地感覺(jué)(極有可能是我自己的一廂情愿)。也正是小葡萄的支持,我決定,要真正去做這件想了很久卻從未開(kāi)始的事情。就像她說(shuō)的,與其過(guò)多地去get ready but do nothing, 還不如去實(shí)踐一個(gè)不怎么ready的事!
啥背景呀,就敢寫(xiě)數(shù)據(jù)庫(kù)內(nèi)核
說(shuō)真的,我自己也信心不足呢。說(shuō)說(shuō)背景吧(偶爾咱也知乎體一下):咳咳,謝邀。本人上海交通大學(xué)軟件學(xué)院本科畢業(yè),University of California, Davis 計(jì)算機(jī)博士畢業(yè)?,F(xiàn)在在臉書(shū)做一個(gè)老年程序員。自己并不算一個(gè)數(shù)據(jù)庫(kù)的科班出身,博士學(xué)的也不是數(shù)據(jù)庫(kù)專業(yè)。一個(gè)很偶然的機(jī)會(huì),我得到了一份數(shù)據(jù)庫(kù)公司Greenplum(Pivotal)的實(shí)習(xí)的機(jī)會(huì),又陰差陽(yáng)錯(cuò)地畢業(yè)后正式加入了Query Processing組。在Pivotal的兩年,非常有幸地參與了Orca Query Optimizer (已在Apache開(kāi)源) 的開(kāi)發(fā)。在這期間也混了幾篇VLDB,SIGMOD的papaer。正是這份工作讓我開(kāi)始對(duì)內(nèi)核有所了解。再后來(lái)原Pivotal的director離開(kāi)開(kāi)了個(gè)做數(shù)據(jù)庫(kù)虛擬化的初創(chuàng)公司就把我一起拉去了。這個(gè)初創(chuàng)公司做的也非常有趣,database virtualization:旨在不用改變?nèi)魏蝍pplication code的前提下(包括不用換JDBC, 或者ODBC driver),就讓application code可以直接運(yùn)行在另一個(gè)數(shù)據(jù)庫(kù)上(舉個(gè)??,Teradata BTEQ script可以直接通過(guò)我們的中間件,運(yùn)行在Pivotal Greenplumn Database上),當(dāng)時(shí)我們用的最多的簡(jiǎn)介就是VMWare in terms of databases。這份工作讓我更細(xì)致地了解了不同數(shù)據(jù)庫(kù)原生接口的不同以及如何rewrite不同的SQL dialect來(lái)使它們之間互相兼容,我覺(jué)得也算變相的query optimization吧??偟膩?lái)說(shuō),自己對(duì)各個(gè)部件都有所了解,但知識(shí)點(diǎn)比較分散,不夠系統(tǒng),也希望在寫(xiě)blog的過(guò)程中去學(xué)習(xí)和完善知識(shí)儲(chǔ)備。
這個(gè)系列會(huì)分為哪幾個(gè)模塊?有沒(méi)有大綱
真心覺(jué)得自己還不夠格去系統(tǒng)地講解數(shù)據(jù)庫(kù)的各個(gè)模塊。所以我才把這個(gè)系列的名稱定義為雜談。咱們就暫不列什么提綱了,但我會(huì)把最核心的部件包括存儲(chǔ),SQL語(yǔ)言,數(shù)據(jù)優(yōu)化器和執(zhí)行器都cover了。 然后我們也能夠自由發(fā)揮,分享一些我對(duì)NoSQL以及NewSQL的理解。在這個(gè)過(guò)程中,我也會(huì)去查最新的資料,在寫(xiě)blog的同時(shí)也能更好地去鞏固和訂正知識(shí)。
閱讀這個(gè)blog會(huì)有啥收獲?
我希望能夠深入淺出地去講解數(shù)據(jù)庫(kù)是一個(gè)什么樣的系統(tǒng),以及為什么它最后會(huì)演化成這樣一個(gè)系統(tǒng),為什么我們都用SQL來(lái)操作數(shù)據(jù),而不是AQL或BQL. 希望讀者閱讀后,對(duì)數(shù)據(jù)庫(kù)的理解不再單單只是知道簡(jiǎn)單的table, row等的基本概念或者單單會(huì)寫(xiě)些join, select的SQL語(yǔ)句。而是能從源頭真正做到知其所以然。 希望能從對(duì)數(shù)據(jù)庫(kù)系統(tǒng)的認(rèn)知來(lái)進(jìn)一步提高對(duì)general系統(tǒng)設(shè)計(jì)的認(rèn)知。
雖然沒(méi)有大綱,但是下一篇的題目想好了:一小時(shí)實(shí)現(xiàn)一個(gè)基本數(shù)據(jù)庫(kù)