mycat水平分表

2022-08-11 20:03:09 字數 2196 閱讀 4412

和垂直分庫不同,水平分表,是將那些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 根據時間拆表 當表的關係比較複雜時,無法根據某個維度進行分表。但是有明顯的時效性。想必大家都用微薄,某人發的...