Mycat分庫分表的初次學習

年後回來到現在已經有一個多星期了,這段時間也不忙,除了時不時查看一下kisp的運行狀態也沒啥事。時間當然不能浪費啊,想到入庫功能可能會涉及到數據量太大單表放不下,於是乎來學習一個分表分庫的知識。

查了一下資料,目前的相關產品還挺多,像什麼Atlas、Tddl、mysql-proxy、oneproxy、cobar等等,具體各自什麼優點,請百度一下,記性不好,一個東西你能記住它若干個優點就好了。公司有產品在用oneproxy,聽說是要錢的,拜拜。還看到噹噹也出了一個開源的叫sharding-jdbc,不過貌似資料不多。想起豐少說過Mycat,目前也是比較強大的,分片算法多,後續支持長久。

官方文檔說,程序員可以這麼理解:Mycat就是一個近似等於MySQL的數據庫服務器,你可以用連接MySQL的方式去連接Mycat(除了端口丌同,默認的Mycat端口是8066而非MySQL的3306,因此需要在連接字符串上增加端口信息),大多數情況下,可以用你熟悉的對象映射框架使用Mycat,但建議對於分片表,儘量使用基礎的SQL語句,因爲這樣能達到最佳性能,特別是幾千萬甚至幾百億條記錄的情況下。(用基礎的SQL語句這個很必要,我在demo中就體現出來用orm有些慢,jdbc是最快的)。

最開始下了發佈版和源碼,官方推薦把源碼中eclipse中調試,這樣可以更清楚來龍去脈,但是一直不知道怎麼和項目結合起來。最後發現,其實就是把數據源的url換成<property name="hibernate.connection.url">jdbc:mysql://localhost:8066/TESTDB</property>。

首先弄清一些概念。

邏輯庫 schmea:與數據庫database同概念、邏輯表table:在這裏定義拆分、datanode:就是分片、使用數據庫實例的某個物理庫db1、

datahost:定義具體的數據庫實例,讀寫分離、心跳等。

想法挺簡單,就想用它來做寫入的分庫分表。測試了兩種方式,一種是單表的分、一種是ER(子表的存儲位置依賴於主表,在物理上緊鄰存放,因此徹底解決了JION的效率)

另外也可以多看看mycat github上的issue,有時候可能因爲版本不同修改了的東西沒有同步,我就遇到了看了好久的源碼就會發現問題已經被解決了,只是我這個版本是老的..

詳情請下載:

[zip文件] 用hibernate連接mycat的例子

Mycat-Server-master 源碼、可直接在eclipse中調試

mycat權威指南


這幾天的學習只能算是入了個門,mycat的功能很多,有待更進一步研究。如果有遇到什麼問題請留言



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章