Tdsql數(shù)據(jù)庫水平拆分
推薦 + 挑錯(cuò) + 收藏(0) + 用戶評(píng)論(0)
隨著互聯(lián)網(wǎng)應(yīng)用的廣泛普及,海量數(shù)據(jù)的存儲(chǔ)和訪問成為系統(tǒng)設(shè)計(jì)的瓶頸問題。對(duì)于大型的互聯(lián)網(wǎng)應(yīng)用,每天幾十億的PV無疑對(duì)數(shù)據(jù)庫造成了相當(dāng)高的負(fù)載。給系統(tǒng)的穩(wěn)定性和擴(kuò)展性造成了極大的問題。通過數(shù)據(jù)的切分來提高系統(tǒng)整體性能,擴(kuò)充系統(tǒng)整體容量,橫向擴(kuò)展數(shù)據(jù)層已經(jīng)成為架構(gòu)研發(fā)人員首選的方式。
2004年,騰訊開始逐步上線互聯(lián)網(wǎng)增值服務(wù),業(yè)務(wù)量開始第一次爆炸。計(jì)費(fèi)成為所有業(yè)務(wù)都需要的一個(gè)公共服務(wù),不再是某個(gè)服務(wù)的專屬。業(yè)務(wù)量的爆炸給DB層帶來了巨大的壓力,原來的單機(jī)模式已經(jīng)無法支撐。伴隨計(jì)費(fèi)公共平臺(tái)的整合建設(shè),在DB層開始引入分庫分表機(jī)制:針對(duì)大的表,按照某個(gè)key預(yù)先拆成n個(gè)子表,分布在不同的機(jī)器節(jié)點(diǎn)上。邏輯層在訪問DB時(shí),自己根據(jù)分表邏輯將請(qǐng)求分發(fā)到不同的節(jié)點(diǎn)。在擴(kuò)容時(shí),需要手工完成子表數(shù)據(jù)的搬遷和訪問路由的修改。DB層在業(yè)務(wù)狂潮之下,增加各種工具和補(bǔ)丁來解決容量水平擴(kuò)展的問題。2012年TDSQL項(xiàng)目立項(xiàng),目標(biāo)為金融聯(lián)機(jī)交易數(shù)據(jù)庫。
TDSQL(Tencent Distributed MySQL,騰訊分布式MySQL)是針對(duì)金融聯(lián)機(jī)交易場景推出的高一致性、分布式數(shù)據(jù)庫解決方案。產(chǎn)品形態(tài)為一個(gè)數(shù)據(jù)庫集群,底層基于MySQL,對(duì)外的功能表現(xiàn)上與MySQL兼容。截至2017年,TDSQL已在公司內(nèi)部關(guān)鍵數(shù)據(jù)領(lǐng)域獲得廣泛應(yīng)用,其中之一作為Midas(米大師)核心數(shù)據(jù)庫,經(jīng)受了互聯(lián)網(wǎng)交易場景的考驗(yàn)。Midas作為騰訊官方唯一數(shù)字業(yè)務(wù)支付平臺(tái),為公司移動(dòng)App(iOS、Android、Win phone等)、PC客戶端、Web等不同場景提供一站式計(jì)費(fèi)解決方案。
水平拆分
TDSQL規(guī)定shardkey為表拆分的依據(jù),即進(jìn)行SQL查詢時(shí),shardkey作為查詢字段指明該SQL發(fā)往哪個(gè)Set(數(shù)據(jù)分片)。在分庫分表之前需要Schedule初始化集群,我們這里稱作一個(gè)Group。在初始化Group時(shí)要確定最初的分片大小,因而需要確定準(zhǔn)備幾套Set。例如,我們需要對(duì)邏輯表拆分成四張子表,需要我們?cè)诔跏蓟簳r(shí)準(zhǔn)備四個(gè)Set,同時(shí)指定每個(gè)Set的路由信息,并將這些路由信息寫入ZK
非常好我支持^.^
(0) 0%
不好我反對(duì)
(0) 0%