版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、開(kāi)源數(shù)據(jù)庫(kù)中間件DBLE對(duì)MyCAT的增強(qiáng)與改進(jìn)分布式系統(tǒng)需求大型應(yīng)用(高并發(fā)實(shí)時(shí)交易場(chǎng)景)電商、金融、O2O、社交應(yīng)用、 零售等,普遍存在用戶基數(shù)大(百萬(wàn)級(jí)或以上)、營(yíng)銷活動(dòng) 頻繁、核心交易系統(tǒng)數(shù)據(jù)庫(kù)響 應(yīng)不及時(shí)問(wèn)題,制約業(yè)務(wù)發(fā)展。物聯(lián)網(wǎng)數(shù)據(jù)(大數(shù)據(jù)量存儲(chǔ)訪問(wèn)場(chǎng)景)在工業(yè)監(jiān)控和遠(yuǎn)程控制、智慧城 市的延展、智能家居、車聯(lián)網(wǎng)等 物聯(lián)網(wǎng)場(chǎng)景下;傳感監(jiān)控設(shè)備多, 采樣率高,數(shù)據(jù)規(guī)模大。存儲(chǔ)一 年數(shù)據(jù)就可以達(dá)到PB級(jí)甚至EB。云端服務(wù)(云計(jì)算中應(yīng)用服務(wù)場(chǎng)景)PaaS、SaaS等服務(wù)提供商, 需要對(duì)客戶提供一套動(dòng)態(tài)按需 索取的并支持大容量的數(shù)據(jù)庫(kù) 服務(wù),同時(shí)對(duì)服務(wù)質(zhì)量和性能 要求極高。分布式系統(tǒng)架構(gòu)示意
2、圖開(kāi)源分布式中間件double項(xiàng)目地址:/actiontech/dble開(kāi)源分布式中間件doubledble是基于MyCAT的增強(qiáng)改進(jìn)版的分布式數(shù)據(jù)庫(kù)中間件MyCAT優(yōu)點(diǎn):開(kāi)源,社區(qū)知名度高,出身名門(Ali Cobar)dble 解決了MyCAT的哪些問(wèn)題/限制?一、系統(tǒng)性解決復(fù)雜查詢 二、明晰SQL語(yǔ)法支持邊界 三、增強(qiáng)了語(yǔ)法兼容性四、保障代碼質(zhì)量五、其他增強(qiáng)功能舉例系統(tǒng)性解決復(fù)雜查詢解決復(fù)雜查詢需要的系統(tǒng)方法什么是復(fù)雜查詢?單表的 聚合函數(shù) 矢量函數(shù)運(yùn)算表達(dá)式多表之間 JOIN UNION SUBQUERY以上組合什么是系統(tǒng)性方法?1.周髀算經(jīng)中記載 “句廣三, 股修四,徑隅五” 。2.
3、在平面上的一個(gè)直角三角形中, 兩個(gè)直角邊邊長(zhǎng)的平方加起來(lái)等 于斜邊長(zhǎng)的平方。解決復(fù)雜查詢需要的系統(tǒng)方法MyCAT的“勾股數(shù)”1:GLOBAL表GLOBAL表:對(duì)于數(shù)據(jù)量不 大的字典表(例:超市商品)在多個(gè)分片上 都有一份同樣 的副本相關(guān)JOIN語(yǔ)句 可以直接下發(fā) 給各個(gè)結(jié)點(diǎn), 直接合并結(jié)果 集就行。解決復(fù)雜查詢需要的系統(tǒng)方法(特例GLOBAL表)JOIN 例子(偽SQL):SELECT 日期,商品名,COUNT(*)AS 訂單量FROM 商品表JOIN 銷售詳單USING(商品ID)WHERE 日期范圍(跨結(jié) 點(diǎn))GROUPBY 日期,商品名。解決復(fù)雜查詢需要的系統(tǒng)方法(特例GLOBAL表)如
4、果QUERY是這樣呢:SELECT 商品類別,COUNT(DISTINCT商品ID)AS 賣出種類FROM 商品表JOIN 銷售詳單 USING(商品ID)WHERE 日期范圍(跨結(jié)點(diǎn))GROUP BY 商品類別解決復(fù)雜查詢需要的系統(tǒng)方法(特例GLOBAL表)SELECT 商品類別,COUNT(DISTINCT商品ID)AS 賣出種類FROM 商品表 JOIN 銷售詳單 USING(商品ID) WHERE 日期范圍(跨結(jié)點(diǎn))GROUP BY 商品類別解決復(fù)雜查詢需要的系統(tǒng)方法MyCAT的“勾股數(shù)”2:ER表ER表: 對(duì)于有 外鍵關(guān)系的表, 可以根據(jù)外鍵 關(guān)系拆分注意,外鍵列 需要依賴于拆 分列
5、,不能有 1:N的關(guān)系解決復(fù)雜查詢需要的系統(tǒng)方法(特例ER表)ER表拆分方法假設(shè)按照銷售 單表的日期拆 分,流水號(hào)作 為外鍵解決復(fù)雜查詢需要的系統(tǒng)方法(特例ER表)當(dāng)ER關(guān)系是多個(gè)維度時(shí),無(wú)法用ER表拆分方法解決所有問(wèn)題解決復(fù)雜查詢需要的系統(tǒng)方法(特例Hint)MyCAT的“勾股數(shù)”3:HintHint:對(duì)于兩個(gè)表的跨結(jié)點(diǎn)查詢 使用hint的方式做未解決多于兩個(gè)表的問(wèn)題未解決JOIN 條件復(fù)雜的問(wèn)題 增加Hint的兼容性代價(jià)其實(shí)就是這樣的nest loop join系統(tǒng)解決復(fù)雜查詢-關(guān)系代數(shù)復(fù)雜查詢實(shí)現(xiàn)思路:關(guān)系代數(shù) 查詢樹1.解析SQL時(shí)候,將SQL轉(zhuǎn)為基本元組,以及對(duì)元組進(jìn)行關(guān)系運(yùn)算,構(gòu)建
6、查詢樹 。2.將基本元組及可下發(fā)的運(yùn)算作為查詢樹的葉子節(jié)點(diǎn),下發(fā)到物理數(shù)據(jù)結(jié)點(diǎn)查詢。3.結(jié)果集返回后,不可下發(fā)的運(yùn)算作為查詢樹的非葉子節(jié)點(diǎn)對(duì)子樹返回結(jié)果處理。關(guān)系代數(shù)(部分)系統(tǒng)解決復(fù)雜查詢-JOINJOIN 舉例:select * from table1 a inner join table2 b on a.id =b.id ; table1 有四個(gè)分片dn14table2 有2個(gè)分片 dn1,dn2查詢樹:下發(fā)語(yǔ)句:SQL1:select * from table1; SQL2:select * from table2;中間件后續(xù)操作:1.各個(gè)節(jié)點(diǎn)結(jié)果合并2.將結(jié)果集按照 a.id =b.
7、id過(guò)濾及JOIN系統(tǒng)解決復(fù)雜查詢子查詢復(fù)雜聚合系統(tǒng)解決復(fù)雜查詢具體實(shí)現(xiàn)細(xì)節(jié)可以下載本人的另一次分享dble-開(kāi)源MySQL分布式中間件實(shí)現(xiàn)剖析UNION系統(tǒng)解決復(fù)雜查詢-案例sharding_four_node 按照 ID拆分為4個(gè)節(jié)點(diǎn)。拆分規(guī)則:對(duì)4求模。sharding_two_node 按照ID拆分為2個(gè)結(jié)點(diǎn)。拆分規(guī)則:對(duì)1024求模,0511分到第一個(gè)結(jié)點(diǎn),5121023拆分到第二個(gè)結(jié) 點(diǎn)。系統(tǒng)解決復(fù)雜查詢-案例 unionselect id from sharding_two_node a union select id from sharding_four_node ;MyCAT
8、結(jié)果:dble結(jié)果系統(tǒng)解決復(fù)雜查詢-案例 union allselect id from sharding_two_node a union all select id from sharding_four_node ;MyCAT結(jié)果dble結(jié)果系統(tǒng)解決復(fù)雜查詢-案例 復(fù)雜表達(dá)式select abs(sum(c_decimal) from sharding_four_nodeMyCAT結(jié)果dble結(jié)果系統(tǒng)解決復(fù)雜查詢-案例 子查詢select id from sharding_two_node where id=( select min(id) from sharding_four_node)
9、dble結(jié)果MyCAT1.6.1結(jié)果MyCAT1.6.5結(jié)果:連接斷開(kāi),有時(shí)會(huì)hang住系統(tǒng)解決復(fù)雜查詢-案例 JOINselect a.id,b.* from sharding_two_node a inner join sharding_four_node b on a.id =b.id;dble結(jié)果MyCAT1.6.1結(jié)果MyCAT1.6.5結(jié)果: 略系統(tǒng)解決復(fù)雜查詢-案例 JOIN改動(dòng)select a.id,b.* from sharding_two_node a inner join sharding_four_node b on a.id =b.id+1;MyCAT1.6.5結(jié)果:
10、原來(lái)1.6.5只是把Hint固化到代碼里, 判斷兩表拆分規(guī)則不同就直接用hint邏輯dble結(jié)果系統(tǒng)解決復(fù)雜查詢-案例 JOIN for1.6.5sharding_four_node sharding_four_node2均按照ID拆分為4個(gè)節(jié)點(diǎn)。 拆分規(guī)則:對(duì)4求模。唯一不同在于分布結(jié)點(diǎn)的順序不同系統(tǒng)解決復(fù)雜查詢-JOIN for1.6.5select * from sharding_four_node2 a inner join sharding_four_node bon a.id =b.id;1.6.5版判斷拆分規(guī)則不同就使用 hint邏輯.這里規(guī)則相同,就回到了不支持跨 結(jié)點(diǎn)查詢的老
11、路子上dble結(jié)果系統(tǒng)解決復(fù)雜查詢-復(fù)雜查詢的查詢計(jì)劃explain select * from sharding_two_node a inner join sharding_four_node b on a.id =b.id;明晰語(yǔ)法支持邊界明晰SQL支持邊界(MYCAT SET 語(yǔ)句)MyCAT的 setsession.tx_read_only明晰SQL支持邊界( MYCAT SET 語(yǔ)句)甚至明晰SQL支持邊界( MYCAT SET 語(yǔ)句)Set語(yǔ)句為什么會(huì)出現(xiàn)這種情況呢,我們看一下源碼。MYCAT 在枚舉了一些set選項(xiàng)之后,其余set一律返回OK明晰SQL支持邊界(DBLE SET
12、 語(yǔ)句)dble的 setsession.tx_read_only明晰SQL支持邊界(DBLE SET 語(yǔ)句)明晰SQL支持邊界(不支持語(yǔ)句明確提示)例1.dble不支持設(shè)置全局只讀的功能,會(huì)有明確報(bào)錯(cuò)例2.根據(jù)MySQL官方文檔,沒(méi)有SESSION 或者GLOBAL關(guān)鍵字,事務(wù)變量只對(duì) 下一條事務(wù)生效dble還沒(méi)實(shí)現(xiàn)此功能,就會(huì)明確報(bào)不支持增強(qiáng)語(yǔ)法兼容性語(yǔ)法兼容性例1: MyCAT的insert強(qiáng)制必須寫完整列名,否則報(bào)錯(cuò):dble語(yǔ)法兼容性更強(qiáng):例2. MyCAT的全局序列自定義了語(yǔ)法dble和普通的mysql自增長(zhǎng)列語(yǔ)法相同:語(yǔ)法兼容性例3: MyCAT的insert拼寫錯(cuò)誤dble會(huì)提
13、示語(yǔ)法錯(cuò)誤保障代碼質(zhì)量保證軟件質(zhì)量MyCAT開(kāi)源以來(lái), 以下幾個(gè)方面影響了代碼的質(zhì)量l沒(méi)有開(kāi)發(fā)團(tuán)隊(duì),無(wú)人重構(gòu)代碼,舊代碼殘留 l沒(méi)有測(cè)試團(tuán)隊(duì),無(wú)法及時(shí)發(fā)現(xiàn)BUGl沒(méi)有良好的review機(jī)制,貢獻(xiàn)者代碼質(zhì)量良莠不齊 l沒(méi)有運(yùn)維使用團(tuán)隊(duì),僅從開(kāi)發(fā)者角度,很難發(fā)現(xiàn)設(shè)計(jì)缺陷MyCAT啟動(dòng)類的殘留代碼當(dāng)把內(nèi)存 類型參數(shù) 設(shè)為1時(shí),對(duì)應(yīng)代碼 分支沒(méi)有 初始化內(nèi) 存緩沖池MyCAT啟動(dòng)類的殘留代碼現(xiàn)象也很簡(jiǎn)單,啟動(dòng)后客戶端連不上。 日志里全是NP異常這個(gè)bug一定程度反映了代碼質(zhì)量。如果認(rèn)真閱讀過(guò)啟動(dòng)類代碼,能夠發(fā)現(xiàn)這里沒(méi)有初始化的。無(wú)人修復(fù)的內(nèi)存double free Bug重現(xiàn)步驟:建立分區(qū)表,插入幾條
14、數(shù)據(jù),使得每個(gè)分區(qū)都有數(shù)據(jù),用sysbench單線程壓力測(cè)試sysbench -mysql-db=testdb -mysql-host=10.186.xx.xx -mysql-port=8066- mysql-user=root -mysql-password=123456-threads=1 -report-interval=1 - max-requests=0 -time=600-percentile=99 /tmp/sysbenchscript/aggr.luarun無(wú)人修復(fù)的內(nèi)存double free Bug現(xiàn)象:從dble的issue list可以看出,這個(gè)編號(hào)為4 的bug在我司測(cè)
15、試團(tuán)隊(duì) 那里是很早就發(fā)現(xiàn)。貢獻(xiàn)者代碼沒(méi)有嚴(yán)格reviewBug #1194截圖貢獻(xiàn)者代碼沒(méi)有嚴(yán)格reviewBug #1194 的修復(fù):結(jié)果正確,邏輯奇怪1.仍然是在循環(huán)中嘗試 按照索引移除ArrayList 中某些值。2.使用了自動(dòng)裝箱導(dǎo)致remove 方法不起任何 作用3.改變大小是有用的。開(kāi)發(fā)者容易忽視的設(shè)計(jì)缺陷(需要真正的使用者)例1.任何一個(gè)數(shù)據(jù)庫(kù)用戶都可以登陸管理端,登陸上去后能夠執(zhí)行很多高權(quán)限 的命令,比如服務(wù)下線,修改配置之類的操作。開(kāi)發(fā)者容易忽視的設(shè)計(jì)缺陷(需要真正的使用者)例2.時(shí)間戳全局序列的實(shí)現(xiàn)方式是這樣的64 位二進(jìn)制 (42(毫秒生成)+5(機(jī)器)+5(業(yè)務(wù))+12
16、(毫秒內(nèi)重復(fù)累加))讓我們來(lái)分析一下這兩個(gè)值有什么特點(diǎn):開(kāi)發(fā)者容易忽視的設(shè)計(jì)缺陷(需要真正的使用者)例2.時(shí)間戳全局序列64 位二進(jìn)制 (42(毫秒生成)+5(機(jī)器)+5(業(yè)務(wù))+12(毫秒內(nèi)重復(fù)累加)在低并發(fā)(1000qps以下)的情況下,1毫秒內(nèi)只有一條數(shù)據(jù),則這條數(shù) 據(jù)后12位是固定值0,也就是說(shuō)生成的值一定是4096的倍數(shù) 。如果拆分算法是hash拆分,將自增列的值做了模1024的運(yùn)算。 則得到的結(jié)果一定是0,則拆分的數(shù)據(jù)將發(fā)生嚴(yán)重傾斜,數(shù)據(jù)會(huì)全部集中到第一個(gè)結(jié)點(diǎn)上。其他求模相關(guān)的算法也會(huì)遇到相同問(wèn)題。dble的自動(dòng)化工具的引入靜態(tài)代碼分析工具可持續(xù)集成自動(dòng)化測(cè)試其他增強(qiáng)功能舉例智能E
17、R路由在之前介紹了MyCAT的ER拆分,有類聚簇關(guān)系的表可以通過(guò)配置父子表 來(lái)實(shí)現(xiàn)Join整體下發(fā)。例如:Select * from er_parent a inner join er_child1 b on a.id =b.child1_id我們擴(kuò)展了ER拆分的限制,使得ER表不必顯式配置,而是自動(dòng)識(shí)別。智能ER路由例如:配置方式1.ER識(shí)別過(guò)程2.ER分組結(jié)果Hash分區(qū)限制MyCAT的Hash拆分有個(gè)約束,要求拆分求模的基數(shù)是2的N次方。 我們閱讀了代碼之后,發(fā)現(xiàn)原因是這樣的.當(dāng) A MOD(POW(2 , N) 可以有一種快捷的算法。 RESULT = A & (POW(2,N)-1).實(shí)際測(cè)試中,這種優(yōu)化能提高的性能微乎其微。 所以,我們?nèi)∠诉@個(gè)約束?;鶖?shù)是2的N次方,保持上述算法。 其他基數(shù),用普通求模算法。其他重要bug舉例序號(hào)Bug描述
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 旅游產(chǎn)品的創(chuàng)新開(kāi)發(fā)
- 二零二五年度綠色能源項(xiàng)目9%股權(quán)置換協(xié)議2篇
- 科技魔力:農(nóng)業(yè)4.0
- 2025版廠房拆除工程環(huán)境保護(hù)及補(bǔ)償協(xié)議4篇
- 專業(yè)設(shè)備銷售協(xié)議樣例版B版
- 2025年度拆遷建筑工程居間服務(wù)委托合同4篇
- 2025年度工業(yè)自動(dòng)化設(shè)備租賃合同參考范文4篇
- 2025年廠房設(shè)備租賃與數(shù)字化管理合同范本3篇
- 二零二五版養(yǎng)老地產(chǎn)租賃合同樣本3篇
- 2025年度體育場(chǎng)館租賃合同保證金與押金支付及退還方案3篇
- 重慶育才中學(xué)2025屆化學(xué)九上期末教學(xué)質(zhì)量檢測(cè)試題含解析
- 成都市2022級(jí)(2025屆)高中畢業(yè)班摸底測(cè)試(零診)數(shù)學(xué)試卷(含答案)
- 【云南省中藥材出口現(xiàn)狀、問(wèn)題及對(duì)策11000字(論文)】
- 服裝板房管理制度
- 河北省興隆縣盛嘉恒信礦業(yè)有限公司李杖子硅石礦礦山地質(zhì)環(huán)境保護(hù)與治理恢復(fù)方案
- 第七章力與運(yùn)動(dòng)第八章壓強(qiáng)第九章浮力綜合檢測(cè)題(一)-2023-2024學(xué)年滬科版物理八年級(jí)下學(xué)期
- 醫(yī)療機(jī)構(gòu)診療科目名錄(2022含注釋)
- 微視頻基地策劃方案
- 光伏項(xiàng)目質(zhì)量評(píng)估報(bào)告
- 八年級(jí)一本·現(xiàn)代文閱讀訓(xùn)練100篇
- 2023年電池系統(tǒng)測(cè)試工程師年度總結(jié)及下一年計(jì)劃
評(píng)論
0/150
提交評(píng)論