首先我們來看下什么是Mycat:
MyCat:開源分布式數據庫中間件, 這里定義的很簡單, 就是分布式數據庫的中間件.
其實Mycat 是可以時mysql進行集群的中間件, 我們可以對mysql來分庫分表 來應對日益增長的數據量. 每台機器只存少量數據, 數據總和是分布式的機器上數據量總和.
例如我們一個表中有512條數據(當然實際情況可能有成千上萬條數據), 那么現在我們有三台機器裝有mysql數據庫, 我們想將這些數據按照一定規則的存儲在三台機器上, 那么我們設定規則:
表的id%/512 取的結果按照區間分別存儲在三個不同的數據庫中, 但是這三個數據庫又要統一的對外提供服務.
那么這些分割算法 以及 統一對外提供服務是誰來提供支持的呢? 當然就是我們今天要講的Mycat了.
在Linux下連接Mysql:
連接Linux中的mysql數據庫:(這里我們的Linux IP為192.168.200.140)
查看表結構:
查看1庫中的商品ID(這個已經是通過Mycatt分好的)
查看1庫中的商品ID(這個已經是通過Mycatt分好的)
查看1庫中的商品ID(這個已經是通過Mycatt分好的)
啟動Mycat
連接Mycat:
在項目組中設置默認連接為Mycat:(關於這里數據庫為什么是babasport而不是babasport1或babasport2等, 后面會說明)
Mycat的配置:
1, 用戶名及密碼設置:server.xml:
2, 邏輯庫中的定義表:schema.xml:
這里需要說一下, 因為bbs_color和bbs_brand表中的數據很少, 所以這里不需要分庫分表, 直接設置成全局表就行, 也就是這兩個表中的數據在1,2,3 庫中都是一樣的.
還有就是childTable, 我們拿bbs_product和bbs_sku來說, 因為商品product和庫存bbs_sku是一對多的關系, 那么我們就希望商品id為1 的商品所對應的庫存都是在同一個庫中的, 這樣查詢的話就不用跨庫了.
同樣這里還有一個屬性是rule="sharding-by-pattern", 那么接下來我們就要看下這里設定的規則了.
因為上面的schema標簽中有定義的那么為babasport, 而且dataNode節點又分別指向dn1, dn2, dn3, 所以這里就可以做到對應了.
我們在項目連接的時候 直接是連接babasport的.
3, 查看分片規則: rule.xml
這里指定算法為sharding-by-pattern.
查看算法sharding-by-pattern, 這里指定算法存儲在partition-pattern.txt
這里是通過PartitionByPattern這個類來實現的, 這里是對512進行取模, 如果取模過程中出現異常, 那么就放到3庫(0,1,2)中進行存儲.
查看算法指定文件:
這里就可以一目了然的查看到 0-127 是放在1庫中, 128-255 是放在2庫中, 256-512 是放在3庫中.
同樣Mycat還支持動態擴容, 當我們的數據量越來越大時我們還可以加機器來分擔壓力, Mycat可以動態的取擴容. 這里就不再講具體的實現原理了.
關於Mycat的內容就說到這里, 更深層次的東西大家可以繼續查閱相關資料, 我這里只是做一個介紹和入門.