tidb 目前獲得了廣泛的關注,特別是一些技術愛好者,希望能夠參與這個專案。由於整個系統的複雜性,很多人並不能很好的理解整個專案。我們希望通過這一系列文章自頂向下,由淺入深,講述 tidb 的技術原理以及實現細節,幫助大家掌握這個專案。
一些網路、作業系統的常識
除了上述比較通用的知識之外,還希望讀者能夠看一下我之前寫過的三篇文章(說儲存,講計算,論排程),了解一些 tidb 的基本原理。
通過這一系列文章可以獲得什麼?首先是通過了解 tidb 的基本原理,明白乙個關係型資料庫的基本原理;其次通過閱讀 tidb 的**,知道乙個資料庫是如何實現的,將教科書中看到的資料庫原理落地。第三,了解乙個資料庫的實現對其行為的影響,可以更好的理解資料庫為什麼是這樣的,並推廣到其他的資料庫,相信對讀者用好其他資料庫也有幫助。第四,可以看到乙個大型的分布式系統是如何設計、構建以及優化的。最後,大家理解了 tidb 的**後,如果後續工作中有需求,可以引用 tidb 的**,目前一些公司已經在自己的產品中用到了 tidb 的部分模組,例如 parser。
這一系列文章會按照資料庫的元件以及 sql 處理的常見流程,講解 protocol 層,以及parser、preprocess、optimizer、executor、storage engine 等重要模組。從整體上分為兩大部分,上半部分包括如下四篇文章:
第二篇文章從 sql 處理流程出發,介紹**是入口,需要做哪些操作,知道乙個 sql 是從**進來的,在**處理,並從**返回。
第三篇文章從**本身出發,介紹如何看懂某個模組的**。
第四篇文章會引入乙個例子,介紹如何讓 tidb 支援乙個新的語法。
希望大家閱讀完這部分後,對 tidb 有了一定的基礎,能夠看懂大體流程,遇到問題或者想給 tidb 新增乙個新 feature 的時候,不至於無從下手。
下半部分會講解的更深入,針對 tidb 的每個重要模組進行講解,包括優化器的詳細實現、邏輯優化/物理優化是如何做的、重要的物理運算元的實現等等。希望大家閱讀後能對 tidb 有深入的理解,能夠完全理解 tidb 的**。這部分會比上半部分多很多,具體數量尚未定。
這一系列文章剛開始提筆撰寫,目前只是有乙個大致的規劃,我們會盡可能保證按照計畫 release 出來各篇文章。3 月中旬之前會發出上半部分的幾篇文章,後續逐漸放出下半部分的文章。
我們並沒有編寫系列教程的經驗,希望在逐漸放出文章的過程中,能收到讀者的反饋,指導我們不斷改進這項工作,最終能夠一起把這件事情做好。在整個活動過程中,我們會密切關注反饋,隨時調整。
除此之外,我們希望能有一起志同道合的人參與到 tidb 的開發中來,可以通過開源社群,甚至是肉身投奔 :)。
另外這一系列文章的目的在於幫助讀者更好的理解 tidb 原始碼,而不是替代閱讀原始碼的過程。希望讀者能在閱讀原始碼的時候,以這些文章為參考,而不是唯讀文章,不看**。切記『紙上得來終覺淺,絕知此事要 pr』。
TiDB 原始碼閱讀系列文章(十三)索引範圍計算簡介
在資料庫中處理查詢請求時,如果可以盡早的將無關資料過濾掉,那麼後續的運算元就可以少做無用功,提公升整個 sql 的執行效率。過濾資料最常用的手段是使用索引,tidb 的優化器也會盡量採用索引過濾的方式處理請求,利用索引有序的特點來提公升查詢效率。比如當查詢條件為a 1時,如果 a 這一列上有索引,我...
TiDB 原始碼閱讀系列文章(十三)索引範圍計算簡介
在資料庫中處理查詢請求時,如果可以盡早的將無關資料過濾掉,那麼後續的運算元就可以少做無用功,提公升整個 sql 的執行效率。過濾資料最常用的手段是使用索引,tidb 的優化器也會盡量採用索引過濾的方式處理請求,利用索引有序的特點來提公升查詢效率。比如當查詢條件為a 1時,如果 a 這一列上有索引,我...
TiKV 原始碼解析系列文章(一)序
tikv 是乙個支援事務的分布式 key value 資料庫,有很多社群開發者基於 tikv 來開發自己的應用,譬如 titan tidis。尤其是在 tikv 成為 cncf 的 sandbox 專案之後,吸引了越來越多開發者的目光,很多同學都想參與到 tikv 的研發中來。這時候,就會遇到兩個比...