|
一,TDDL是什么
TDDL是一套分布式數(shù)據(jù)訪問引擎,主要解決三個問題:
三層架構(gòu)(可獨立使用):
其它結(jié)構(gòu)
二,TDDL不支持什么SQL
畫外音:分布式數(shù)據(jù)庫中間件,join都是很難支持的,cobar號稱的對join的支持即有限,又低效。
三,TDDL支持什么SQL
畫外音:分布式數(shù)據(jù)庫中間件,支持的語法都很有限,但對于與聯(lián)網(wǎng)的大數(shù)據(jù)/高并發(fā)應用,足夠了,服務層應該做更多的事情。 四,TDDL其他特性
畫外音:可以看到,其實TDDL很多東西都不支持,那么為什么它還如此流行呢?它解決的根本痛點是“分布式”“分庫分表”等。 加入了解決“分布式”“分庫分表”的中間件后,SQL功能必然受限,但是,我們應該考慮到:MYSQL的CPU和MEM都是非常珍貴的,我們應該將MYSQL從復雜的計算(事務,JOIN,自查詢,存儲過程,視圖,用戶自定義函數(shù),,,)中釋放解脫出來,將這些計算遷移到服務層。 當然,有些后臺系統(tǒng)或者支撐系統(tǒng),數(shù)據(jù)量小或者請求量小,沒有“分布式”的需求,為了簡化業(yè)務邏輯,寫了一些復雜的SQL語句,利用了MYSQL的功能,這類系統(tǒng)并不是分布式數(shù)據(jù)庫中間件的潛在用戶,也不可能強行讓這些系統(tǒng)放棄便利,使用中間件。 五,TDDL層次結(jié)構(gòu)
TDDL是一個客戶端jar,它的結(jié)構(gòu)分為三層:
matrix層
group層
atom層
整個SQL執(zhí)行過程
六,TDDL最佳實踐
畫外音:這里我展開一下這個使用場景。
以電商的買家賣家為例,業(yè)務方既有基于買家的查詢需求,又有基于賣家的查詢需求,但通常只能以一個緯度進行數(shù)據(jù)的分庫(patition),假設以買家分庫, 那賣家的查詢需求如何實現(xiàn)呢?
如上圖所示:查詢買家所有買到的訂單及商品可以直接定位到某一個分庫,但要查詢賣家所有賣出的商品,業(yè)務方就必須遍歷所有的買家?guī)?,然后對結(jié)果集進行合并,才能滿足需求。
所謂的“數(shù)據(jù)增量復制”“表結(jié)構(gòu)冗余”“減少網(wǎng)絡次數(shù)”,是指所有的數(shù)據(jù)以買家賣家兩個緯度冗余存儲兩份,如下圖:
采用一個異步的消息隊列機制,將數(shù)據(jù)以另一個緯度增量復制一份,在查詢的時候,可以直接以賣家直接定位到相應的分庫。
這種方式有潛在的數(shù)據(jù)不一致問題。
繼續(xù)tddl最佳實踐:
畫外音:相比數(shù)據(jù)庫中間件內(nèi)核,最佳實踐與存儲模型,對我們有更大的借鑒意義。
七、TDDL的未來?
畫外音:潛臺詞是,在大數(shù)據(jù)量高并發(fā)下,SQL不是大勢所趨,no-sql和定制化的協(xié)議+存儲才是未來方向?
分布式數(shù)據(jù)中間件TDDL、Amoeba、Cobar、MyCAT架構(gòu)比較
|
|
|
來自: 順溜的書架 > 《大數(shù)據(jù)》