Mycat是數據庫中間件,就是介於數據庫與應用之間,進行數據處理與交互的中間服務。node
Mycat中的一些概念:sql
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100"></schema>
在上面配置中,TESTDB其實就是一個邏輯庫的概念。數據庫
分佈式數據庫中,對應用來講,讀寫數據的表就是邏輯表。邏輯表,能夠是數據切分後,分佈在一個或多個分片庫中,也能夠不作數據切分,不分片,只有一個表構成。併發
2. 分片表分佈式
分片表,是指那些原有的很大數據的表,須要切分到多個數據庫的表,這樣,每一個分片都有一部分數據,所 有分片構成了完整的數據。 大數據
例如在 mycat 配置中的 t_node 就屬於分片表,數據按照規則被分到 dn1,dn2 兩個分片節點(dataNode) 上。spa
<table name="t_node" primaryKey="vid" autoIncrement="true" dataNode="dn1,dn2" rule="rule1" />
3. 非分片表code
一個數據庫中並非全部的表都很大,某些表是能夠不用進行切分的,非分片是相對分片表來講的,就是那 些不須要進行數據切分的表。中間件
以下配置中 t_node,只存在於分片節點(dataNode)dn1 上。blog
<table name="t_node" primaryKey="vid" autoIncrement="true" dataNode="dn1" />
4. 全局表
一個真實的業務系統中,每每存在大量的相似字典表的表,這些表基本上不多變更,字典表具備如下幾個特性:
1)變更不頻繁
2)數據量整體變化不大
3)數據規模不大,不多有超過數十萬條記錄。
對於這類的表,在分片的狀況下,當業務表由於規模而進行分片之後,業務表與這些附屬的字典表之間的關聯,就成了比較棘手的問題,因此 Mycat 中經過數據冗餘來解決這類表的 join,即全部的分片都有一份數據的拷 貝,全部將字典表或者符合字典表特性的一些表定義爲全局表。數據冗餘是解決跨分片數據 join 的一種很好的思路,也是數據切分規劃的另一條重要規則。
數據切分後,一個大表被分到不一樣的分片數據庫上面,每一個表分片所在的數據庫就是分片節點 (dataNode)。
數據切分後,每一個分片節點(dataNode)不必定都會獨佔一臺機器,同一機器上面能夠有多個分片數據庫, 這樣一個或多個分片節點(dataNode)所在的機器就是節點主機(dataHost),爲了規避單節點主機併發數限 制,儘可能將讀寫壓力高的分片節點(dataNode)均衡的放在不一樣的節點主機(dataHost)。
前面講了數據切分,一個大表被分紅若干個分片表,就須要必定的規則,這樣按照某種業務規則把數據分到 某個分片的規則就是分片規則,數據切分選擇合適的分片規則很是重要,將極大的避免後續數據處理的難度。
數據切分後,原有的關係數據庫中的主鍵約束在分佈式條件下將沒法使用,所以須要引入外部機制保證數據 惟一性標識,這種保證全局性的數據惟一標識的機制就是全局序列號(sequence)。