1. 程式人生 > >Mycat配置MySql的讀寫分離

Mycat配置MySql的讀寫分離

我們知道MySql的儲存引擎有兩種:InnoDB和MyISAM,其中MyISAM是MySql的預設儲存引擎,其實平時不會有太多人關心這個東西,但是對於實際的業務,儲存引擎的合理選擇是會對效能影響很大的因素。
以下是這兩種引擎適合的場景:
• MyISAM管理非事務表。它提供高速儲存和檢索,以及全文搜尋能力。如 果應用中需要執行大量的SELECT查詢,那麼MyISAM是更好的選擇。
• InnoDB用於事務處理應用程式,具有眾多特性,包括ACID事務支援。如 果應用中需要執行大量的INSERT或UPDATE操作,則應該使用InnoDB, 這樣可以提高多使用者併發操作的效能。
這樣的話,就會有一個問題:如果我的業務中同時需要執行大量的查詢和插入語句,該怎麼選擇呢?魚和熊掌就真的沒法兼得嗎?No,是可以兼得的。那麼就不得不提出MyCat這個東西了。
總的來說,可以通過MyCat來實現這樣的效果:
首先,需要一個MySql的主從配置,假設主:master,從:slave,在兩個節點裡分別建立同一個資料庫db1,並在master的db1裡建立一個InnoDB表,在slave裡建立一個同樣的MyISAM表,然後通過Mycat的讀寫分離配置,可以使插入或者更新操作都去Master裡的InnoDB表執行,查詢操作都去slave裡的MyISAM表執行。如此一來,豈不是兼得了兩個儲存引擎的優勢嗎?
MyCat的讀寫分離配置很簡單,只需在配置檔案schema.xml裡的writeHost內新增一個readHost,並將balance改為3,如圖:
這裡寫圖片描述


這裡的node6是上面所說的MySql的slave節點,node1是master節點。
我們使用DataFactory來向node1的table1插入1000000條資料(node6的table1會自動同步),然後分別在mycat、node1、node6裡做如下查詢:
mycat
mycat
node1
node1
node6
node6
通過以上三圖中的執行時間的比較,明顯的可以發現mycat所做的事情 :將查詢請求轉發到MyISAM引擎表,可以看到MyISAM的查詢效率(時間)相比InnoDB是數量級的提升。
而下圖是沒有做讀寫分離的MyCat的配置檔案和執行效率:
這裡寫圖片描述
這裡寫圖片描述
可以發現此時的執行效率與在node1裡執行的效率在一個數量級
以上就是MyCat配置MySql的讀寫分離的效果