因為最近在做tidb的乙個hackthon,需要先對tidb架構有個了解,然後再確定選題方向,進行方案設計;
tidb 是 pingcap 公司設計的開源分布式 htap (hybrid transactional and analytical processing) 資料庫,結合了傳統的 rdbms 和 nosql 的最佳特性。tidb 相容 mysql,支援無限的水平擴充套件,具備強一致性和高可用性。tidb 的目標是為 oltp (online transactional processing) 和 olap (online analytical processing) 場景提供一站式的解決方案。
tikv的底層是使用rockdb構建的,基於raft 協議的進行分布式儲存。分區分塊儲存,其中乙個重要的概念就是「region」
tikv 是以 region 為單位做資料的複製,也就是乙個 region 的資料會儲存多個副本;
replica 之間是通過 raft 來保持資料的一致,乙個 region 的多個 replica 會儲存在不同的節點上,構成乙個 raft group。其中乙個 replica 會作為這個 group 的 leader,其他的 replica 作為 follower。所有的讀和寫都是通過 leader 進行,再由 leader 複製給 follower。
1) 對映關係:
輸入的sql,是如何對映到key-value模型進行儲存的呢?
對於乙個 table 來說,需要儲存的資料報括三部分:
表的元資訊
table 中的 row
索引資料
tidb 對每個表分配乙個 tableid,每乙個索引都會分配乙個 indexid,每一行分配乙個 rowid(如果表有整數型的 primary key,那麼會用 primary key 的值當做 rowid);
其中 tableid 在整個集群內唯一,indexid/rowid 在表內唯一,這些 id 都是 int64 型別。 每行資料按照如下規則進行編碼成 key-value pair:
key: tableprefix_rowprefix_tableid_rowid2) 分布式sql運算乙個查詢語句是如何操作底層儲存的資料。 能想到的最簡單的方案就是通過上一節所述的對映方案,將 sql 查詢對映為對 kv 的查詢,再通過 kv 介面獲取對應的資料,最後執行各種計算。value: [col1, col2, col3, col4]
首先需要將計算盡量靠近儲存節點,以避免大量的 rpc 呼叫。其次,需要將 filter 也下推到儲存節點進行計算,這樣只需要返回有效的行,避免無意義的網路傳輸。最後,我們可以將聚合函式、groupby 也下推到儲存節點,進行預聚合,每個節點只需要返回乙個 count 值即可,再由 tidb-server 將 count 值 sum 起來。
作為乙個分布式高可用儲存系統,必須滿足的需求,包括四種:
作為乙個良好的分布式系統,需要優化的地方,包括:
分布式資料庫TIDB
tidb 是國內 pingcap 團隊開發的乙個分布式 sql 資料庫。其靈感來自於 google 的 f1 和 google spanner,tidb 支援包括傳統 rdbms 和 nosql 的特性。架構圖 tidb 集群主要分為三個元件 tidb server tidb server 是無狀態...
TIdb 分布式資料庫
tidb 是 pingcap 公司設計的開源分布式 htap hybrid transactional and analytical processing 資料庫,結合了傳統的 rdbms 和 nosql 的最佳特性。tidb 相容 mysql,支援無限的水平擴充套件,具備強一致性和高可用性。tid...
從 分布式論壇 到 分布式資料庫
從 分布式論壇 到 分布式資料庫 如果有分布式資料庫,實現分布式論壇也許很容易,寫法與傳統的論壇系統完全一樣就行了 這裡說的 分布式 是一種鬆散的分布式,不像乙個機房裡多台伺服器協作組成乙個更大的邏輯伺服器 這些伺服器是穩定而且高速連線的 而這裡說的 分布式 是由一組普通的網際網路上的pc組成的,它...