版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、MyCat技術(shù)分享原理、實(shí)現(xiàn)和應(yīng)用2014.10.31肖雄1.Mycat解決什么?2.Mycat架構(gòu)3.Mycat應(yīng)用Mycat解決什么?OracleMySQL MSSQLDB2 性能 容量 高可用.如果我有一個(gè)32核心的服務(wù)器,我就可以實(shí)現(xiàn)1個(gè)億的數(shù)據(jù)分片,我有32核心的服務(wù)器么?沒有,所以我至今無法實(shí)現(xiàn)1個(gè)億的數(shù)據(jù)分片。MyCAT s Plan應(yīng)用應(yīng)用應(yīng)用應(yīng)用MyCat為什么選擇MyCat?1.支持讀寫分離,支持Mysql雙主多從,以及一主多從的模式 2.支持全局表,數(shù)據(jù)自動(dòng)分片到多個(gè)節(jié)點(diǎn),用于高效表關(guān)聯(lián)查詢 3.支持獨(dú)有的基于E-R 關(guān)系的分片策略,實(shí)現(xiàn)了高效的表關(guān)聯(lián)查詢 4.自動(dòng)故障切
2、換,高可用性 5.提供高可用性數(shù)據(jù)分片集群 6.支持JDBC連接ORACLE、DB2、SQL Server,將其模擬為 MySQL Server使用 7.支持Mysql集群,可以作為Proxy使用 8.基于阿里開源的Cobar產(chǎn)品而研發(fā),Cobar的穩(wěn)定性、可靠性、 優(yōu)秀的架構(gòu)和性能MyCat架構(gòu)MySQL CLI/JDBC/ODBC/數(shù)據(jù)庫驅(qū)動(dòng)Mycat結(jié)構(gòu)數(shù)據(jù)庫實(shí)例數(shù)據(jù)庫A數(shù)據(jù)庫B數(shù)據(jù)庫CMoreMySQL Socket Protocol HandlerSQL ParserSQL RouterSQL ExecutorDataNodesHeartBeat Checkern 中間件引入n My
3、Cat策略n 系統(tǒng)實(shí)現(xiàn)n 實(shí)施應(yīng)用MyCat應(yīng)用 性能問題 數(shù)據(jù)庫連接過多 E-R分片難處理 可用性問題 Standby切換故障 成本和伸縮性問題 依賴高成本的硬件設(shè)備Mycat引入 水平拆分MySQLMySQLMySQLMyCat應(yīng)用Member表Member表Member表 性能問題 數(shù)據(jù)庫連接過多 E-R分片難處理 可用性問題 Standby切換故障 成本和伸縮性問題 依賴高成本的硬件設(shè)備應(yīng)用MySQLMySQLMySQL應(yīng)用應(yīng)用應(yīng)用應(yīng)用應(yīng)用應(yīng)用應(yīng)用Member表Member表Member表Mycat引入 連接復(fù)用AppIDMEMBE_IDINFO1pavarotti1711pavaro
4、tti17MySQLIDMEMBE_IDINFO4test12345test1234IDMEMBE_IDINFO3abcd9abcd20abcdMySQLMySQLMycatProxyAppAppAppAppAppAppApp 性能問題 數(shù)據(jù)庫連接過多 E-R分片難處理 可用性問題 Standby切換故障 成本和伸縮性問題 依賴高成本的硬件設(shè)備MyCat引入MySQL應(yīng)用Member表Order表Product表1n1.nMySQLMember表Order表Product表1n1.nMyCat 性能問題 數(shù)據(jù)庫連接過多 E-R分片難處理 可用性問題 Standby切換故障 成本和伸縮性問題 依
5、賴高成本的硬件設(shè)備MyCat引入IDMEMBE_IDINFO1pavarotti1711pavarotti17MySQLMycatAppXMyCat引入 failoverIDMEMBE_IDINFO1pavarotti1711pavarotti17MySQL Master1MyCatAppIDMEMBE_IDINFO1pavarotti1711pavarotti17MySQL Master2XMySQLReplicationMyCat引入 failoverIDMEMBE_IDINFO1pavarotti1711pavarotti17MycatAppIDMEMBE_IDINFO1pavarott
6、i1711pavarotti17MySQLReplicationMySQL Master1MySQL Master2大綱n 中間件引入n MyCat策略n 系統(tǒng)實(shí)現(xiàn)n 實(shí)施應(yīng)用mysqlMySQLMySQLMySQLMySQLMySQLMySQLMySQLMySQLMySQLMySQLMySQLMySQL拆分?jǐn)?shù)據(jù)表水平拆分ID MEMBE_IDINFO1pavarotti173abcd4test12345test12349abcd11pavarotti1720abcd水平拆分IDMEMBE_IDINFO1pavarotti173abcd4test12345test12349abcd11pava
7、rotti1720abcd拆分字段水平拆分ID MEMBE_ID INFO1pavarotti173abcd4test12345test12349abcd11pavarotti1720abcdIDMEMBE_IDINFO1pavarotti174test12345test123411pavarotti17ID MEMBE_ID INFO3abcd9abcd20abcdf(pavarotti17)=庫1f(test1234)=庫1f(test1234)=庫1f(pavarotti17)=庫1f(abcd)=庫2f(abcd)=庫2f(abcd)=庫2庫1庫2拆分字段水平拆分ID MEMBE_ID
8、 INFO1pavarotti173abcd4test12345test12349abcd11pavarotti1720abcdIDMEMBE_IDINFO1pavarotti174test12345test123411pavarotti17ID MEMBE_ID INFO3abcd9abcd20abcdf(abcd)=庫2庫1庫2拆分字段f(pavarotti17)=庫1f(test1234)=庫1f(test1234)=庫1f(pavarotti17)=庫1f(abcd)=庫2f(abcd)=庫2路由算法路由算法pavarotti17f(pavarotti17)=庫1路由算法pavarot
9、ti17部分截取hash( ) = 3170972965401路由算法hash(pavarott) = 3170972965401 % 1024 = 5370 1023路由算法hash(pavarott) = 3170972965401 % 1024 = 5370 255 256 511 512 767 768 1023256256256256分庫1分庫2分庫3分庫4路由算法hash(pavarott) = 3170972965401 % 1024 = 5370 255 256 511 512 767 768 1023256256256256分庫1分庫2分庫3分庫4路由算法擴(kuò)容hash(pav
10、arott) = 3170972965401 % 1024 = 5370 127 128 255 256 383 384 511 512 639 640 767 768 895 896 1023128128128128128128128128分庫1分庫2分庫3分庫4路由算法擴(kuò)容hash(pavarott) = 3170972965401 % 1024 = 5370 127 128 255 256 383 384 511 512 639 640 767 768 895 896 1023128128128128128128128128分庫1分庫2分庫3分庫4分庫5分庫6分庫7分庫8原分庫1分庫2分
11、庫3分庫4原原原路由算法非均勻分布hash(pavarott) = 3170972965401 % 1024 = 5370 511 512 767 768 895 896 1023512256128128分庫1分庫2分庫3分庫4拆分表的數(shù)據(jù)訪問SQL轉(zhuǎn)發(fā)IDMEMBE_IDINFO1pavarotti174test12345test123411pavarotti17IDMEMBE_IDINFO3abcd9abcd20abcdMycatAppselect * from tb1 where member_id=test1234拆分表的數(shù)據(jù)訪問SQL轉(zhuǎn)發(fā)IDMEMBE_IDINFO1pavarott
12、i174test12345test123411pavarotti17IDMEMBE_IDINFO3abcd9abcd20abcdMycatAppselect * from tb1 where member_id=test1234IDMEMBE_IDINFO1pavarotti174test12345test123411pavarotti17IDMEMBE_IDINFO3abcd9abcd20abcdMycatAppSELECT * FROM tb1 WHERE member_id IN (test1234,pavarotti17,abcd)拆分表的數(shù)據(jù)訪問SQL轉(zhuǎn)發(fā)IDMEMBE_IDINFO
13、1pavarotti174test12345test123411pavarotti17IDMEMBE_IDINFO3abcd9abcd20abcdMycatAppselect * from tb1 where member_id in (test1234,pavarotti17)select * from tb1 where member_id in (abcd)拆分表的數(shù)據(jù)訪問SQL轉(zhuǎn)發(fā)IDMEMBE_IDINFO1pavarotti174test12345test123411pavarotti17IDMEMBE_IDINFO3abcd9abcd20abcdResultMerger前臺通信R
14、esultSet:row1row2ResultSet:row3row4row5ResultSet:row3row1row4row5row2拆分表的數(shù)據(jù)訪問結(jié)果返回MyCat的策略 基于表的水平拆分和分布根據(jù)字段值的一致性Hash分布 根據(jù)字段值的范圍分布 根據(jù)字段值的固定分布 數(shù)據(jù)查詢方式根據(jù)where中的拆分字段分發(fā) SQL語句其他元素的處理將Cobar收到的SQL語句做變換 分發(fā)到各個(gè)分庫執(zhí)行對執(zhí)行結(jié)果合并、處理 保證返回前端的內(nèi)容滿足語義JOIN有限的處理 跨庫JOIN問題SELECT * FROM tb1 INNER JOIN tb2 ON t1.MEMBER_ID=t2.NAMEID
15、MEMBE_ID2zzzz4xyzxyzIDNAME4efghijk5aaaa6abcdIDMEMBE_ID1efghijk3xxxxxx5abcdIDNAME2zzzz3xyzxyztb1tb1tb2tb2IDMEMBER_IDIDNAME1efghijk4efghijk5abcd6abcd2zzzz2zzzz4xyzxyz3xyzxyz迭代查詢SELECT * FROM tb1 INNER JOIN tb2 ON t1.MEMBER_ID=t2.NAMEIDMEMBE_ID2zzzz4xyzxyzIDNAME4efghijk5aaaa6abcdIDMEMBE_ID1efghijk3xxxx
16、xx5abcdIDNAME2zzzz3xyzxyztb1tb1tb2tb2FOR row1 IN select * FROM tb1ADD(SELECT * FROM tb2 WHERE = row1.member_id)TO RESULT跨庫索引IDMEMBE_ID2zzzz4xyzxyzIDNAME4efghijk5aaaa6abcdIDMEMBE_ID1efghijk3xxxxxx5abcdIDNAME2zzzz3xyzxyztb1tb1tb2tb2ID1ID2JOIN_COL22zzzz43xyzxyzidxID1ID2JOIN_COL14efghijk56abcdi
17、dx掃描idx,再根據(jù)每一行的id1,id2查到最終結(jié)果跨庫索引IDMEMBE_ID2zzzz4xyzxyzIDNAME4efghijk5aaaa6abcdIDMEMBE_ID1efghijk3xxxxxx5abcdIDNAME2zzzz3xyzxyztb1tb1tb2tb2SELECT * FROM tb1 INNER JOIN tb2 ON t1.MEMBER_ID=t2.NAME WHERE t1.id = 5SELECT * FROM idx WHERE id1 = 5再根據(jù)id1,id2查到最終結(jié)果跨庫索引IDMEMBE_ID2zzzz4xyzxyzIDNAME4efghijk5aa
18、aa6abcdIDMEMBE_ID1efghijk3xxxxxx5abcdIDNAME2zzzz3xyzxyztb1tb1tb2tb2ID1ID2JOIN_COL22zzzz43xyzxyzidxID1ID2JOIN_COL14efghijk56abcdidx一定以 JOIN_COL 為索引的拆分字段嗎?跨庫索引SELECT * FROM tb1 INNER JOIN tb2 ON t1.MEMBER_ID=t2.NAME WHERE t1.gmt600IDMEMBE_IDGMT2zzzz5254xyzxyz1010IDNAME4efghijk5aaaa6abcdIDMEMBE_IDGMT1e
19、fghijk12053xxxxxx1315abcd604IDNAME2zzzz3xyzxyztb1tb1tb2tb2跨庫索引IDMEMBE_IDGMT2zzzz5254xyzxyz1010IDNAME4efghijk5aaaa6abcdIDMEMBE_IDGMT1efghijk12053xxxxxx1315abcd604IDNAME2zzzz3xyzxyztb1tb1tb2tb2ID1ID2JOIN_COL22zzzz43xyzxyzidxID1ID2JOIN_COL14efghijk56abcdidxIDMEMBE_ID2zzzz4xyzxyzIDMEMBE_ID1efghijk3xxxxx
20、x5abcdtb1tb1ID1ID2JOIN_COL22zzzz43xyzxyzidxID1ID2JOIN_COL14efghijk56abcdidxSELECT idx.id2, tb1.* FROM idx INNER JOIN tb1 ON idx.id1=tb1.id WHERE t1.gmt600SELECT idx.id2, tb1.* FROM idx INNER JOIN tb1 ON idx.id1=tb1.id WHERE t1.gmt600SELECT * FROM tb1 INNER JOIN tb2 ON t1.MEMBER_ID=t2.NAME WHERE t1.g
21、mt600跨庫索引跨庫索引IDMEMBE_IDGMT2zzzz5254xyzxyz1010IDNAMETIME4efghijk1235aaaa9226abcd222IDMEMBE_IDGMT1efghijk12053xxxxxx1315abcd604IDNAMETIME2zzzz12013xyzxyz1111tb1tb1tb2tb2SELECT * FROM tb1 INNER JOIN tb2 ON t1.MEMBER_ID=t2.NAME WHERE t1.gmt600 AND t2.time600ID1ID2JOIN_COLTIME22zzzz120143xyzxyz1111idx跨庫索
22、引ID1ID2JOIN_COLTIME22zzzz120143xyzxyz1111idxID1ID2JOIN_COLTIME14efghijk12356abcd222idx 索引表的拆分WHERE條件中的字段所在表的拆分字段,作為索引拆分字段 索引包含兩張表的主鍵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分庫1
23、分庫2分庫3cobarOrder By/Limit分庫1分庫2分庫3Order By/Limit456327810651111314973返回結(jié)果返回結(jié)果返回結(jié)果8SELECT c1 FROM tb1 ORDER BY c1 LIMIT 4, 2分庫1分庫2分庫3Order By/Limit456327810651111314973返回結(jié)果返回結(jié)果返回結(jié)果80最終結(jié)果集SELECT c1 FROM tb1 ORDER BY c1 LIMIT 4, 2分庫1分庫2分庫3Order By/Limit45632781065111314973返回結(jié)果返回結(jié)果返回結(jié)果81最終結(jié)果集SELECT c1 F
24、ROM tb1 ORDER BY c1 LIMIT 4, 2分庫1分庫2分庫3Order By/Limit4563781065111314973返回結(jié)果返回結(jié)果返回結(jié)果82最終結(jié)果集SELECT c1 FROM tb1 ORDER BY c1 LIMIT 4, 2分庫1分庫2分庫3Order By/Limit456781065111314973返回結(jié)果返回結(jié)果返回結(jié)果83最終結(jié)果集SELECT c1 FROM tb1 ORDER BY c1 LIMIT 4, 2分庫1分庫2分庫3Order By/Limit45678106511131497返回結(jié)果返回結(jié)果返回結(jié)果84最終結(jié)果集SELECT c
25、1 FROM tb1 ORDER BY c1 LIMIT 4, 2最終結(jié)果集分庫1分庫2分庫3Order By/Limit5678106511131497返回結(jié)果返回結(jié)果返回結(jié)果844SELECT c1 FROM tb1 ORDER BY c1 LIMIT 4, 2最終結(jié)果集分庫1分庫2分庫3Order By/Limit4678106511131497返回結(jié)果返回結(jié)果返回結(jié)果845SELECT c1 FROM tb1 ORDER BY c1 LIMIT 4, 2Order By/Limit 方案總結(jié)select c1 from tb1 order by c1 limit 100000000,
26、2 所有分庫都要查詢100000002條數(shù)據(jù) Cobar需要遍歷100000002條數(shù)據(jù) 對如下SQL 一次交互得到結(jié)果 Offset大小有限制Order By / Limit 優(yōu)化 目標(biāo):解決 查詢量大問題 遍歷量大問題 前提 各個(gè)分庫數(shù)據(jù)分布大致一樣select c1 from tb1 order by c1 limit 9999999, 4select . order by c1 limit 33333333, 4select . order by c1 limit 33333333, 4select . order by c1 limit 33333333, 4分庫1分庫2分庫3 st
27、ep1:分成3條語句發(fā)給分庫分庫1分庫2分庫374538691076119返回結(jié)果返回結(jié)果返回結(jié)果select c1 from tb1 order by c1 limit 9999999, 4 找出查詢結(jié)果中最小和最大值分庫1分庫2分庫374538691076119返回結(jié)果返回結(jié)果返回結(jié)果 step2:以最小值和最大值為界再查詢select c1 from tb1 order by c1 limit 9999999, 43115311分庫1分庫2分庫374538691076119返回結(jié)果返回結(jié)果返回結(jié)果 step3:反查出每一個(gè)返回結(jié)果的offsetselect c1 from tb1 ord
28、er by c1 limit 9999999, 4311531133333331條33333333條33333332條分庫1分庫2分庫374538691076119返回結(jié)果返回結(jié)果返回結(jié)果 類似于原始方案select c1 from tb1 order by c1 limit 9999999, 431153119999996分庫1分庫2分庫374538691076119返回結(jié)果返回結(jié)果返回結(jié)果 類似于原始方案select c1 from tb1 order by c1 limit 9999999, 41153119999997分庫1分庫2分庫37458691076119返回結(jié)果返回結(jié)果返回結(jié)果
29、 類似于原始方案select c1 from tb1 order by c1 limit 9999999, 41153119999998分庫1分庫2分庫37458691076119返回結(jié)果返回結(jié)果返回結(jié)果 類似于原始方案select c1 from tb1 order by c1 limit 9999999, 4115119999999最終結(jié)果集最終結(jié)果集分庫1分庫2分庫37458691076119返回結(jié)果返回結(jié)果返回結(jié)果 類似于原始方案select c1 from tb1 order by c1 limit 9999999, 4115119999999最終結(jié)果集分庫1分庫2分庫374 586
30、91076119返回結(jié)果返回結(jié)果返回結(jié)果 類似于原始方案select c1 from tb1 order by c1 limit 9999999, 4115119999999最終結(jié)果集分庫1分庫2分庫374 58691076119返回結(jié)果返回結(jié)果返回結(jié)果 類似于原始方案select c1 from tb1 order by c1 limit 9999999, 4115119999999最終結(jié)果集分庫1分庫2分庫374 58691076119返回結(jié)果返回結(jié)果返回結(jié)果 類似于原始方案select c1 from tb1 order by c1 limit 9999999, 411511999999
31、9Order By / 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) t2Group BySELECT sum(price) FROM tb1 GROUP BY c1IDPRICEC1112
32、.3222231.613158.860476.3131IDPRICEC124.460447.6131699.956Group BySELECT sum(price) FROM tb1 GROUP BY c1IDPRICEC1112.3222231.613158.860476.3131IDPRICEC124.460447.6131699.956SELECT sum(price), c1 FROM tb1 GROUP BY c1 ORDER BY c112.322227.91318.860499.9567.61314.4604Group BySELECT sum(price) FROM tb1 G
33、ROUP BY c1IDPRICEC1112.3222231.613158.860476.3131IDPRICEC124.460447.6131699.956SELECT sum(price), c1 FROM tb1 GROUP BY c1 ORDER BY c112.322227.91318.86047.61314.4604最終結(jié)果集99.956Group BySELECT sum(price) FROM tb1 GROUP BY c1IDPRICEC1112.3222231.613158.860476.3131IDPRICEC124.460447.6131699.956SELECT su
34、m(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 c1IDPRICEC1112.3222231.613158.860476.3131IDPRICEC124.460447.6131699.956SELECT sum(price), c1 FROM tb1 GROUP BY c1 ORDER BY c112.3222215.51318.86044.460499.956最終結(jié)果集
35、Group BySELECT sum(price) FROM tb1 GROUP BY c1IDPRICEC1112.3222231.613158.860476.3131IDPRICEC124.460447.6131699.956SELECT sum(price), c1 FROM tb1 GROUP BY c1 ORDER BY c112.3222215.513113.260499.956最終結(jié)果集Group BySELECT sum(price) FROM tb1 GROUP BY c1IDPRICEC1112.3222231.613158.860476.3131IDPRICEC124.4
36、60447.6131699.956SELECT sum(price), c1 FROM tb1 GROUP BY c1 ORDER BY c112.3222215.513113.260499.956SQL執(zhí)行策略總結(jié) WHERE - 基于SQL轉(zhuǎn)發(fā) JOIN - 迭代 分布式索引 ORDER BY/LIMIT - 多次查詢減小數(shù)據(jù)量 GROUP BY - 增加ORDER BYMyCat 事務(wù)支持前端連接sql1sql2commitMyCat 事務(wù)支持前端連接分庫1連接sql1sql2commit MyCat 事務(wù)支持前端連接分庫1連接sql1commit分庫2連接sql2分庫3連接sql2My
37、Cat 事務(wù)支持前端連接分庫1連接sql1commit分庫2連接sql2分庫3連接sql2 Commit有先后:隔離性問題 Commit有失?。阂恢滦詥栴}大綱n 中間件引入n MyCat策略n 水平拆分的數(shù)據(jù)分布n 幾種SQL元素的執(zhí)行策略n 事務(wù)策略n 系統(tǒng)實(shí)現(xiàn)n 實(shí)施應(yīng)用schematableSpacedataNodedatasourcecndbpc2主備主備defaultoffer0主備offer1主備detail0主備defaultdefaultofferdetaildetail邏輯層次 接口同MySQLjdbc:mysql:/cobarIp:8066/cndb?user=foo&am
38、p;password=bar MySQLMySQLMySQLMycat結(jié)構(gòu)Front-end CommunicationMySQL Protcol Adaptor (BIO)Application1MySQLMySQL ProtocolMySQLMySQLData NodesMonitorConfigureHA PoolMySQLMySQLProcessor(1)Processor(n)SQL ExecutorSQL RouterSQL ParserResultMergerSQL ExecutorSQL RouterSQL ParserResultMerger. ManagerMySQL Pr
39、otocolMySQL Protocol MySQL Protocol MySQL ProtocolManagementProtocolMySQLMySQLMySQLCobar結(jié)構(gòu)Front-end CommunicationMySQL Protcol Adaptor (BIO)Application1MySQLMySQL ProtocolMySQLMySQLData NodesMonitorConfigureHA PoolMySQLMySQLProcessor(1)Processor(n)SQL ExecutorSQL RouterSQL ParserResultMergerSQL Exec
40、utorSQL RouterSQL ParserResultMerger. ManagerMySQL ProtocolMySQL Protocol MySQL Protocol MySQL ProtocolManagementProtocolApplication1JDBC和Server的通信協(xié)議MySQLJDBCDriverMySQLServerMySQL ProtocolJDBC和Server的通信協(xié)議PreparedStatement ps = conn.prepareStatement( select * from tb1 where id=?); ps.setLong(1, 1234
41、5);ResultSet rs = ps.executeQuery();MySQLServerApplication1MySQLJDBCDriverJDBC和Server的通信協(xié)議MySQLServerApplication1MySQLJDBCDriverPreparedStatement ps = conn.prepareStatement( select * from tb1 where id=?); ps.setLong(1, 12345);ResultSet rs = ps.executeQuery();select * from tb1where id=?stmt_id/param_
42、num/columm_numparameter_typecolumn_typeJDBC和Server的通信協(xié)議PreparedStatement ps = conn.prepareStatement( select * from tb1 where id=?); ps.setLong(1, 12345);ResultSet rs = ps.executeQuery();MySQLServerApplication1MySQLJDBCDriverJDBC和Server的通信協(xié)議PreparedStatement ps = conn.prepareStatement( select * from
43、tb1 where id=?); ps.setLong(1, 12345);ResultSet rs = ps.executeQuery();MySQLServerApplication1MySQLJDBCDriverstmt_id param+field_countcolumn_typecolumn_val+column_val+JDBC和Server的通信協(xié)議PreparedStatement ps = conn.prepareStatement( select * from tb1 where id=?); ps.setLong(1, 12345);ResultSet rs = ps.e
44、xecuteQuery();Application1MySQLJDBCDriverstmt_id param+field_countcolumn_typecolumn_val+column_val+MySQLServerJDBC和Server的通信協(xié)議Statement stmt = conn.createStatement();ResultSet rs = stmt.executeQuery( “select * from tb1 where id=12345”);Application1MySQLJDBCDriversqlfield_countcolumn_typecolumn_val+c
45、olumn_val+MySQLServerJDBC和Server的通信協(xié)議Statement stmt = conn.createStatement();ResultSet rs = stmt.executeQuery( “select * from tb1 where id=12345”);Application1MySQLJDBCDriversqlfield_countcolumn_typecolumn_val+column_val+MySQLServerCobarServerProcessor(1)Processor(n)MySQLMySQLMySQLMycat結(jié)構(gòu)Front-end C
46、ommunicationMySQL Protcol Adaptor (BIO)Application1MySQLMySQL ProtocolMySQLMySQLData NodesMonitorConfigureHA PoolMySQLMySQLSQL ExecutorSQL RouterSQL ParserResultMergerSQL ExecutorSQL RouterSQL ParserResultMerger. ManagerMySQL ProtocolMySQL Protocol MySQL Protocol MySQL ProtocolManagementProtocolSQL
47、+ParametersResultSetMetaDataResultSet(Rows). MySQLMySQLMySQLMycat結(jié)構(gòu)Front-end CommunicationMySQL Protcol Adaptor (BIO)Application1MySQLMySQL ProtocolMySQLMySQLData NodesMonitorConfigureHA PoolMySQLMySQLProcessor(1)Processor(n)SQL ExecutorSQL RouterResultMergerSQL ExecutorSQL RouterResultMergerManager
48、MySQL ProtocolMySQL Protocol MySQL Protocol MySQL ProtocolManagementProtocolSQL ParserSQL ParserSELECT id, member_id FROM wp_image WHERE member_id = 123SQL Parserselectidmember_idwp_image=member_id123exprListfromProcessor(1)Processor(n)MySQLMySQLMySQLMycat結(jié)構(gòu)Front-end CommunicationApplication1MySQLMySQL Prot
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 江西省南昌2024-2025學(xué)年八年級上學(xué)期期末考試英語試卷(含解析無聽力原文及音頻)
- 2024年高端裝備制造居間合同
- 2024新車購車簡單的協(xié)議書范本
- 2024收養(yǎng)孤殘兒童協(xié)議書范本參考3篇
- 中國青年政治學(xué)院《審計(jì)學(xué)原理及實(shí)務(wù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 浙江中醫(yī)藥大學(xué)濱江學(xué)院《酒店規(guī)劃與管理》2023-2024學(xué)年第一學(xué)期期末試卷
- 昭通衛(wèi)生職業(yè)學(xué)院《三筆字訓(xùn)練》2023-2024學(xué)年第一學(xué)期期末試卷
- 《畜禽中毒病防制》課件
- 旅游行業(yè)人力資源總結(jié)
- 2024連鎖店保密合同
- 二年級數(shù)學(xué)兩位數(shù)加兩位數(shù)計(jì)算題同步檢測訓(xùn)練題
- 2025的委托拍賣合同范本
- 彈性模量自動(dòng)生成記錄
- 老年癡呆患者安全護(hù)理
- 管理制度醫(yī)療器械質(zhì)量管理制度
- 顱腦損傷的高壓氧治療
- 公司章程模板五篇
- 2025新外研社版英語七年級下Unit 1 The secrets of happiness單詞表
- 汽車行走的藝術(shù)學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 2025屆山東省菏澤市部分重點(diǎn)學(xué)校高一上數(shù)學(xué)期末統(tǒng)考模擬試題含解析
- 醫(yī)療機(jī)構(gòu)病歷管理規(guī)定(2024 年版)
評論
0/150
提交評論