和垂直分庫不同,水平分表,是將那些io頻繁,且資料量大的表進行水平切分。
基本的配置和垂直分庫一樣,我們需要改的就是我們的
schema.xml和rule.xml檔案配置(server.xml不用做任何修改)
除此之外,我們還需要在兩個分片資料庫伺服器上建立分片用的資料庫10.0.4.181上建立(orderdb01,orderdb02),10.0.4.183上建立(orderdb03,orderdb04)
現在我們對配置檔案進行配置。
其中schema.xml這樣配置。
<?xml version="1.0"?>
select user()
select user()
rule.xml這樣配置
idmod-long
4配置好後,進行mycat的重啟。
mycat restart
登入mycat
插入資料。
mysql> insert into order_list(id,order_name,order_type) values(1,'order01',1);
query ok, 1 row affected (0.00 sec)
mysql> insert into order_list(id,order_name,order_type) values(2,'order01',1);
query ok, 1 row affected (0.00 sec)
mysql> insert into order_list(id,order_name,order_type) values(3,'order01',1);
query ok, 1 row affected (0.00 sec)
mysql> insert into order_list(id,order_name,order_type) values(4,'order01',1);
query ok, 1 row affected (0.01 sec)
mysql> insert into order_list(id,order_name,order_type) values(5,'order01',1);
query ok, 1 row affected (0.00 sec)
mysql> insert into order_list(id,order_name,order_type) values(6,'order01',1);
query ok, 1 row affected (0.01 sec)
mysql> insert into order_list(id,order_name,order_type) values(7,'order01',1);
query ok, 1 row affected (0.00 sec)
mysql> insert into order_list(id,order_name,order_type) values(8,'order01',1);
query ok, 1 row affected (0.01 sec)
mysql> insert into order_list(id,order_name,order_type) values(9,'order01',1);
query ok, 1 row affected (0.01 sec)
mysql> insert into order_list(id,order_name,order_type) values(10,'order01',1);
query ok, 1 row affected (0.00 sec)
我們可以看到,我們在mycat上插入的資料,最終通過對id的取模演算法,分別插入到了orderdb01,orderdb02,orderdb03,orderdb04
通過以上結果,我們可以看到,資料被平均的分配到了4各資料庫中。
但是,做到這裡還不算完,並不能用於生產環境,因為還有很多問題,比如全域性自增主鍵的問題和聯合查詢的問題。上面我的例項之所以分配的很平均是因為,我在插入的時候規定了主鍵值。所以後端的四個資料庫中的全部資料中沒有主鍵重複的,
如果我不規定主鍵,則order_list中可能出現四個id為1的記錄,或四個id為2的記錄。
mycat 水平分表
相對於垂直拆分的區別是 垂直拆分是把不同的表拆到不同的資料庫中,而水平拆分是把同乙個表拆到不同的資料庫中。水平拆分不是將表的資料做分類,而是按照某個欄位的某種規則來分散到多個庫之中,每個表中包含一部分資料。例如,分庫中的舉例,orders表水平分到order win和order linux兩個庫中。...
Mycat水平分片策略(水平分表拆分)
可以實現按照地區進行分表 根據不同的列舉 常量 進行分表儲存 1.mysql中建立3個資料庫分別為user db1 user db2 user db3 2.在3個資料庫中建立3個一樣的資料表 order info order info表中有字段name 3.配置mycat環境 schema.xml ...
Mysql水平分表
mysql水平分表 mysql在資料量大的情況下,會遇到水平分表的情況。1 條件中含有分表的資訊 比如說要劃分10個表,那對10進行取模。其實也可以是任意雜湊函式,但是要注意注意衝突處理。2 根據時間拆表 當表的關係比較複雜時,無法根據某個維度進行分表。但是有明顯的時效性。想必大家都用微薄,某人發的...