阿里巴巴Cobar架構(gòu)設(shè)計(jì)與實(shí)踐

上傳人:san****019 文檔編號(hào):22838867 上傳時(shí)間:2021-06-01 格式:PPTX 頁(yè)數(shù):163 大?。?,018.43KB
收藏 版權(quán)申訴 舉報(bào) 下載
阿里巴巴Cobar架構(gòu)設(shè)計(jì)與實(shí)踐_第1頁(yè)
第1頁(yè) / 共163頁(yè)
阿里巴巴Cobar架構(gòu)設(shè)計(jì)與實(shí)踐_第2頁(yè)
第2頁(yè) / 共163頁(yè)
阿里巴巴Cobar架構(gòu)設(shè)計(jì)與實(shí)踐_第3頁(yè)
第3頁(yè) / 共163頁(yè)

下載文檔到電腦,查找使用更方便

14.9 積分

下載資源

還剩頁(yè)未讀,繼續(xù)閱讀

資源描述:

《阿里巴巴Cobar架構(gòu)設(shè)計(jì)與實(shí)踐》由會(huì)員分享,可在線閱讀,更多相關(guān)《阿里巴巴Cobar架構(gòu)設(shè)計(jì)與實(shí)踐(163頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。

1、阿里巴巴分布式數(shù)據(jù)庫(kù)原理、實(shí)現(xiàn)和應(yīng)用2012.11集團(tuán)共享技術(shù)平臺(tái)分布式數(shù)據(jù)庫(kù)邱碩2012華東架構(gòu)師大會(huì) 分布式數(shù)據(jù)庫(kù)中間件App App App AppCobarOracle MySQL MySQL MySQLErosa Oracle ErosaMySQL ErosaMySQL ErosaMySQLEromanga Otter Oracle MySQL MySQLOtterErosaOracle ErosaMySQL ErosaMySQLEromanga 性 能 容 量 高 可 用 數(shù) 據(jù) 消 費(fèi) 時(shí) 效 性 跨 機(jī) 房 數(shù) 據(jù) 同 步ASCDW. 分布式數(shù)據(jù)庫(kù)中間件App App App

2、AppCobarOracle MySQL MySQL MySQLErosa Oracle ErosaMySQL ErosaMySQL ErosaMySQLEromanga Oracle MySQL MySQLOtter 性能 容量 高可用 數(shù) 據(jù) 消 費(fèi) 時(shí) 效 性 跨 機(jī) 房 數(shù) 據(jù) 同 步ErosaOracle ErosaMySQL ErosaMySQLEromangaOtterASCDW. 分布式數(shù)據(jù)庫(kù)中間件App App App AppCobarOracle MySQL MySQL MySQL Oracle MySQL MySQL OtterErosaOracle ErosaMySQL

3、 ErosaMySQLEromanga 性 能 容 量 高 可 用 數(shù)據(jù)消費(fèi)時(shí)效性 跨 機(jī) 房 數(shù) 據(jù) 同 步ErosaOracle ErosaMySQL ErosaMySQL ErosaMySQLEromanga OtterASCDW. 分布式數(shù)據(jù)庫(kù)中間件App App App AppCobarOracle MySQL MySQL MySQLErosa Oracle ErosaMySQL ErosaMySQL ErosaMySQLEromanga Oracle MySQL MySQLErosaOracle ErosaMySQL ErosaMySQLEromanga 性 能 容 量 高 可 用

4、 數(shù) 據(jù) 消 費(fèi) 時(shí) 效 性 跨機(jī)房數(shù)據(jù)同步OtterASCDW. Otter 分布式數(shù)據(jù)庫(kù)中間件App App App AppCobarOracle MySQL MySQL MySQLErosa Oracle ErosaMySQL ErosaMySQL ErosaMySQLEromanga Oracle MySQL MySQLOtter 性能 容量 高可用 數(shù) 據(jù) 消 費(fèi) 時(shí) 效 性 跨 機(jī) 房 數(shù) 據(jù) 同 步ErosaOracle ErosaMySQL ErosaMySQLEromangaOtterASCDW. 大綱n 中間件引入n Cobar策略n 系統(tǒng)實(shí)現(xiàn)n 實(shí)施應(yīng)用 Cobar之前

5、Oracle單點(diǎn)數(shù)據(jù)庫(kù) 性能問(wèn)題 中 文 站 offer總 數(shù) : 2008年 1億 - 2011年 3億 高 峰 時(shí) : load 30、 cpu使 用 率 90% 數(shù)據(jù)庫(kù)連接過(guò)多 可用性問(wèn)題 Standby切 換 故 障 成本和伸縮性問(wèn)題 依 賴 高 成 本 的 硬 件 設(shè) 備 Oracle MySQL MySQL MySQLMySQL MySQL MySQLMySQL MySQL MySQL單點(diǎn):MySQL集群替換OracleMySQL MySQL MySQL Oracle單點(diǎn)數(shù)據(jù)庫(kù) 性能問(wèn)題 中 文 站 offer總 數(shù) : 08年 1億 - 今 天 3億 高 峰 時(shí) : load 3

6、0、 cpu使 用 率 90% 數(shù)據(jù)庫(kù)連接過(guò)多 可用性問(wèn)題 Standby切 換 故 障 成本和伸縮性問(wèn)題 依 賴 高 成 本 的 硬 件 設(shè) 備Cobar引入 水平拆分 ID MEMBE_ID INFO1 pavarotti17 11 pavarotti17 MySQL ID MEMBE_ID INFO4 test1234 5 test1234 ID MEMBE_ID INFO3 abcd 9 abcd 20 abcd MySQLMySQLCobarApp Oracle單點(diǎn)數(shù)據(jù)庫(kù) 性能問(wèn)題 中 文 站 offer總 數(shù) : 08年 1億 - 今 天 3億 高 峰 時(shí) : load 30、 c

7、pu使 用 率 90% 數(shù)據(jù)庫(kù)連接過(guò)多 可用性問(wèn)題 Standby切 換 故 障 成本和伸縮性問(wèn)題 依 賴 高 成 本 的 硬 件 設(shè) 備App ID MEMBE_ID INFO1 pavarotti17 11 pavarotti17 MySQL ID MEMBE_ID INFO4 test1234 5 test1234 ID MEMBE_ID INFO3 abcd 9 abcd 20 abcd MySQLMySQLAppAppAppAppAppAppApp Cobar引入 連接復(fù)用App ID MEMBE_ID INFO1 pavarotti17 11 pavarotti17 MySQL I

8、D MEMBE_ID INFO4 test1234 5 test1234 ID MEMBE_ID INFO3 abcd 9 abcd 20 abcd MySQLMySQLCobarProxyAppAppAppAppAppAppApp Oracle單點(diǎn)數(shù)據(jù)庫(kù) 性能問(wèn)題 中 文 站 offer總 數(shù) : 08年 1億 - 今 天 3億 高 峰 時(shí) : load 30、 cpu使 用 率 90% 數(shù)據(jù)庫(kù)連接過(guò)多 可用性問(wèn)題 Standby切 換 故 障 成本和伸縮性問(wèn)題 依 賴 高 成 本 的 硬 件 設(shè) 備Cobar引入 ID MEMBE_ID INFO1 pavarotti17 11 pavar

9、otti17 MySQLCobarApp X Cobar引入 failover ID MEMBE_ID INFO1 pavarotti17 11 pavarotti17 MySQL Master1CobarApp ID MEMBE_ID INFO1 pavarotti17 11 pavarotti17 MySQL Master2X MySQLReplication Cobar引入 failover ID MEMBE_ID INFO1 pavarotti17 11 pavarotti17 CobarApp ID MEMBE_ID INFO1 pavarotti17 11 pavarotti17

10、MySQLReplication MySQL Master1MySQL Master2 大綱n 中間件引入n Cobar策略n 系統(tǒng)實(shí)現(xiàn)n 實(shí)施應(yīng)用 Oracle MySQL MySQL MySQLMySQL MySQL MySQLMySQL MySQL MySQLMySQL MySQL MySQL拆分?jǐn)?shù)據(jù)表 水平拆分ID MEMBE_ID INFO1 pavarotti17 3 abcd 4 test1234 5 test1234 9 abcd 11 pavarotti17 20 abcd 水平拆分ID MEMBE_ID INFO1 pavarotti17 3 abcd 4 test1234

11、 5 test1234 9 abcd 11 pavarotti17 20 abcd 拆分字段 水平拆分ID MEMBE_ID INFO1 pavarotti17 3 abcd 4 test1234 5 test1234 9 abcd 11 pavarotti17 20 abcd ID MEMBE_ID INFO1 pavarotti17 4 test1234 5 test1234 11 pavarotti17 ID MEMBE_ID INFO3 abcd 9 abcd 20 abcd f(pavarotti17)=庫(kù)1f(test1234)=庫(kù)1f(test1234)=庫(kù)1f(pavarott

12、i17)=庫(kù)1f(abcd)=庫(kù)2f(abcd)=庫(kù)2f(abcd)=庫(kù)2庫(kù)1庫(kù)2拆分字段 水平拆分ID MEMBE_ID INFO1 pavarotti17 3 abcd 4 test1234 5 test1234 9 abcd 11 pavarotti17 20 abcd ID MEMBE_ID INFO1 pavarotti17 4 test1234 5 test1234 11 pavarotti17 ID MEMBE_ID INFO3 abcd 9 abcd 20 abcd f(abcd)=庫(kù)2庫(kù)1庫(kù)2拆分字段f(pavarotti17)=庫(kù)1f(test1234)=庫(kù)1f(test1

13、234)=庫(kù)1f(pavarotti17)=庫(kù)1f(abcd)=庫(kù)2f(abcd)=庫(kù)2路由算法 路由算法pavarotti17f(pavarotti17)=庫(kù)1 路由算法pavarotti17部 分 截 取hash( ) = 3170972965401 路由算法hash(pavarott) = 3170972965401 % 1024 = 5370 1023 路由算法hash(pavarott) = 3170972965401 % 1024 = 5370 255 256 511 512 767 768 1023256256256256分庫(kù)1 分庫(kù)2 分庫(kù)3 分庫(kù)4 路由算法hash(pava

14、rott) = 3170972965401 % 1024 = 5370 255 256 511 512 767 768 1023256256256256分庫(kù)1 分庫(kù)2 分庫(kù)3 分庫(kù)4 路由算法擴(kuò)容hash(pavarott) = 3170972965401 % 1024 = 5370 127 128 255 256 383 384 511 512 639 640 767 768 895 896 1023128 128 128 128 128 128 128 128分庫(kù)1 分庫(kù)2 分庫(kù)3 分庫(kù)4 路由算法擴(kuò)容hash(pavarott) = 3170972965401 % 1024 = 5370

15、 127 128 255 256 383 384 511 512 639 640 767 768 895 896 1023128 128 128 128 128 128 128 128分庫(kù)1 分庫(kù)2 分庫(kù)3 分庫(kù)4 分庫(kù)5 分庫(kù)6 分庫(kù)7 分庫(kù)8 原分庫(kù)1 分庫(kù)2 分庫(kù)3 分庫(kù)4原 原 原 路由算法非均勻分布hash(pavarott) = 3170972965401 % 1024 = 5370 511 512 767 768 895 896 1023512 256 128 128分庫(kù)1 分庫(kù)2 分庫(kù)3 分庫(kù)4 拆分表的數(shù)據(jù)訪問(wèn)SQL轉(zhuǎn)發(fā)ID MEMBE_ID INFO1 pavarotti1

16、7 4 test1234 5 test1234 11 pavarotti17 ID MEMBE_ID INFO3 abcd 9 abcd 20 abcd CobarAppselect * from tb1 where member_id=test1234 拆分表的數(shù)據(jù)訪問(wèn)SQL轉(zhuǎn)發(fā)ID MEMBE_ID INFO1 pavarotti17 4 test1234 5 test1234 11 pavarotti17 ID MEMBE_ID INFO3 abcd 9 abcd 20 abcd CobarAppselect * from tb1 where member_id=test1234 ID

17、MEMBE_ID INFO1 pavarotti17 4 test1234 5 test1234 11 pavarotti17 ID MEMBE_ID INFO3 abcd 9 abcd 20 abcd CobarAppSELECT * FROM tb1 WHERE member_id IN (test1234,pavarotti17,abcd)拆分表的數(shù)據(jù)訪問(wèn)SQL轉(zhuǎn)發(fā) ID MEMBE_ID INFO1 pavarotti17 4 test1234 5 test1234 11 pavarotti17 ID MEMBE_ID INFO3 abcd 9 abcd 20 abcd CobarAp

18、pselect * from tb1 where member_id in (test1234,pavarotti17)select * from tb1 where member_id in (abcd)拆分表的數(shù)據(jù)訪問(wèn)SQL轉(zhuǎn)發(fā) ID MEMBE_ID INFO1 pavarotti17 4 test1234 5 test1234 11 pavarotti17 ID MEMBE_ID INFO3 abcd 9 abcd 20 abcd ResultMerger前臺(tái)通信ResultSet:row1row2ResultSet:row3row4row5ResultSet:row3row1row4

19、row5row2拆分表的數(shù)據(jù)訪問(wèn)結(jié)果返回 多維水平拆分visit表productuserinfoCoca-Cola A p e p s i C Fanta D Coca-Cola A Coca-Cola C Fanta B 7Up D p e p s i A productuserinfoCoca-Cola A Coca-Cola A Coca-Cola C productuserinfop e p s i C p e p s i A productuserinfoFanta D Fanta B productuserinfo7Up D SELECT * FROM visit WHERE us

20、er=A 多維水平拆分visit表productuserinfoCoca-Cola A p e p s i C Fanta D Coca-Cola A Coca-Cola C Fanta B 7Up D p e p s i A productuserinfoCoca-Cola A Coca-Cola A p e p s i A productuserinfop e p s i C Coca-Cola C productuserinfoFanta D 7Up D productuserinfoFanta B SELECT * FROM visit WHERE product = Coca-Col

21、a 分 庫(kù) 1 分 庫(kù) 2 分 庫(kù) 3 分 庫(kù) 4分 庫(kù) 5 分 庫(kù) 6 分 庫(kù) 7 分 庫(kù) 8分 庫(kù) 9 分 庫(kù) 10 分 庫(kù) 11 分 庫(kù) 12分 庫(kù) 13 分 庫(kù) 14 分 庫(kù) 15 分 庫(kù) 16 product值Hash取 模user值Hash取 模01230123visit表USER PRODUCT 一張表的多個(gè)字段同時(shí)作為拆分字段 Hash(“A”)%4 = 分 庫(kù) 1 分 庫(kù) 2 分 庫(kù) 3 分 庫(kù) 4分 庫(kù) 5 分 庫(kù) 6 分 庫(kù) 7 分 庫(kù) 8分 庫(kù) 9 分 庫(kù) 10 分 庫(kù) 11 分 庫(kù) 12分 庫(kù) 13 分 庫(kù) 14 分 庫(kù) 15 分 庫(kù) 16 product值Hash取

22、 模user值Hash取 模01230123CocaColaAHash(“CocaCola”)%4 = SELECT * FROM visit WHERE product=ColaCola AND user=A 分 庫(kù) 1 分 庫(kù) 2 分 庫(kù) 3 分 庫(kù) 4分 庫(kù) 5 分 庫(kù) 6 分 庫(kù) 7 分 庫(kù) 8分 庫(kù) 9 分 庫(kù) 10 分 庫(kù) 11 分 庫(kù) 12分 庫(kù) 13 分 庫(kù) 14 分 庫(kù) 15 分 庫(kù) 16 product值Hash取 模user值Hash取 模01230123CocaColaHash(“CocaCola”)%4 = SELECT * FROM visit WHERE prod

23、uct=ColaCola Hash(“A”)%4 = A分 庫(kù) 1 分 庫(kù) 2 分 庫(kù) 3 分 庫(kù) 4分 庫(kù) 5 分 庫(kù) 6 分 庫(kù) 7 分 庫(kù) 8分 庫(kù) 9 分 庫(kù) 10 分 庫(kù) 11 分 庫(kù) 12分 庫(kù) 13 分 庫(kù) 14 分 庫(kù) 15 分 庫(kù) 16 product值Hash取 模user值Hash取 模01230123SELECT * FROM visit WHERE product=ColaCola AND user=A Cobar的策略 MySQL集群替代Oracle單點(diǎn) 基于表的水平拆分和分布 根 據(jù) 字 段 值 的 一 致 性 Hash分 布 多 維 拆 分 數(shù)據(jù)查詢方式 根 據(jù)

24、 where中 的 拆 分 字 段 分 發(fā) SQL語(yǔ)句其他元素的處理 將 Cobar收 到 的 SQL語(yǔ) 句 做 變 換 分 發(fā) 到 各 個(gè) 分 庫(kù) 執(zhí) 行 對(duì) 執(zhí) 行 結(jié) 果 合 并 、 處 理 保 證 返 回 前 端 的 內(nèi) 容 滿 足 語(yǔ) 義 JOIN有限的處理 跨庫(kù)JOIN問(wèn)題SELECT * FROM tb1 INNER JOIN tb2 ON t1.MEMBER_ID=t2.NAME ID MEMBE_ID2 zzzz4 xyzxyz ID NAME4 efghijk5 aaaa6 abcdID MEMBE_ID1 efghijk3 xxxxxx5 abcd ID NAME2 zz

25、zz3 xyzxyztb1tb1tb2tb2ID MEMBER_ID ID NAME1 efghijk 4 efghijk5 abcd 6 abcd2 zzzz 2 zzzz4 xyzxyz 3 xyzxyz 迭代查詢SELECT * FROM tb1 INNER JOIN tb2 ON t1.MEMBER_ID=t2.NAME ID MEMBE_ID2 zzzz4 xyzxyz ID NAME4 efghijk5 aaaa6 abcdID MEMBE_ID1 efghijk3 xxxxxx5 abcd ID NAME2 zzzz3 xyzxyztb1tb1tb2tb2FOR row1 IN

26、select * FROM tb1ADD(SELECT * FROM tb2 WHERE tb2.name = row1.member_id)TO RESULT 跨庫(kù)索引ID MEMBE_ID 2 zzzz4 xyzxyz ID NAME4 efghijk5 aaaa6 abcdID MEMBE_ID1 efghijk3 xxxxxx5 abcd ID NAME2 zzzz3 xyzxyztb1tb1tb2tb2ID1 ID2 JOIN_COL2 2 zzzz4 3 xyzxyzidxID1 ID2 JOIN_COL1 4 efghijk5 6 abcdidx掃描idx,再根據(jù)每一行的id1,

27、id2查到最終結(jié)果 跨庫(kù)索引ID MEMBE_ID 2 zzzz4 xyzxyz ID NAME4 efghijk5 aaaa6 abcdID MEMBE_ID1 efghijk3 xxxxxx5 abcd ID NAME2 zzzz3 xyzxyztb1tb1tb2tb2SELECT * FROM tb1 INNER JOIN tb2 ON t1.MEMBER_ID=t2.NAME WHERE t1.id = 5SELECT * FROM idx WHERE id1 = 5再根據(jù)id1,id2查到最終結(jié)果 跨庫(kù)索引ID MEMBE_ID 2 zzzz4 xyzxyz ID NAME4 efg

28、hijk5 aaaa6 abcdID MEMBE_ID1 efghijk3 xxxxxx5 abcd ID NAME2 zzzz3 xyzxyztb1tb1tb2tb2ID1 ID2 JOIN_COL2 2 zzzz4 3 xyzxyzidxID1 ID2 JOIN_COL1 4 efghijk5 6 abcdidx一定以 JOIN_COL 為索引的拆分字段嗎? 跨庫(kù)索引SELECT * FROM tb1 INNER JOIN tb2 ON t1.MEMBER_ID=t2.NAME WHERE t1.gmt600 ID MEMBE_ID GMT2 zzzz 5254 xyzxyz 1010 I

29、D NAME4 efghijk5 aaaa6 abcdID MEMBE_ID GMT1 efghijk 12053 xxxxxx 1315 abcd 604 ID NAME2 zzzz3 xyzxyztb1tb1tb2tb2 跨庫(kù)索引 ID MEMBE_ID GMT2 zzzz 5254 xyzxyz 1010 ID NAME4 efghijk5 aaaa6 abcdID MEMBE_ID GMT1 efghijk 12053 xxxxxx 1315 abcd 604 ID NAME2 zzzz3 xyzxyztb1tb1tb2tb2ID1 ID2 JOIN_COL2 2 zzzz4 3 xy

30、zxyzidxID1 ID2 JOIN_COL1 4 efghijk5 6 abcdidx ID MEMBE_ID2 zzzz4 xyzxyzID MEMBE_ID1 efghijk3 xxxxxx5 abcdtb1tb1ID1 ID2 JOIN_COL2 2 zzzz4 3 xyzxyzidxID1 ID2 JOIN_COL1 4 efghijk5 6 abcdidxSELECT idx.id2, tb1.* FROM idx INNER JOIN tb1 ON idx.id1=tb1.id WHERE t1.gmt600SELECT idx.id2, tb1.* FROM idx INNE

31、R JOIN tb1 ON idx.id1=tb1.id WHERE t1.gmt600 SELECT * FROM tb1 INNER JOIN tb2 ON t1.MEMBER_ID=t2.NAME WHERE t1.gmt600跨庫(kù)索引 跨庫(kù)索引 ID MEMBE_ID GMT2 zzzz 5254 xyzxyz 1010 ID NAME TIME4 efghijk 1235 aaaa 9226 abcd 222ID MEMBE_ID GMT1 efghijk 12053 xxxxxx 1315 abcd 604 ID NAME TIME2 zzzz 12013 xyzxyz 1111t

32、b1tb1tb2tb2SELECT * FROM tb1 INNER JOIN tb2 ON t1.MEMBER_ID=t2.NAME WHERE t1.gmt600 AND t2.time600ID1 ID2 JOIN_COL TIME2 2 zzzz 12014 3 xyzxyz 1111idx 跨庫(kù)索引 ID1 ID2 JOIN_COL TIME2 2 zzzz 12014 3 xyzxyz 1111idxID1 ID2 JOIN_COL TIME1 4 efghijk 1235 6 abcd 222idx 索引表的拆分 WHERE條件中的字段所在表的拆分字段,作為索引拆分字段 索引包含

33、 兩 張 表 的 主 鍵 JOIN字 段 WHERE中 的 其 他 字 段 索引的更新 分 布 式 事 務(wù) 的 支 持 SELECT c1 FROM tb1 ORDER BY c1 LIMIT 4, 2select . order by c1 limit 0, 6select . order by c1 limit 0, 6select . order by c1 limit 0, 6分 庫(kù) 1分 庫(kù) 2分 庫(kù) 3cobarOrder By/Limit 分 庫(kù) 1分 庫(kù) 2分 庫(kù) 3Order By/Limit456327810651111314973返 回 結(jié) 果返 回 結(jié) 果返 回 結(jié) 果

34、8SELECT c1 FROM tb1 ORDER BY c1 LIMIT 4, 2 分 庫(kù) 1分 庫(kù) 2分 庫(kù) 3Order By/Limit456327810651111314973返 回 結(jié) 果返 回 結(jié) 果返 回 結(jié) 果80最 終 結(jié) 果 集SELECT c1 FROM tb1 ORDER BY c1 LIMIT 4, 2 分 庫(kù) 1分 庫(kù) 2分 庫(kù) 3Order By/Limit45632781065111314973返 回 結(jié) 果返 回 結(jié) 果返 回 結(jié) 果81最 終 結(jié) 果 集SELECT c1 FROM tb1 ORDER BY c1 LIMIT 4, 2 分 庫(kù) 1分 庫(kù) 2

35、分 庫(kù) 3Order By/Limit4563781065111314973返 回 結(jié) 果返 回 結(jié) 果返 回 結(jié) 果82最 終 結(jié) 果 集SELECT c1 FROM tb1 ORDER BY c1 LIMIT 4, 2 分 庫(kù) 1分 庫(kù) 2分 庫(kù) 3Order By/Limit456781065111314973返 回 結(jié) 果返 回 結(jié) 果返 回 結(jié) 果83最 終 結(jié) 果 集SELECT c1 FROM tb1 ORDER BY c1 LIMIT 4, 2 分 庫(kù) 1分 庫(kù) 2分 庫(kù) 3Order By/Limit45678106511131497返 回 結(jié) 果返 回 結(jié) 果返 回 結(jié) 果

36、84最 終 結(jié) 果 集SELECT c1 FROM tb1 ORDER BY c1 LIMIT 4, 2 最 終 結(jié) 果 集 分 庫(kù) 1分 庫(kù) 2分 庫(kù) 3Order By/Limit5678106511131497返 回 結(jié) 果返 回 結(jié) 果返 回 結(jié) 果844SELECT c1 FROM tb1 ORDER BY c1 LIMIT 4, 2 最 終 結(jié) 果 集 分 庫(kù) 1分 庫(kù) 2分 庫(kù) 3Order By/Limit4678106511131497返 回 結(jié) 果返 回 結(jié) 果返 回 結(jié) 果845SELECT c1 FROM tb1 ORDER BY c1 LIMIT 4, 2 Order

37、 By/Limit 方案總結(jié)select c1 from tb1 order by c1 limit 100000000, 2 所有分庫(kù)都要查詢100000002條數(shù)據(jù) Cobar需要遍歷100000002條數(shù)據(jù) 對(duì)如下SQL 一次交互得到結(jié)果 Offset大小有限制 Order By / Limit 優(yōu)化 目標(biāo):解 決查 詢 量 大 問(wèn) 題遍 歷 量 大 問(wèn) 題 前提各 個(gè) 分 庫(kù) 數(shù) 據(jù) 分 布 大 致 一 樣 select c1 from tb1 order by c1 limit 9999999, 4select . order by c1 limit 33333333, 4selec

38、t . order by c1 limit 33333333, 4 select . order by c1 limit 33333333, 4分 庫(kù) 1分 庫(kù) 2分 庫(kù) 3 step1:分成3條語(yǔ)句發(fā)給分庫(kù) 分 庫(kù) 1分 庫(kù) 2分 庫(kù) 374538691076119返 回 結(jié) 果返 回 結(jié) 果返 回 結(jié) 果select c1 from tb1 order by c1 limit 9999999, 4 找出查詢結(jié)果中最小和最大值 分 庫(kù) 1分 庫(kù) 2分 庫(kù) 374538691076119返 回 結(jié) 果返 回 結(jié) 果返 回 結(jié) 果 step2:以最小值和最大值為界再查詢select c1 fro

39、m tb1 order by c1 limit 9999999, 43115311 分 庫(kù) 1分 庫(kù) 2分 庫(kù) 374538691076119返 回 結(jié) 果返 回 結(jié) 果返 回 結(jié) 果 step3:反查出每一個(gè)返回結(jié)果的offsetselect c1 from tb1 order by c1 limit 9999999, 4311531133333331條33333333條33333332條 分 庫(kù) 1分 庫(kù) 2分 庫(kù) 374538691076119返 回 結(jié) 果返 回 結(jié) 果返 回 結(jié) 果 類似于原始方案select c1 from tb1 order by c1 limit 9999999

40、, 431153119999996 分 庫(kù) 1分 庫(kù) 2分 庫(kù) 374538691076119返 回 結(jié) 果返 回 結(jié) 果返 回 結(jié) 果 類似于原始方案select c1 from tb1 order by c1 limit 9999999, 41153119999997 分 庫(kù) 1分 庫(kù) 2分 庫(kù) 37458691076119返 回 結(jié) 果返 回 結(jié) 果返 回 結(jié) 果 類似于原始方案select c1 from tb1 order by c1 limit 9999999, 41153119999998 分 庫(kù) 1分 庫(kù) 2分 庫(kù) 37458691076119返 回 結(jié) 果返 回 結(jié) 果返 回

41、 結(jié) 果 類似于原始方案select c1 from tb1 order by c1 limit 9999999, 4115119999999最 終 結(jié) 果 集 最 終 結(jié) 果 集 分 庫(kù) 1分 庫(kù) 2分 庫(kù) 37458691076119返 回 結(jié) 果返 回 結(jié) 果返 回 結(jié) 果 類似于原始方案select c1 from tb1 order by c1 limit 9999999, 4115119999999 最 終 結(jié) 果 集 分 庫(kù) 1分 庫(kù) 2分 庫(kù) 37458691076119返 回 結(jié) 果返 回 結(jié) 果返 回 結(jié) 果 類似于原始方案select c1 from tb1 order

42、by c1 limit 9999999, 4115119999999 最 終 結(jié) 果 集 分 庫(kù) 1分 庫(kù) 2分 庫(kù) 37458691076119返 回 結(jié) 果返 回 結(jié) 果返 回 結(jié) 果 類似于原始方案select c1 from tb1 order by c1 limit 9999999, 4115119999999 最 終 結(jié) 果 集 分 庫(kù) 1分 庫(kù) 2分 庫(kù) 37458691076119返 回 結(jié) 果返 回 結(jié) 果返 回 結(jié) 果 類似于原始方案select c1 from tb1 order by c1 limit 9999999, 4115119999999 Order By /

43、Limit 再優(yōu)化 Step1不必得到全部結(jié)果select min(c1) mi, max(c1) ma from (select c1 from tb1 order by c1 limit 3333333,4) t Step2和Step3合并select * from (select * from tb1 where c1 between mi and ma) t1, (select count(*) from tb1 where c1 mi) t2 Group BySELECT sum(price) FROM tb1 GROUP BY c1ID PRICE C11 12.3 22223 1

44、.6 1315 8.8 6047 6.3 131 ID PRICE C12 4.4 6044 7.6 1316 99.9 56 Group BySELECT sum(price) FROM tb1 GROUP BY c1ID PRICE C11 12.3 22223 1.6 1315 8.8 6047 6.3 131 ID PRICE C12 4.4 6044 7.6 1316 99.9 56SELECT sum(price), c1 FROM tb1 GROUP BY c1 ORDER BY c112.322227.91318.860499.9567.61314.4604 Group ByS

45、ELECT sum(price) FROM tb1 GROUP BY c1ID PRICE C11 12.3 22223 1.6 1315 8.8 6047 6.3 131 ID PRICE C12 4.4 6044 7.6 1316 99.9 56SELECT sum(price), c1 FROM tb1 GROUP BY c1 ORDER BY c112.322227.91318.86047.61314.4604最 終 結(jié) 果 集99.956 Group BySELECT sum(price) FROM tb1 GROUP BY c1ID PRICE C11 12.3 22223 1.6

46、 1315 8.8 6047 6.3 131 ID PRICE C12 4.4 6044 7.6 1316 99.9 56SELECT sum(price), c1 FROM tb1 GROUP BY c1 ORDER BY c112.322227.91318.86047.61314.4604最 終 結(jié) 果 集99.956 最 終 結(jié) 果 集 Group BySELECT sum(price) FROM tb1 GROUP BY c1ID PRICE C11 12.3 22223 1.6 1315 8.8 6047 6.3 131ID PRICE C12 4.4 6044 7.6 1316 9

47、9.9 56SELECT sum(price), c1 FROM tb1 GROUP BY c1 ORDER BY c112.3222215.51318.86044.460499.956 最 終 結(jié) 果 集 Group BySELECT sum(price) FROM tb1 GROUP BY c1ID PRICE C11 12.3 22223 1.6 1315 8.8 6047 6.3 131ID PRICE C12 4.4 6044 7.6 1316 99.9 56SELECT sum(price), c1 FROM tb1 GROUP BY c1 ORDER BY c112.322221

48、5.513113.260499.956 最 終 結(jié) 果 集 Group BySELECT sum(price) FROM tb1 GROUP BY c1ID PRICE C11 12.3 22223 1.6 1315 8.8 6047 6.3 131ID PRICE C12 4.4 6044 7.6 1316 99.9 56SELECT sum(price), c1 FROM tb1 GROUP BY c1 ORDER BY c112.3222215.513113.260499.956 SQL執(zhí)行策略總結(jié) WHERE - 基 于 SQL轉(zhuǎn) 發(fā) JOIN - 迭 代 分 布 式 索 引 ORDE

49、R BY/LIMIT - 多 次 查 詢 減 小 數(shù) 據(jù) 量 GROUP BY - 增 加 ORDER BY Cobar 事務(wù)支持前端連接 sql1sql2commit Cobar 1.2 事務(wù)支持前端連接 分庫(kù)1連接sql1sql2commit Cobar 1.2 事務(wù)支持前端連接 分庫(kù)1連接sql1commit 分庫(kù)2連接sql2 分庫(kù)3連接sql2 Cobar 事務(wù)支持前端連接 分庫(kù)1連接sql1commit 分庫(kù)2連接sql2 分庫(kù)3連接sql2 Commit有先后:隔離性問(wèn)題 Commit有失敗:一致性問(wèn)題 大綱n 中間件引入n Cobar策略n 水 平 拆 分 的 數(shù) 據(jù) 分 布n

50、 幾 種 SQL元 素 的 執(zhí) 行 策 略n 事 務(wù) 策 略n 系統(tǒng)實(shí)現(xiàn)n 實(shí)施應(yīng)用 schema tableSpace dataNodedata sourcecndb pc2主 備 主 備default offer0 主 備offer1 主 備detail0 主 備defaultdefault offer detail detail 邏輯層次 接口同MySQLjdbc:mysql:/cobarIp:8066/cndb?user=foo ps.setLong(1, 12345);ResultSet rs = ps.executeQuery();MySQLServer Application1M

51、ySQLJDBCDriver JDBC和Server的通信協(xié)議MySQLServer Application1MySQLJDBCDriver PreparedStatement ps = conn.prepareStatement( select * from tb1 where id=?); ps.setLong(1, 12345);ResultSet rs = ps.executeQuery();select * from tb1where id=?stmt_id/param_num/columm_numparameter_type column_type JDBC和Server的通信協(xié)議

52、PreparedStatement ps = conn.prepareStatement( select * from tb1 where id=?); ps.setLong(1, 12345);ResultSet rs = ps.executeQuery();MySQLServer Application1MySQLJDBCDriver JDBC和Server的通信協(xié)議PreparedStatement ps = conn.prepareStatement( select * from tb1 where id=?); ps.setLong(1, 12345);ResultSet rs =

53、ps.executeQuery();MySQLServer Application1MySQLJDBCDriverstmt_id param+field_countcolumn_typecolumn_val+column_val+ JDBC和Server的通信協(xié)議Statement stmt = conn.createStatement();ResultSet rs = stmt.executeQuery( “select * from tb1 where id=12345”); Application1MySQLJDBCDriversqlfield_countcolumn_typecolum

54、n_val+column_val+MySQLServer JDBC和Server的通信協(xié)議Statement stmt = conn.createStatement();ResultSet rs = stmt.executeQuery( “select * from tb1 where id=12345”); Application1MySQLJDBCDriversqlfield_countcolumn_typecolumn_val+column_val+MySQLServerCobarServer Processor(1) Processor(n) MySQL MySQL MySQL Cob

55、ar結(jié)構(gòu) Front-end Communication MySQL Protcol Adaptor (BIO) Application1 MySQL MySQL Protocol MySQL MySQLData NodesMonitorConfigure HA PoolMySQLMySQLSQL ExecutorSQL Router SQL Parser ResultMerger SQL ExecutorSQL RouterSQL Parser ResultMerger. Manager MySQL Protocol MySQL Protocol MySQL Protocol MySQL P

56、rotocolManagement ProtocolSQL +ParametersResultSetMetaDataResultSet(Rows) Cobar 通信層 統(tǒng)一管理NIO的Buffer 4KBByteBuffer 4KBByteBuffer 4KBByteBuffer 4KBByteBuffer4KB ByteBuffer 4KBByteBuffer 4KBByteBuffer 4KBByteBuffer4KBByteBuffer 4KBByteBuffer4KBByteBuffer 4KBByteBuffer4KBByteBuffer 4KBByteBuffer4KBByteBu

57、ffer 4KBByteBuffer 4KBByteBuffer4KBByteBuffer4KBByteBuffer4KBByteBuffer共 16MBBuffer Pool Cobar 通信層 統(tǒng)一管理NIO的Buffer 4KBByteBuffer 4KBByteBuffer 4KBByteBuffer 4KBByteBuffer4KB ByteBuffer 4KBByteBuffer 4KBByteBuffer 4KBByteBuffer4KBByteBuffer4KBByteBuffer 4KBByteBuffer 4KBByteBuffer4KBByteBuffer4KBByteB

58、uffer 4KBByteBuffer 4KBByteBuffer 4KBByteBuffer4KBByteBuffer4KBByteBuffer4KBByteBuffer共 16MBBuffer Poolselect * from tb1 where id=? Cobar 通信層 統(tǒng)一管理NIO的Buffer 4KBByteBuffer 4KBByteBuffer 4KBByteBuffer 4KBByteBuffer4KB ByteBuffer4KBByteBuffer 4KBByteBuffer 4KBByteBuffer4KBByteBuffer 4KBByteBuffer4KBByt

59、eBuffer 4KBByteBuffer4KBByteBuffer 4KBByteBuffer4KBByteBuffer 4KBByteBuffer 4KBByteBuffer4KBByteBuffer4KBByteBuffer4KBByteBuffer 共 16MB Buffer Poolselect * from tb1 where id=? Cobar 通信層 統(tǒng) 一 管 理 NIO的 Buffer 4KBByteBuffer 4KBByteBuffer 4KBByteBuffer 4KBByteBuffer4KB ByteBuffer4KBByteBuffer 4KBByteBuff

60、er 4KBByteBuffer4KBByteBuffer 4KBByteBuffer4KBByteBuffer 4KBByteBuffer4KBByteBuffer 4KBByteBuffer4KBByteBuffer 4KBByteBuffer 4KBByteBuffer4KBByteBuffer4KBByteBuffer4KBByteBuffer 共 16MB Buffer Pool15萬(wàn)TPS . MySQL MySQL MySQLCobar結(jié)構(gòu) Front-end CommunicationMySQL Protcol Adaptor (BIO)Application1MySQL My

61、SQL ProtocolMySQL MySQLData NodesMonitorConfigure HA PoolMySQLMySQL Processor(1) Processor(n)SQL ExecutorSQL Router ResultMerger SQL ExecutorSQL Router ResultMergerManager MySQL Protocol MySQL Protocol MySQL Protocol MySQL ProtocolManagement Protocol SQL Parser SQL Parser SELECT id, member_id FROM w

62、p_image WHERE member_id = 123SQL Parserselect id member_id wp_image =member_id 123exprList from 架構(gòu)演變 基于JavaCC生成SQL Parser 性 能 較 差 , 優(yōu) 化 不 方 便 仿照ANTLR生成的Parser結(jié)構(gòu)手寫 基 于 LL(*)的 識(shí) 別 器 , 中 間 對(duì) 象 過(guò) 多 基于LL(2)識(shí)別器的手寫 第 一 版第 二 版第 三 版 架構(gòu)調(diào)整Lexertoken token token tokenChar ReaderExpression ParserDML Parser SQL S

63、tring LexertokenExpression ParserDML ParserSQL char第三版LL(2)第二版LL(*) cache 功能對(duì)比第一版 第二版 第三版dontNO YES YES.123e-2YES YES YES7ElevenNO YES YES_latin 0 x123NO YES YESabc defNO YES YESINSERT(Quadratic, 3, 4, What)NO YES YES TRIM(LEADING x FROM xxxbarxxx)NO YES YESUnion selectYES YES YEStable joinPART PART

64、 YES 基本元素語(yǔ)法元素 MySQL 5.5 語(yǔ)法結(jié)構(gòu)Identifier Keyword Literal Punctuation表達(dá)式Table ReferencesLimitOrderBy. Delete Update Insert Replace SelectCallSet/Show SQL語(yǔ)句Variable 基本元素 Keyword 227個(gè) 關(guān) 鍵 字 , 不 區(qū) 分 大 小 寫 Identifier schema、 table、 column、 index、 alias 、 keywordSELECT aNy FROM t1 WHERE id IN AnY (SELECT id

65、 FROM t2)select、table1 ./*spam*/id、7Up Punctuation,、:=、!、 Variable User-Def SystemVariable:version 基本元素 - Literal String LiteralNabc、_latin1abc、 abc def”abc”d”、 abcd Number Literal123、.123、123.、123.e4、.123E-4123e4 vs 123e4f Hex/Bit Literal0 x89af、x89af、0b101011、b101011_latin1 0 x89af 基本元素語(yǔ)法元素 MySQL

66、5.5 語(yǔ)法結(jié)構(gòu)Identifier Keyword Literal Punctuation表達(dá)式Table ReferencesLimitOrderBy. Delete Update Insert Replace SelectCallSet/Show SQL語(yǔ)句Variable 語(yǔ)法元素 Table Referencestable_references: table_reference , table_referencetable_reference: table_factor INNER|CROSS JOIN table_factor join_condition | STRAIGHT_JOIN table_factor ON conditional_expr | (LEFT|RIGHT) OUTER JOIN table_reference join_condition | NATURAL (LEFT|RIGHT) OUTER JOIN table_factor table_factor: tbl_name AS alias index_hint_list | table_sub

展開閱讀全文
溫馨提示:
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. 裝配圖網(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ì)自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!