自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

數(shù)據(jù)庫(kù)中間件TDDL調(diào)研筆記

開(kāi)發(fā) 開(kāi)發(fā)工具
TDDL“最佳實(shí)踐”與“存儲(chǔ)模型”更具啟發(fā)與價(jià)值。13年底負(fù)責(zé)數(shù)據(jù)庫(kù)中間件設(shè)計(jì)時(shí)的調(diào)研筆記,拿出來(lái)和大家分享,輕拍。

前篇:《數(shù)據(jù)庫(kù)中間件cobar調(diào)研筆記

13年底負(fù)責(zé)數(shù)據(jù)庫(kù)中間件設(shè)計(jì)時(shí)的調(diào)研筆記,拿出來(lái)和大家分享,輕拍。

一、TDDL是什么

  • TDDL是Taobao Distribute Data Layer的簡(jiǎn)稱
  • 淘寶一個(gè)基于客戶端的數(shù)據(jù)庫(kù)中間件產(chǎn)品
  • 基于JDBC規(guī)范,沒(méi)有server,以client-jar的形式存在

畫(huà)外音:數(shù)據(jù)庫(kù)中間件有基于服務(wù)端的,也有基于客戶端的,TDDL屬于后者;而cobar是一個(gè)中間層服務(wù),使用mysql協(xié)議,屬于前者。

二、TDDL不支持什么SQL

  • 不支持各類join
  • 不支持多表查詢
  • 不支持between/and
  • 不支持not(除了支持not like)
  • 不支持comment,即注釋
  • 不支持for update
  • 不支持group by中having后面出現(xiàn)集函數(shù)
  • 不支持force index
  • 不支持mysql獨(dú)有的大部分函數(shù)

畫(huà)外音:分布式數(shù)據(jù)庫(kù)中間件,join都是很難支持的,cobar號(hào)稱的對(duì)join的支持即有限,又低效。

三、TDDL支持什么SQL

  • 支持CURD基本語(yǔ)法
  • 支持as
  • 支持表名限定,即"table_name.column"
  • 支持like/not like
  • 支持limit,即mysql的分頁(yè)語(yǔ)法
  • 支持in
  • 支持嵌套查詢,由于不支持多表,只支持單表的嵌套查詢

畫(huà)外音:分布式數(shù)據(jù)庫(kù)中間件,支持的語(yǔ)法都很有限,但對(duì)于與聯(lián)網(wǎng)的大數(shù)據(jù)/高并發(fā)應(yīng)用,足夠了,服務(wù)層應(yīng)該做更多的事情。

四、TDDL其他特性

  • 支持oracle和mysql
  • 支持主備動(dòng)態(tài)切換
  • 支持帶權(quán)重的讀寫(xiě)分離
  • 支持分庫(kù)分表
  • 支持主鍵生成:oracle用sequence來(lái)生成,mysql則需要建立一個(gè)用于生成id的表
  • 支持單庫(kù)事務(wù),不支持夸庫(kù)事務(wù)
  • 支持多庫(kù)多表分頁(yè)查詢,但會(huì)隨著翻頁(yè),性能降低

畫(huà)外音:可以看到,其實(shí)TDDL很多東西都不支持,那么為什么它還如此流行呢?它解決的根本痛點(diǎn)是“分布式”“分庫(kù)分表”等。

加入了解決“分布式”“分庫(kù)分表”的中間件后,SQL功能必然受限,但是,我們應(yīng)該考慮到:MYSQL的CPU和MEM都是非常珍貴的,我們應(yīng)該將MYSQL從復(fù)雜的計(jì)算(事務(wù),JOIN,自查詢,存儲(chǔ)過(guò)程,視圖,用戶自定義函數(shù),,,)中釋放解脫出來(lái),將這些計(jì)算遷移到服務(wù)層。

當(dāng)然,有些后臺(tái)系統(tǒng)或者支撐系統(tǒng),數(shù)據(jù)量小或者請(qǐng)求量小,沒(méi)有“分布式”的需求,為了簡(jiǎn)化業(yè)務(wù)邏輯,寫(xiě)了一些復(fù)雜的SQL語(yǔ)句,利用了MYSQL的功能,這類系統(tǒng)并不是分布式數(shù)據(jù)庫(kù)中間件的潛在用戶,也不可能強(qiáng)行讓這些系統(tǒng)放棄便利,使用中間件。

五、TDDL層次結(jié)構(gòu)

TDDL層次結(jié)構(gòu)

TDDL是一個(gè)客戶端jar,它的結(jié)構(gòu)分為三層:

TDDL是一個(gè)客戶端jar,它的結(jié)構(gòu)分為三層

對(duì)應(yīng)上面圖例:matrix數(shù)據(jù)水平分為了兩個(gè)group,每個(gè)group有主備atom組成。

matrix層

  • 核心是規(guī)則引擎
  • 實(shí)現(xiàn)分庫(kù)分表
  • 主要路徑:sql解析 => 規(guī)則引擎計(jì)算(路由) => 執(zhí)行 => 合并結(jié)果

group層

  • 讀寫(xiě)分離
  • 權(quán)重計(jì)算
  • 寫(xiě)HA切換
  • 讀HA切換
  • 動(dòng)態(tài)新增slave(atom)節(jié)點(diǎn)

atom層

  • 單個(gè)數(shù)據(jù)庫(kù)的抽象;
  • ip /port /user /passwd /connection 動(dòng)態(tài)修改,動(dòng)態(tài)化jboss數(shù)據(jù)源
  • thread count(線程計(jì)數(shù)):try catch模式,保護(hù)業(yè)務(wù)處理線程
  • 動(dòng)態(tài)阻止某些sql的執(zhí)行
  • 執(zhí)行次數(shù)的統(tǒng)計(jì)和限制

整個(gè)SQL執(zhí)行過(guò)程

  • BEGIN(sql+args),輸入是sql和參數(shù)
  • sql解析
  • 規(guī)則計(jì)算
  • 表名替換
  • 選擇groupDS執(zhí)行sql
  • 根據(jù)權(quán)重選擇atomDS
  • 具備重試策略的在atomDS執(zhí)行sql
  • 讀寫(xiě)控制,并發(fā)控制,執(zhí)行sql,返回結(jié)果
  • 合并結(jié)果集
  • END(ResultSet),輸出是結(jié)果集

畫(huà)外音:感覺(jué)難點(diǎn)在SQL的解析上。

六、TDDL***實(shí)踐

  • 盡可能使用1對(duì)多規(guī)則中的1進(jìn)行數(shù)據(jù)切分(patition key),例如“用戶”就是一個(gè)簡(jiǎn)單好用的緯度
  • 買家賣家的多對(duì)多問(wèn)題,使用數(shù)據(jù)增量復(fù)制的方式冗余數(shù)據(jù),進(jìn)行查詢
  • 利用表結(jié)構(gòu)的冗余,減少走網(wǎng)絡(luò)的次數(shù),買家賣家都存儲(chǔ)全部的數(shù)據(jù)

畫(huà)外音:這里我展開(kāi)一下這個(gè)使用場(chǎng)景。

以電商的買家賣家為例,業(yè)務(wù)方既有基于買家的查詢需求,又有基于賣家的查詢需求,但通常只能以一個(gè)緯度進(jìn)行數(shù)據(jù)的分庫(kù)(patition),假設(shè)以買家分庫(kù), 那賣家的查詢需求如何實(shí)現(xiàn)呢?

TDDL***實(shí)踐

如上圖所示:查詢買家所有買到的訂單及商品可以直接定位到某一個(gè)分庫(kù),但要查詢賣家所有賣出的商品,業(yè)務(wù)方就必須遍歷所有的買家?guī)?,然后?duì)結(jié)果集進(jìn)行合并,才能滿足需求。

所謂的“數(shù)據(jù)增量復(fù)制”“表結(jié)構(gòu)冗余”“減少網(wǎng)絡(luò)次數(shù)”,是指所有的數(shù)據(jù)以買家賣家兩個(gè)緯度冗余存儲(chǔ)兩份,如下圖:

TDDL***實(shí)踐

采用一個(gè)異步的消息隊(duì)列機(jī)制,將數(shù)據(jù)以另一個(gè)緯度增量復(fù)制一份,在查詢的時(shí)候,可以直接以賣家直接定位到相應(yīng)的分庫(kù)。

這種方式有潛在的數(shù)據(jù)不一致問(wèn)題。

繼續(xù)tddl***實(shí)踐:

(1) 利用單機(jī)資源:?jiǎn)螜C(jī)事務(wù),單機(jī)join

(2) 存儲(chǔ)模型盡量做到以下幾點(diǎn):

  • 盡可能走內(nèi)存
  • 盡可能將業(yè)務(wù)要查詢的數(shù)據(jù)物理上放在一起
  • 通過(guò)數(shù)據(jù)冗余,減少網(wǎng)絡(luò)次數(shù)
  • 合理并行,提升響應(yīng)時(shí)間
  • 讀瓶頸通過(guò)增加slave(atom)解決
  • 寫(xiě)瓶頸通過(guò)切分+路由解決

畫(huà)外音:相比數(shù)據(jù)庫(kù)中間件內(nèi)核,***實(shí)踐與存儲(chǔ)模型,對(duì)我們有更大的借鑒意義。

七、TDDL的未來(lái)?

  • kv是一切數(shù)據(jù)存取最基本的組成部分
  • 存儲(chǔ)節(jié)點(diǎn)少做一點(diǎn),業(yè)務(wù)代碼就要多做一點(diǎn)
  • 想提升查詢速度,只有冗余數(shù)據(jù)一條路可走
  • 類結(jié)構(gòu)化查詢語(yǔ)言,對(duì)查詢來(lái)說(shuō)非常方便

畫(huà)外音:潛臺(tái)詞是,在大數(shù)據(jù)量高并發(fā)下,SQL不是大勢(shì)所趨,no-sql和定制化的協(xié)議+存儲(chǔ)才是未來(lái)方向?

13年底的調(diào)研筆記,文中的“畫(huà)外音”是我當(dāng)時(shí)的批注,希望能讓大家對(duì)TDDL能有一個(gè)初步的認(rèn)識(shí),有疑問(wèn)之處,歡迎交流。

【本文為51CTO專欄作者“58沈劍”原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)聯(lián)系原作者】

戳這里,看該作者更多好文

責(zé)任編輯:趙寧寧 來(lái)源: 51CTO專欄
相關(guān)推薦

2017-11-27 05:06:42

數(shù)據(jù)庫(kù)中間件cobar

2017-12-01 05:04:32

數(shù)據(jù)庫(kù)中間件Atlas

2018-02-24 19:37:33

Java8數(shù)據(jù)庫(kù)中間件

2017-05-23 18:55:05

mysql-proxy數(shù)據(jù)庫(kù)架構(gòu)

2011-08-10 13:03:58

CJDBC數(shù)據(jù)庫(kù)集群

2017-07-26 09:41:28

MyCATSQLMongoDB

2017-07-18 17:35:16

數(shù)據(jù)庫(kù)MyCATPreparedSta

2017-11-03 11:02:08

數(shù)據(jù)庫(kù)中間件

2017-11-30 08:56:14

數(shù)據(jù)庫(kù)中間件架構(gòu)師

2024-12-06 08:29:29

2017-12-01 05:40:56

數(shù)據(jù)庫(kù)中間件join

2017-11-27 06:01:37

數(shù)據(jù)庫(kù)中間件中間層

2017-12-11 13:30:49

Go語(yǔ)言數(shù)據(jù)庫(kù)中間件

2017-07-18 17:07:40

數(shù)據(jù)庫(kù) MyCATJoin

2009-01-20 10:45:55

Oracle數(shù)據(jù)庫(kù)中間件

2018-08-28 12:37:27

數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)中間件MySQL

2021-07-27 05:49:59

MySQL數(shù)據(jù)庫(kù)中間件

2020-10-15 08:34:32

數(shù)據(jù)庫(kù)中間件漫談

2018-11-07 15:30:19

數(shù)據(jù)庫(kù)NewSQLNoSQL

2009-11-10 16:48:23

中間件操作系統(tǒng)數(shù)據(jù)庫(kù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)