iT邦幫忙

2021 iThome 鐵人賽

DAY 8
0

在Key-value的結構底下,一張表的儲存訊息可以分為三種。分別是row、index、表的元信息。
每一張表會對應到一個唯一的TableID,型態是整數。表內的每一筆row也會有一個唯一的RowID,型態也是整數。但是當table的Primary key為整數類型,RowID就會用pk的值替代。
會用以下的格式呈現

Key:   tablePrefix{TableID}_recordPrefixSep{RowID}
Value: [col1, col2, col3, col4]

引用pingcap官網

Prefix的定義如下圖
https://ithelp.ithome.com.tw/upload/images/20210903/20113220dnEQzOwhyS.png

引用github.com/pingcap/tidb

舉例來說,有一張表格tidb_test,有Primary key與一組unique index和一組non-unique index。
https://ithelp.ithome.com.tw/upload/images/20210903/20113220coOpyfIeOO.png
https://ithelp.ithome.com.tw/upload/images/20210903/20113220qomU0ypT4c.png

依照上面的規則,假設tableID為666,RowID因為pk為int類型所以會以id的值代表,映射結果為。
Key: t666_r1 Value: [john,30,30000]
Key: t666_r2 Value: [Jamie,40,30000]
如果是idx_1,假設indexID為1,則結果為
Key: t666_i1_John Value: [1]
如果是idx_2,假設indexID為2,則結果為
Key: t666_i2_30_1 Value: null

此外當兩個request同時間去異動同一個key對應的value,key值後面會補上版本號
如Key: t666_r1_Version2,t666_r1_Version1。

元信息儲存各個Database和table的定義與屬性,Key前面會以m_開頭。另外對於所有表的結構會用/tidb/ddl/global_schema_version當作key,版本號為value,每操作一次value就+1,儲存在PD server,會持續監控版本是否有異動。有關Schema的異動TiDB是實作Google F1的Online Schema變更算法,同一時間只允許一個node做異動,以避免DDL操作時發生鎖表情況。


上一篇
Day 7 - PD架構
下一篇
Day 9 - TiFlash架構(上)
系列文
TiDB學習筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言