一、按照月分片 使用場景為按照自然月來分片,每個自然月為一個分片,但是一年有12個月,是不是要有12個數據節點才行呢?並不是。例如我現在只有三個分片資料庫,這樣就可以1月在第一個數據分片中,2月在第二個數據分片中,3月在第三個數據分片中,當來到4月的時候,就會重新開始分片,4月在第一個數據分片,5月 ...
一、按照月分片
使用場景為按照自然月來分片,每個自然月為一個分片,但是一年有12個月,是不是要有12個數據節點才行呢?並不是。例如我現在只有三個分片資料庫,這樣就可以1月在第一個數據分片中,2月在第二個數據分片中,3月在第三個數據分片中,當來到4月的時候,就會重新開始分片,4月在第一個數據分片,5月在第二個數據分片,6月在第三個數據分片,以此類推。
說明1:從開始時間開始,一個月為一個分片,到達結束時間之後,會重覆開始分片插入
說明2:配置表的dataNode的分片,必須和分片規則數量一致,例如:2023-01-01到2023-12-31,一共就需要12個數據節點
說明3:我只有三個數據節點,所以配置表中,我只需要配置2023-01-01到2023-03-31即可,即使一年又12個月會可以重覆插入的。
二、準備工作
使用之前已經創建tb_logs資料庫
三、rule.xml配置
說明1:分片規則:"sharding-by-month"
說明2:分庫分表欄位為create_time
說明3:dateFormat為時間格式
說明4:sBeginDate是配置的起始日期
說明5:sEndDate是配置的結束日期
說明6:有幾台數據節點,就只需要配置幾個月的範圍即可,即開始日期到結束日期的月份要等於數據節點的數。
四、配置schem.xml
說明1:邏輯庫為hl_logs
說明2:邏輯表為tb_month
說明3:分片規則為:"sharding-by-month"
說明4:dn4對應的是dbhost1即192.168.3.90分片
說明5:dn5對應的是dbhost2即192.168.3.91分片
說明6:dn6對應的是dbhost3即192.168.3.92分片
五、配置server.xml
說明1:在之前的文章中已經將tb_logs表添加到root用戶的許可權中了,所以這裡不需要更改即可。
六、按(月)日期分片測試
首先重啟Mycat
登錄Mycat
查看邏輯庫和邏輯表
這裡的tb_month只是邏輯庫,而在MySQL中還並沒有tb_month這個表,需要在Mycat中創建
create table tb_month(id int auto_increment primary key, name varchar(20), create_time varchar(19));
插入一組測試數據
insert into tb_month(name, create_time) values ("張三", "2023-01-02"); insert into tb_month(name, create_time) values ("李四", "2023-02-12"); insert into tb_month(name, create_time) values ("王五", "2023-03-22"); insert into tb_month(name, create_time) values ("趙六", "2023-04-18"); insert into tb_month(name, create_time) values ("侯七", "2024-05-01"); insert into tb_month(name, create_time) values ("孫八", "2024-06-11"); insert into tb_month(name, create_time) values ("周九", "2024-07-21");
說明1:一共三個數據節點,其中1月,4月,7月,10月的數據會分佈在192.168.3.90第一個數據節點上,OK
說明2:一共三個數據節點,其中2月,5月,8月,11月的數據會分佈在192.168.3.91第二個數據節點上,OK
說明3:一共三個數據節點,其中3月,6月,9月,12月的數據會分佈在192.168.3.92第三個數據節點上,OK
說明4:在Mycat上進行查詢的數據是,所有數據節點的全集。按(月)日期分片是水平分庫分表的一種方式。
侯哥語錄:我曾經是一個職業教育者,現在是一個自由開發者。我希望我的分享可以和更多人一起進步。分享一段我喜歡的話給大家:"我所理解的自由不是想乾什麼就乾什麼,而是想不幹什麼就不幹什麼。當你還沒有能力說不得時候,就努力讓自己變得強大,擁有說不得權利。"