TDDL調研筆記

2022-03-06 04:35:15 字數 2004 閱讀 6034

一,tddl是什麼

tddl是一套分布式資料訪問引擎,主要解決三個問題:

資料訪問路由,將資料的讀寫請求傳送到最合適的地方;

資料的多向非對稱複製,一次寫入,多點讀取;

資料儲存的自由擴充套件,不再受限於單台機器的容量瓶頸與速度瓶頸,平滑遷移。它遵守jdbc規範,支援mysql和oracle,具有分庫分表、主備切換、讀寫分離、動態資料來源配置等功能。

三層架構(可獨立使用):

其它結構

二,tddl不支援什麼sql

畫外音:分布式資料庫中介軟體,join都是很難支援的,cobar號稱的對join的支援即有限,又低效。 

三,tddl支援什麼sql

畫外音:可以看到,其實tddl很多東西都不支援,那麼為什麼它還如此流行呢?它解決的根本痛點是「分布式」「分庫分表」等。

加入了解決「分布式」「分庫分表」的中介軟體後,sql功能必然受限,但是,我們應該考慮到:mysql的cpu和mem都是非常珍貴的,我們應該將mysql從複雜的計算(事務,join,自查詢,儲存過程,檢視,使用者自定義函式,,,)中釋放解脫出來,將這些計算遷移到服務層。

當然,有些後台系統或者支撐系統,資料量小或者請求量小,沒有「分布式」的需求,為了簡化業務邏輯,寫了一些複雜的sql語句,利用了mysql的功能,這類系統並不是分布式資料庫中介軟體的潛在使用者,也不可能強行讓這些系統放棄便利,使用中介軟體。

層次

說明

其他

matrix

可以理解為資料來源的全部,它由多個group組成

group

可以理解為乙個分組,它由多個atom組成

atom

可以理解為乙個資料庫,可能是讀庫,也可能是寫庫

matrix層

group層

atom層

整個sql執行過程

畫外音:這裡我展開一下這個使用場景。

以電商的買家賣家為例,業務方既有基於買家的查詢需求,又有基於賣家的查詢需求,但通常只能以乙個緯度進行資料的分庫(patition),假設以買家分庫, 那賣家的查詢需求如何實現呢?

如上圖所示:查詢買家所有買到的訂單及商品可以直接定位到某乙個分庫,但要查詢賣家所有賣出的商品,業務方就必須遍歷所有的買家庫,然後對結果集進行合併,才能滿足需求。

所謂的「資料增量複製」「表結構冗餘」「減少網路次數」,是指所有的資料以買家賣家兩個緯度冗餘儲存兩份,如下圖:

採用乙個非同步的訊息佇列機制,將資料以另乙個緯度增量複製乙份,在查詢的時候,可以直接以賣家直接定位到相應的分庫。

這種方式有潛在的資料不一致問題。

繼續tddl最佳實踐:

七、tddl的未來?

畫外音:潛台詞是,在大資料量高併發下,sql不是大勢所趨,no-sql和定製化的協議+儲存才是未來方向?

TDDL 原始碼分析

tddl位於資料庫和持久層之間,它直接與資料庫建立交道 tddl其實主要可以劃分為3層架構,分別是matrix層 group層和atom層。matrix層用於實現分庫分表邏輯,底層持有多個group例項。而group層和atom共同組成了動態資料來源,group層實現了資料庫的master salv...

MySQL調研筆記1 MySQL調研清單

最近公司正在去微軟化,之前使用的sql server oracle將逐步切換到mysql,所以部門也會跟隨公司步伐,一步步將現有業務從sql server切換到mysql,當然上mysql肯定是上集群和分布式。於是,有了這份結合業務資料調研mysql的清單,後面的日子裡將一點點記錄關於調研過程中的發...

分庫分表元件TDDL

tddl所處的位置 tddl通用資料訪問層,部署在客戶端的jar包,用於將使用者的sql路由到指定的資料庫中 很早就對資料進行過分庫的處理,上層系統連線多個資料庫,中間有乙個叫做dbroute的路由來對資料進行統一訪問。dbroute對資料進行多庫的操作 資料的整合,讓上層系統像操作 乙個資料庫一樣...