004、Mycat分库分表之取模分片
本文最后更新于 66 天前,其中的信息可能已经过时,如有错误请发送邮件到wuxianglongblog@163.com

Mycat分库分表之取模分片

一、取模分片

  在业务系统中,有一张日志表,业务系统每天都会产生大量的日志数据,单台服务器的数据存储即处理能力是有限的,可以对数据库表进行拆分,这时候就可以使用取模分片的策略

  

img

  说明1:每个表的结构一致

  说明2:每个表的数据不同

  说明3:所有表的合集才是完整的数据

二、准备工作

  在192.168.3.90,192.168.3.91,192.168.92 三台MySQL服务器上创建hl_logs数据库

  

img

三、配置schema.xml 

  

img

  说明1:之前的schema.xml已经配置过其他的schema,dataNode等标签都不用动,直接新增我们本次案例需要的就行了,多个标签只要不冲突是可以并存的

  说明2:逻辑库为hl_logs

  说明3:逻辑表为tb_logs

  说明4:数据节点为dn4,dn5,dn6

  说明5:数据节点dn4,dn5,dn6需要的数据库配置也是dbhost1,dbhost2,dbhost3,是可以共用的。

  

img

  说明6:取模分片规则使用的是 rule="mod-long" 规则,该规则在rule.xml有定义如下

  

img

  说明7:继续看 function 中 mod-long 的定义

  

img

  说明8:这里的count 3的意思是 id主键 按照和3进行取模运算,然后根据取模后的结果,将数据写入到不同的数据节点

  说明9:我这里整好配置了三个数据节点,而这里的默认值也是3,所以不用改了,如果我们想要将数据按照取模运算写到4个数据节点上,则这里的count需要改为4

四、配置server.xml

  

img

  说明1:root 这个用户可以访问 shopping 和 hl_logs 两个数据库

  说明2:而 user 这个用户只能访问 shopping 这个数据库

  说明3:我现在测试的都是使用 root 这个账户,所以 user 这个可以不用配置

五、取模分片测试

  首先重启Mycat

  

img

  登录Mycat

  

img

  查看逻辑库和逻辑表

  

img

  这里的tb_logs只是逻辑库,而在MySQL中还并没有tb_logs这个表,需要在Mycat中创建

create table tb_logs (id int auto_increment primary key, model_name varchar(200), operate_user varchar(20), operate_time varchar(19));

  

img

  插入一条数据,然后查看数据节点中对应的数据变化

insert into tb_logs (id, model_name, operate_user, operate_time) values (1, '访问首页','张三', '2023-12-17 21:52:54');

  

img

  说明1:id=1的数据,按照mod-long的算法,会用 1%3=1, 因为 和3取模 的结果只有 0,1,2, 所以结果为0时, 数据将写在第一个数据节点,结果为1时,结果会保存在第二个数据节点,结果为2时,保存在第三个数据节点上,而 1%3=1 ,所以id=1的数据写在了192.168.3.91第二个数据节点上。

  

img

  说明2:第二个数据节点即192.168.3.91这个节点,所以id=1的数据只写入到这个数据节点上,其他节点上还没有数据。

  继续验证

insert into tb_logs (id, model_name, operate_user, operate_time) values (2, '访问详情页','李四', '2023-12-17 22:55:24');

  

img

  说明3:按照mod-long算法,id=2的数据被写入到192.168.3.92,第三个数据节点上,成功,继续验证。

insert into tb_logs (id, model_name, operate_user, operate_time) values (3, '访问评论页','王五', '2023-12-17 22:03:34');

  

img

  说明4:按照mod-long算法,id=3的数据被写入到192.168.3.90,第1个数据节点上,成功,继续验证。

insert into tb_logs (id, model_name, operate_user, operate_time) values (4, '访问首页','赵六', '2023-12-17 22:09:34');

  

img

  说明5:按照mod-long算法,id=4的数据被写入到192.168.3.91,第二个数据节点上,成功。

  

img

  说明6:在Mycat上进行查询的数据是,所有数据节点的全集。取模分片是水平分库分表的一种方式。

谨此笔记,记录过往。凭君阅览,如能收益,莫大奢望。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇