MySQL分散式中介軟體:MyCAT
隨著傳統的資料庫技術日趨成熟、計算機網路技術的飛速發展和應用範圍的擴充,資料庫應用已經普遍建立於計算機網路之上。這時集中式資料庫系統表現出它的不足:
- 集中式處理,勢必造成效能瓶頸;
- 應用程式集中在一臺計算機上執行,一旦該計算機發生故障,則整個系統受到影響,可靠性不高;
- 集中式處理引起系統的規模和配置都不夠靈活,系統的可擴充性差。
在這種形勢下,集中式資料庫將向分散式資料庫發展。
MyCAT的誕生,要從其前身Amoeba和Cobar說起。Amoeba(變形蟲)專案,該開源框架於2008年開始釋出一款 Amoeba for Mysql軟體。這個軟體致力於MySQL的分散式資料庫前端代理層,它主要在應用層訪問MySQL的時候充當SQL路由功能,專注於分散式資料庫代理層(Database Proxy)開發。座落與 Client、DB Server(s)之間,對客戶端透明。具有負載均衡、高可用性、SQL過濾、讀寫分離、可路由相關的到目標資料庫、可併發請求多臺資料庫合併結果。 通過Amoeba你能夠完成多資料來源的高可用、負載均衡、資料切片的功能,目前Amoeba已在很多企業的生產線上面使用。
阿里巴巴於2012年6月19日,正式對外開源的資料庫中介軟體Cobar,前身是早已經開源的Amoeba,不過其作者陳思儒離職去盛大之後,阿里巴巴內部考慮到Amoeba的穩定性、效能和功能支援,以及其他因素,重新設立了一個專案組並且更換名稱為Cobar。Cobar是由Alibaba開源的MySQL分散式處理中介軟體,它可以在分散式的環境下看上去像傳統資料庫一樣提供海量資料服務。
Cobar自誕生之日起, 就受到廣大程式設計師的追捧,但是自2013年後,幾乎沒有後續更新。在此情況下,MyCAT應運而生,它基於阿里開源的Cobar產品而研發,Cobar的穩定性、可靠性、優秀的架構和效能,以及眾多成熟的使用案例使得MyCAT一開始就擁有一個很好的起點,站在巨人的肩膀上,MyCAT能看到更遠。目前MyCAT的最新發布版本為1.2版本。
什麼是MyCat?
簡單的說,MyCAT就是:
- 一個新穎的資料庫中介軟體產品;
- 一個徹底開源的、面向企業應用開發的“大資料庫叢集”;
- 支援事務、ACID、可以替代MySQL的加強版資料庫;
- 一個可以視為“MySQL”叢集的企業級資料庫,用來替代昂貴的Oracle叢集;
- 一個融合記憶體快取技術、Nosql技術、HDFS大資料的新型SQL Server;
- 結合傳統資料庫和新型分散式資料倉庫的新一代企業級資料庫產品。
MyCAT的目標是:低成本的將現有的單機資料庫和應用平滑遷移到“雲”端,解決資料儲存和業務規模迅速增長情況下的資料瓶頸問題。
MyCat的關鍵特性
- 支援SQL 92標準;
- 支援MySQL叢集,可以作為Proxy使用;
- 支援JDBC連線ORACLE、DB2、SQL Server,將其模擬為MySQL Server使用;
- 支援galera for mysql叢集,percona-cluster或者mariadb cluster,提供高可用性資料分片叢集;
- 自動故障切換,高可用性;
- 支援讀寫分離,支援MySQL雙主多從,以及一主多從的模式;
- 支援全域性表,資料自動分片到多個節點,用於高效表關聯查詢;
- 支援獨有的基於E-R 關係的分片策略,實現了高效的表關聯查詢;
- 多平臺支援,部署和實施簡單。
MyCat的優勢
- 基於阿里開源的Cobar產品而研發,Cobar的穩定性、可靠性、優秀的架構和效能,以及眾多成熟的使用案例使得MyCAT一開始就擁有一個很好的起點,站在巨人的肩膀上,能看到更遠。
- 廣泛吸取業界優秀的開源專案和創新思路,將其融入到MyCAT的基因中,使得MyCAT在很多方面都領先於目前其他一些同類的開源專案,甚至超越某些商業產品。
- MyCAT背後有一隻強大的技術團隊,其參與者都是5年以上資深軟體工程師、架構師、DBA等,優秀的技術團隊保證了MyCAT的產品質量。
- MyCAT並不依託於任何一個商業公司,因此不像某些開源專案,將一些重要的特性封閉在其商業產品中,使得開源專案成了一個擺設。
長期規劃
在支援Mysql的基礎上,後端增加更多的開源資料庫和商業資料庫的支援,包括原生支援PosteSQL、FireBird等開源資料庫,以及通過JDBC等方式間接支援其他非開源的資料庫如Oracle、DB2、SQL Server等實現更為智慧的自我調節特性,如自動統計分析SQL,自動建立和調整索引,根據資料表的讀寫頻率,自動優化快取和備份策略等實現更全面的監控管理功能與HDFS整合,提供SQL命令,將資料庫裝入HDFS中並能夠快速分析整合優秀的開源報表工具,使之具備一定的資料分析的能力。
總體架構
MyCAT的架構如下圖所示:
MyCAT使用MySQL的通訊協議模擬成一個MySQL伺服器,並建立了完整的Schema(資料庫)、Table (資料表)、User(使用者)的邏輯模型,並將這套邏輯模型對映到後端的儲存節點DataNode(MySQL Instance)上的真實物理庫中,這樣一來,所有能使用MySQL的客戶端以及程式語言都能將MyCAT當成是MySQLServer來使用,不必開發新的客戶端協議。
當MyCAT收到一個客戶端傳送的SQL請求時,會先對SQL進行語法分析和檢查,分析的結果用於SQL路由,SQL路由策略支援傳統的基於表格的分片欄位方式進行分片,也支援獨有的基於資料庫E-R關係的分片策略,對於路由到多個數據節點(DataNode)的SQL,則會對收到的資料集進行“歸併”然後輸出到客戶端。
SQL執行的過程,簡單的說,就是把SQL通過網路協議傳送給後端的真正的資料庫上進行執行,對於MySQL Server來說,是通過MySQL網路協議傳送報文,並解析返回的結果,若SQL不涉及到多個分片節點,則直接返回結果,寫入客戶端的SOCKET流中,這個過程是非阻塞模式(NIO)。
DataNode是MyCAT的邏輯資料節點,對映到後端的某一個物理資料庫的一個Database,為了做到系統高可用,每個DataNode可以配置多個引用地址(DataSource),當主DataSource被檢測為不可用時,系統會自動切換到下一個可用的DataSource上,這裡的DataSource即可認為是Mysql的主從伺服器的地址。
邏輯庫
與任何一個傳統的關係型資料庫一樣,MyCAT也提供了“資料庫”的定義,並有使用者授權的功能,下面是MyCAT邏輯庫相關的一些概念:
- schema:邏輯庫,與MySQL中的Database(資料庫)對應,一個邏輯庫中定義了所包括的Table。
- table:表,即物理資料庫中儲存的某一張表,與傳統資料庫不同,這裡的表格需要宣告其所儲存的邏輯資料節點DataNode,這是通過表格的分片規則定義來實現的,table可以定義其所屬的“子表(childTable)”,子表的分片依賴於與“父表”的具體分片地址,簡單的說,就是屬於父表裡某一條記錄A的子表的所有記錄都與A儲存在同一個分片上。
- 分片規則:是一個欄位與函式的捆繫結義,根據這個欄位的取值來返回所在儲存的分片(DataNode)的序號,每個表格可以定義一個分片規則,分片規則可以靈活擴充套件,預設提供了基於數字的分片規則,字串的分片規則等。
- dataNode: MyCAT的邏輯資料節點,是存放table的具體物理節點,也稱之為分片節點,通過DataSource來關聯到後端某個具體資料庫上,一般來說,為了高可用性,每個DataNode都設定兩個DataSource,一主一從,當主節點宕機,系統自動切換到從節點。
- dataHost:定義某個物理庫的訪問地址,用於捆綁到dataNode上。
MyCAT目前通過配置檔案的方式來定義邏輯庫和相關配置:
- MYCAT_HOME/conf/schema.xml中定義邏輯庫,表、分片節點等內容;
- MYCAT_HOME/conf/rule.xml中定義分片規則;
- MYCAT_HOME/conf/server.xml中定義使用者以及系統相關變數,如埠等。
下圖給出了MyCAT 一個可能的邏輯庫到物理庫(MySQL的完整對映關係),可以看出其強大的分片能力以及靈活的Mysql叢集整合能力。
基本使用教程
1.垂直切分
1.1 垂直切分定義
資料的垂直切分,也可以稱為縱向切分。將資料庫想象成由很多個一大塊一大塊的“資料塊”(表)組成,垂直地將這些“資料塊”切開,然後把它們分散到多臺資料庫主機上面。這樣的切分方法就是垂直(縱向)的資料切分。
一個架構設計較好的應用系統,其總體功能肯定是由很多個功能模組所組成的,而每一個功能模組所需要的資料對應到資料庫中就是一個或多個表。而在架構設計中,各個功能模組相互之間的互動點越統一、越少,系統的耦合度就越低,系統各個模組的維護性及擴充套件性也就越好。這樣的系統,實現資料的垂直切分也就越容易。
1.2 優缺點
垂直切分優點:
- 資料庫的拆分簡單明瞭,拆分規則明確;
- 應用程式模組清晰明確,整合容易;
- 資料維護方便易行,容易定位。
垂直切分缺點:
- 部分表關聯無法在資料庫級別完成,要在程式中完成;
- 對於訪問極其頻繁且資料量超大的表仍然存在效能瓶頸,不一定能滿足要求;
- 事務處理相對複雜;
- 切分達到一定程度之後,擴充套件性會受到限制;
- 過度切分可能會帶來系統過於複雜而難以維護。
1.3 垂直切分實現
在如下的例項中,需要編輯MYCAT_HOME/conf/schema.xml檔案,修改dataHost和schema對應的連線資訊,weixin、yixin和photo垂直切分後的配置如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM"schema.dtd"> <mycat:schema xmlns:mycat="http://org.opencloudb/"> <schema name="weixin"checkSQLschema="false"sqlMaxLimit="100"dataNode="weixin"/> <schema name="yixin"checkSQLschema="false"sqlMaxLimit="100"dataNode="yixin"/> <schema name="photo"checkSQLschema="false"sqlMaxLimit="100"dataNode="photo"/> <dataNode name="weixin"dataHost="testhost"database="weixin"/> <dataNode name="yixin"dataHost="testhost"database="yixin"/> <dataNode name="photo"dataHost="testhost"database="photo"/> <dataHost name="testhost"maxCon="1000"minCon="10"balance="0" writeType="0"dbType="mysql"dbDriver="native"> <heartbeat>select user()</heartbeat> <!--can have multi write hosts--> <writeHost host="hostM1"url="localhost:3306"user="root"password=""/> <writeHost host="hostM2"url="10.18.96.133:3306"user="test"password="test"/> </dataHost> </mycat:schema> |
注意:writeHost/readHost中的location,user,password的值需要根據實際的MySQL的連線資訊進行修改。
檢視conf/server.xml檔案,該檔案是Mycat伺服器引數調整和使用者授權的配置檔案,預設的MyCat的資料庫連線的使用者名稱/密碼為test/test,檔案內容參考如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <?xml version="1.0"encoding="UTF-8"?> <!----Licensed under the Apache License,Version2.0(the"License"); -you may notusethisfile except incompliance with the License.-You may obtainacopy of the License at--http://www.apache.org/licenses/LICENSE-2.0 --Unless required by applicable law oragreed toinwriting,software- distributed under the License isdistributed on an"AS IS"BASIS,-WITHOUT WARRANTIES ORCONDITIONS OF ANY KIND,either express orimplied.-See the License forthe specific language governing permissions and-limitations under the License.--> <!DOCTYPE mycat:server SYSTEM"server.dtd"> <mycat:server xmlns:mycat="http://org.opencloudb/"> <system> <propertyname="sequnceHandlerType">0</property> </system> <user name="test"> <propertyname="password">test</property> <propertyname="schemas">weixin,yixin,photo</property> </user> </mycat:server> |
上述檔案中的schemas屬性需要配置對應的schema(在schema.xml)中進行配置。重啟MyCAT,使用MySQL客戶端連線MyCAT,需要注意的是,預設資料埠為8066,管理埠為9066,在MySQL客戶端連線MyCAT時,注意填寫埠為8066,使用者名稱/密碼根據server.xml中的配置進行填寫。連線後可檢視後端連線的三個資料庫。
2.水平分庫
2.1 水平切分定義
水平切分所指的是通過一系列的切分規則將資料水平分佈到不同的DB或table中,在通過相應的DB路由 或者table路由規則找到需要查詢的具體的DB或者table以進行Query操作,比如根據使用者ID將使用者表切分到多臺資料庫上。將某個訪問極其頻繁的表再按照某個欄位的某種規則來分散到多個表之中,每個表中包含一部分資料。例如,所有資料都是和使用者關聯的,那麼我們就可以根據使用者來進行水平拆分,將不同使用者的資料切分到不同的資料庫中。
現在網際網路非常火爆的web 2.0型別的網站,基本上大部分資料都能夠通過會員使用者資訊關聯上,可能很多核心表都非常適合通過會員ID來進行資料的水平切分。而像論壇社群討論系統,就更容易切分了,非常容易按照論壇編號來進行資料的水平切分。切分之後基本上不會出現各個庫之間的互動。
2.2 優缺點
水平切分的優點:
- 表關聯基本能夠在資料庫端全部完成;
- 不會存在某些超大型資料量和高負載的表遇到瓶頸的問題;
- 應用程式端整體架構改動相對較少;
- 事務處理相對簡單;
- 只要切分規則能夠定義好,基本上較難遇到擴充套件性限制。
水平切分的缺點:
- 切分規則相對更為複雜,很難抽象出一個能夠滿足整個資料庫的切分規則;
- 後期資料的維護難度有所增加,人為手工定位資料更困難;
應用系統各模組耦合度較高,可能會對後面資料的遷移拆分造成一定的困難。
2.3 水平切分實現
在一般的應用系統中,使用者表及其密切相關的關聯表,可根據“使用者表”(eg:t_user)中的“使用者ID”(user_id)進行水平切分,並基於MyCAT的E-R關係分片策略將其密切相關的表(eg:t_user_class_rel)也分到對應的庫中。
1)建立表結構
在user0~user2建立同樣的表結構,t_user和t_user_class_rel的建表語句參考如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | DROP TABLE IFEXISTS`t_user_ext`; CREATE TABLE`t_user_ext`( `user_id`int(11)NOTNULLCOMMENT'使用者ID', `receive_address`varchar(256)COLLATE utf8_unicode_ci DEFAULTNULLCOMMENT'收貨地址', `create_time`datetime NOTNULL, `province_code`varchar(10)COLLATE utf8_unicode_ci DEFAULTNULL, PRIMARY KEY(`user_id`) )ENGINE=InnoDB DEFAULTCHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='使用者資訊表'; DROP TABLE IFEXISTS`t_user_class_rel`; CREATE TABLE`t_user_class_rel`( `id`int(11)NOTNULLAUTO_INCREMENT COMMENT'id', `caller`varchar(16)CHARACTER SET utf8 NOTNULLCOMMENT'呼叫方系統表示', `province_code`varchar(10)CHARACTER SET utf8 DEFAULTNULLCOMMENT'省份編碼', `user_id`int(11)NOTNULLCOMMENT'使用者ID', `class_id`int(11)NOTNULLCOMMENT'班級ID', `role_type`int(11)DEFAULTNULLCOMMENT'使用者在該班的角色(1學生2家長3教師)', `create_time`datetime NOTNULLCOMMENT'建立時間', `modify_time`datetime DEFAULTNULLCOMMENT'修改時間', PRIMARY KEY(`id`), UNIQUE KEY`idx_rel_user_class_id`(`user_id`,`class_id`,`role_type`), KEY`idx_rel_user_id`(`user_id`)USING BTREE, KEY`idx_rel_class_id`(`class_id`) )ENGINE=InnoDB DEFAULTCHARSET=utf8 COLLATE=utf8_unicode_ci; |
2)配置schema.xml檔案
首先配置schema.xml檔案,新增user0~user3資料庫的dataNode設定,並新增t_user和t_user_class_rel表的schema設定,修改後的schema.xml檔案內容如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | <?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM"schema.dtd"> <mycat:schema xmlns:mycat="http://org.opencloudb/"> <schema name="test_mycat"checkSQLschema="false"sqlMaxLimit="100"> <!--auto sharding by id(long)--> <table name="t_user"dataNode="user0,user1,user2,user3"rule="rule1"> <childTable name="t_user_class_rel"primaryKey="id"joinKey="user_id"parentKey="user_id"/> </table> </schema> <schema name="weixin"checkSQLschema="false"sqlMaxLimit="100"dataNode="weixin"/> <schema name="yixin"checkSQLschema="false"sqlMaxLimit="100"dataNode="yixin"/> <schema name="photo"checkSQLschema="false"sqlMaxLimit="100"dataNode="photo"/> <dataNode name="weixin"dataHost="testhost"database="weixin"/> <dataNode name="yixin"dataHost="testhost"database="yixin"/> <dataNode name="photo"dataHost="testhost"database="photo"/> <dataNode name="user0"dataHost="testhost"database="user0"/> <dataNode name="user1"dataHost="testhost"database="user1"/> <dataNode name="user2"dataHost="testhost"database="user2"/> <dataNode name="user3"dataHost="testhost"database="user3"/> <dataHost name="testhost"maxCon="1000"minCon="10"balance="0" writeType="0"dbType="mysql"dbDriver="native"> <heartbeat>select user()</heartbeat> <!--can have multi write hosts--> <writeHost host="hostM1"url="localhost:3306"user="root"password=""/> <writeHost host="hostM2"url="10.18.96.133:3306"user="test"password="test"/> </dataHost> </mycat:schema> |
3)配置rule.xml檔案
在schema.xml的檔案內容中可看到t_user表指定的分片規則是rule1,需要在conf/rule.xml檔案中設定rule1的規則為根據user_id進行分片,並按照類“org.opencloudb.route.function.PartitionByLong”的規則進行分片,即將user_id模除1024後每256內分到一個數據庫中,即模除後0~255到user0資料庫庫,256~511到user1資料庫,512~767到user2資料庫,768~1023到user3資料庫。該檔案的參考內容如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?xml
version="1.0"encoding="UTF-8"?>
<!DOCTYPE
mycat:rule
SYSTEM"rule.dtd">
<mycat:rule
xmlns:mycat="http://org.opencloudb/">
<tableRule
name="rule1">
<rule>
<columns>user_id</columns>
<algorithm>func1</algorithm>
</rule>
</tableRule>
<functionname="func1"class=
相關推薦MySQL分散式中介軟體:MyCAT隨著傳統的資料庫技術日趨成熟、計算機網路技術的飛速發展和應用範圍的擴充,資料庫應用已經普遍建立於計算機網路之上。這時集中式資料庫系統表現出它的不足: 集中式處理,勢必造成效能瓶頸;應用程式集中在一臺計算機上執行,一旦該計算機發生故障,則整個系統受到影響,可靠性不高;集中式處 DBLE核心研發主講:MySQL分散式中介軟體公開課開課啦開發十年,就只剩下這套架構體系了! >>> 資料庫中介軟體MyCat(二)-mysql實現主從複製前言: 我們考慮到一些大型的資料庫資料庫讀寫分離對於大型系統或者訪問量很高的網際網路應用來說,是必不可少的一個重要功能。從資料庫的角度來說,對於大多數應用來說,從集中到分佈,最基本的一個需求不是資料儲存的瓶頸,而是在於計算的 MySQL 中介軟體 Mycat 安裝與使用環境 Windows (mycat) Linux 虛擬機器(主庫) Linux 虛擬機器(從褲)下載Windows 使用1. 解壓Windows包2. 配置 分散式資料庫中介軟體 MyCat 搞起來!關於 MyCat 的鋪墊文章已經寫了三篇了: MySQL 只能做小專案?鬆哥要說幾句公道話! 北冥有 Data,其名為鯤,鯤之大,一個 MySQL 放不下! What?Tomcat 竟然也算中介軟體? 今天終於可以迎接我們的大 Boss 出場了! MyCat 簡介 前面文章我們提到,如果資料量比較大的話 分散式資料庫中介軟體 MyCat | 分庫分表實踐### MyCat 簡介 `MyCat` 是一個功能強大的分散式資料庫中介軟體,是一個實現了 `MySQL` 協議的 `Server`,前端人員可以把它看做是一個數據庫代理中介軟體,用 `MySQL` 客戶端工具和命令列訪問;而後端人員可以用 `MySQL` 原生協議與多個 `MySQL` 伺服器通訊,也可 資料庫路由中介軟體MyCat - 使用篇(3)上篇此文已由作者張鎬薪授權網易雲社群釋出。 歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。 全域性序列號 資料切分後,原有的關係資料庫中的主鍵約束在分散式條件下將無法使用,因此需要引入外部機制保證資料唯一性標識,這種保證全域性性的資料唯一標識的機制就是全域性序列號(sequence)。 1. 本地檔案方式 c 資料庫路由中介軟體MyCat - 使用篇(3)下篇此文已由作者張鎬薪授權網易雲社群釋出。 歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。 2. 配置conf/server.xml server.xml幾乎儲存了所有mycat需要的系統配置資訊。其在程式碼內直接的對映類為SystemConfig類。 參考完整配置: <?xml versi 資料庫路由中介軟體MyCat - 使用篇(6)此文已由作者張鎬薪授權網易雲社群釋出。 歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。 配置MyCat 4. 配置schema.xml schema.xml裡面管理著MyCat的邏輯庫、表,每張表使用的分片規則、分佈在哪個DataNode以及DataSource上。 之前的例子: ```xml< 資料庫路由中介軟體MyCat - 原始碼篇(2)此文已由作者張鎬薪授權網易雲社群釋出。 歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。 2. 前端連線建立與認證 Title:MySql連線建立以及認證過程client->MySql:1.TCP連線請求 MySql->client:2.接受TCP連線client->MySq 資料庫路由中介軟體MyCat - 原始碼篇(3)此文已由作者張鎬薪授權網易雲社群釋出。 歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。 2. 前端連線建立與認證 Title:MySql連線建立以及認證過程client->MySql:1.TCP連線請求 MySql->client:2.接受TCP連線client->MySql 資料庫路由中介軟體MyCat - 原始碼篇(8)此文已由作者張鎬薪授權網易雲社群釋出。 歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。 3. 連線模組 3.5 後端連線 對於後端連線,我們只關心MySQL的。 從後端連線工廠開始MySQLConnectionFactory.java: public MySQLConnection 資料庫路由中介軟體MyCat - 原始碼篇(7)此文已由作者張鎬薪授權網易雲社群釋出。 歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。 3. 連線模組 3.4 FrontendConnection前端連線 構造方法: public FrontendConnection(NetworkChannel channel) th 資料庫路由中介軟體MyCat - 原始碼篇(10)此文已由作者張鎬薪授權網易雲社群釋出。 歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。 3. 連線模組 3.5 後端連線 3.5.2 後端連接獲取與維護管理 還是那之前的流程, st=>start: MyCat接受客戶端連線併為之建立唯一繫結的Session e=>end:  資料庫路由中介軟體MyCat - 原始碼篇(11)此文已由作者張鎬薪授權網易雲社群釋出。 歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。 4.配置模組 每個MyCatServer初始化時,會初始化: MyCatServer.java: public static final String NAME =&n 資料庫路由中介軟體MyCat - 原始碼篇(14)此文已由作者張鎬薪授權網易雲社群釋出。 歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。 對於表的dataNode對應關係,有個特殊配置即類似dataNode="distributed(dn$1-10)",這個含義是: /** * d 資料庫路由中介軟體MyCat - 原始碼篇(16)此文已由作者張鎬薪授權網易雲社群釋出。 歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。 5. 路由模組 真正取得RouteResultset的步驟:AbstractRouteStrategy的route方法:對應原始碼: public RouteResultset route(Syst 資料庫路由中介軟體MyCat - 原始碼篇(17)此文已由作者張鎬薪授權網易雲社群釋出。 歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。 呼叫processInsert(sc,schema,sqlType,origSQL,tableName,primaryKey): public static boolean proce 開源資料庫中介軟體- MyCat 學習筆記1、簡介 MyCat 曾是阿里開源產品Cobar,Cobar核心功能和優勢是 MySQL 資料庫分片。Mycat 是基於 cobar 演變而來,對 cobar 的程式碼進行了徹底的重構,使用 NIO 重構了網路模組,並且優化了 Buffer 資料庫路由中介軟體MyCat - 原始碼篇(5)此文已由作者張鎬薪授權網易雲社群釋出。 歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。 3. 連線模組 如之前所述,MyCat的連線分為前端和後端,下面是連線基本相關類圖: 3.1 ClosableConnection: public interface Closa |