Tidb架構圖,如上圖
主要分為3部分
1.TiKV-Server
tikv是負責存儲數據,從外部看 TiKV 是一個分布式的提供事務的 Key-Value 存儲引擎。類似map數據結構(鍵值對)
tikv之間是有心跳的,tikv之間的數據都是互相備份的,可以保證數據一致性
既然tikv是負責存儲數據的,為什么讀寫速度這么快????
數據存儲效率還是很高滴,tikv集群內部本身是通過RPC來交互的,,,大家都知道rpc,高性能嘛
兩點 1.IO操作(隨機讀寫問題)即如何去保證順序讀寫的,類似於leveldb--通過分代解決寫的問題,然后通過布隆過濾器解決讀的問題
2.數據一致性的問題(Raft算法)這個是開源算法,tikv節點與備份節點的選舉問題
2.PD-Server
1.存儲集群的元信息的,比如說某個key在哪個節點上
2.對tikv集群進行調度和負責均衡,包括節點擴容數據自動遷移
3.分配全局唯一rowid
3.Tidb-Server
它是一個mysql的數據引擎,負責解析和處理sql,,然后通過pd去找到數據在kv上面的地址,最后與kv交互拿到數據,再返回結果。
它是個無狀態的節點,本身不存儲數據,只負責計算,並且可以配置節點個數,無限水平擴展,這個類似於k8s的中的rs
至於服務端連接的話,可以用一下負載組件,比如說HA,nginx,來提供統一的地址
Ti-Spark(tidb對應的一種策略)
這個組件,沒太深入研究,它主要是對大數據操作中復雜的sql進行快速計算,快速的實現海量數據的統計,並且他還同時支持OLTP和OLAP 解決數據同步的問題
至於什么是OLTP和OLAP
解釋一下
OLTP:它是聯機的事務處理----就是說:在盡可能短的時間內返回結果-------對應的就是我們的關系型數據庫-----------比如說mysql,oracle,sqlserver
OLAP:它是聯機的分析處理----就是說:對歷史數據分析,然后產生決策,針對於海量的數據統計快速的給出結果----比如說數據倉庫---------hive,tidb
這個很強勢。。。
第一個大問題:IO 隨機讀寫問題 ---------損失了一部分讀的性能(最終一致性的問題),提高了大量的寫的性能
首先需要選擇一個map的數據結構的存儲方案
RocksDB:他是一個任何持久化的存儲引擎(也是基於kv存儲的),是谷歌開源的這么一個項目,底層是lsm樹,他是樹的結合體(樹+跳躍表)
如果大家不清楚RocksDB ,,,那么應該聽過leveldb ,,,,rocksdb是leveldb的一個升級版本 ,
leveldb
他是實現順序讀寫的,是通過層級划分
如圖