一 TiFlash架構
二 TiFlash 核心特性
TiFlash 主要有
- 異步復制、
- 一致性、
- 智能選擇、
- 計算加速
等幾個核心特性。
1 異步復制
TiFlash 中的副本以特殊角色 (Raft Learner) 進行異步的數據復制,這表示當 TiFlash 節點宕機或者網絡高延遲等狀況發生時,TiKV 的業務仍然能確保正常進行。
只從leader中接受raft log ,不參與 投票 選舉 等。
基于主鍵快速更新 ,和TiKV 不會有過大的延遲 。
?
2 一致性讀取
?
圖解 :
T0 時刻 客戶端寫入兩條數據 分別為 key = 1 value = 100 ,key = 999 value =7,這兩條數據分別存在兩個TiKV的Region 上,寫入數據會有Raft log,這兩條數據寫入日志的序列號分別為 101 和 22 。TiFlash的region通過 Raft Log 同步數據,此刻 同步到TiFlash的Raft Log日志索引號分別為95 和 18的日志。即數據還沒有同步到TiFlash.
?在T1 時刻客戶端請求TiFlash 讀取數據,T1時刻 ,TIKV的region數據已經寫到日志序列號分別為 120 和 29的數據了 。TiFlash的數據剛到 106 和 20 。此刻TiFlash讀取不到最新的數據
T2時刻 又有客戶端向TiKV 寫入數據,將key=1的數據 value cong 100改為了 200。寫到了日志索引號分別為 122 和 30的日志了。那么問題來了 TiFlash 如何 確認我能讀取到此刻TiKV 寫入的最新數據同步到了TiFlash 呢 ?
解決 :會做個輕量級的確認 ,T3時刻 TiKV 的數據 已經寫到了 125和 31? ,TiFlash 寫到了 116 和 21 。 那么TiFlash 會等待日志序列號分別為125和 31日志復制過來。
?
T4時刻 日志還沒完全復制過來。
?
T5 時刻日志已經復制過來 ,但是查詢請求是T1時刻發出,只能看到T1時刻之前的數據,所以讀到的key=1的值為100;
?
智能選擇
TiDB 可以自動選擇使用 TiFlash 列存或者 TiKV 行存,甚至在同一查詢內混合使用提供最佳查詢速度。這個選擇機制與 TiDB 選取不同索引提供查詢類似:根據統計信息判斷讀取代價并作出合理選擇。
計算加速
TiFlash 對 TiDB 的計算加速分為兩部分:列存本身的讀取效率提升以及為 TiDB 分擔計算。其中分擔計算的原理和 TiKV 的協處理器一致:TiDB 會將可以由存儲層分擔的計算下推。
參考?
TiFlash 簡介 | PingCAP 文檔中心