TiDB裡頭的TiDB,聽起來有點饒舌,為了避免混淆,後面會加個server來做區別。TiDB server主要功能是負責SQL層的部分。
引用pingcap官網架構圖
其結構主要可以分為兩部分,首先是Protocol Layer,負責解析MySQL協議,以及最終將查詢結果回傳到使用者手中。TiDB支持MySQL大部分語法的特點,對於原本就使用MySQL的使用者來說十分親切,替換資料庫基本上可以做到無痛轉移。
第二個部分則是SQL Layer,首先將語法解析成AST樹,簡單來說就是將語法中COLUMN,FROM,WHERE拆解成樹狀結構,優化後產生執行計畫然後透過DistSQL API傳遞給TIKV,處理完成後再將結果拋回Protocol Layer。優化器分為邏輯優化與物理優化兩種,邏輯優化會依據TIDB實作的優化規則分析語法。例如語法中有Group By,如果Group By的欄位是Unique key,就不需做聚合。除此之外還有許多已經實作的優化規則,如OUTER JOIN,Max/Min,Subquery等等。而物理優化則決定哪些計算該在TiDB還是TiKV做,該用什麼index。
舉例來說
Select sum(count(1)) from table where name = 'TIDB'
物理優化會決定這些資料該從每個TiKV node 做完count之後再回到TiDB做sum的動作。接著交給Executor執行。
另外TiDB本身無法做到負載平衡,但是可以在前面加上Load Balancer如F5等等,達到負載平衡的目的。