TiDB有三部分組成:
存儲層:TiKV
計算層:TiDB
排程層:PD(PlaceDriver)存儲中繼資料
存儲層TiKV
1)通過range分區算法将資料分成一個個region;
2)每個region預設有3個副本,一個leader 副本和兩個follower 副本,這些副本分布在不同節點上,通過raft協定保證資料一緻性;
3)如果副本數量發生了變化,pd會及時感覺,做出應對措施;
計算層TiDB
将SQL請求映射成對TiKV的請求
1)一個表有中繼資料、行資料、索引資料 三種資料,都是通過底層的kv來存儲的;
行資料:key=表id_行id,value=[col1,col2,col3,…]
唯一二級索引:key=表id_索引id_索引值,value=行id
普通二級索引:key=表id_索引id_索引值_行id,value=null
比如現在有一個普通二級索引name,一個SQL
select * from table where name=‘xxx’,這樣組成的key=t1_i1_xxx???,但是不知道具體的行id,猜想會将t1_i1_xxx進行編碼,字首相同的都會邏輯存儲在一起。
排程層PD
管理中繼資料