從TiDB學習分布式資料庫

2021-09-26 09:04:32 字數 1624 閱讀 2993

因為最近在做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_rowid

value: [col1, col2, col3, col4]

2) 分布式sql運算乙個查詢語句是如何操作底層儲存的資料。 能想到的最簡單的方案就是通過上一節所述的對映方案,將 sql 查詢對映為對 kv 的查詢,再通過 kv 介面獲取對應的資料,最後執行各種計算。

首先需要將計算盡量靠近儲存節點,以避免大量的 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組成的,它...