码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • MySQL运维7-Mycat分库分表之取模分片


    合集 - mysql(39)
    1.侯哥的Python分享2019-04-162.MySQL基础1-关系型数据库与非关系型数据库2022-03-173.MySQL基础2-数据库及表的操作2022-03-174.MySQL基础3-数据库增删改操作2022-03-175.MySQL基础4-数据查询2023-07-176.MySQL基础5-用户及权限管理2023-07-187.MySQL基础6-常用数据库函数2023-07-188.MySQL基础7-约束2023-07-209.MySQL基础8-多表查询2023-07-2110.MySQL基础9-事务基础2023-08-3111.MySQL高级1-存储引擎2023-07-2412.MySQL高级2-SQL性能分析2023-07-2713.MySQL高级3-索引的结构和分类2023-07-2714.MySQL高级4-索引的使用规则2023-07-2815.MySQL高级5-SQL优化2023-07-3116.MySQL高级6-视图2023-07-3117.MySQL高级7-存储过程2023-08-1418.MySQL高级8-触发器2023-08-1719.MySQL高级9-锁2023-09-0420.MySQL高级10-InnoDB引擎存储架构2023-09-1921.MySQL高级11-后台进程2023-09-2022.MySQL高级12-事务原理 2023-09-2023.MySQL高级13-MySQL管理工具2023-09-2124.MySQL运维1-日志2023-09-2525.MySQL运维2-主从复制2023-09-2726.MySQL运维3-分库分表策略2023-12-1227.MySQL运维4-Mycat入门2023-12-1428.MySQL运维5-Mycat配置2023-12-1429.MySQL运维6-Mycat分库分表之垂直分库2023-12-17
    30.MySQL运维7-Mycat分库分表之取模分片2023-12-18
    31.MySQL运维8-Mycat分库分表之范围分片2023-12-1832.MySQL运维9-Mycat分库分表之枚举分片2023-12-1833.MySQL运维10-Mycat分库分表之一致性哈希分片2023-12-1934.MySQL运维11-Mycat分库分表之应用指定分片2023-12-1935.MySQL运维12-Mycat分库分表之按天分片2023-12-2036.MySQL运维13-Mycat分库分表之按月分片2023-12-2037.MySQL运维14-管理及监控工具Mycat-web的安装配置2023-12-2138.MySQL运维15-一主一从读写分离2023-12-2539.MySQL运维16-双主双从读写分离2023-12-25
    收起

    阅读目录

    • 一、取模分片
    • 二、准备工作
    • 三、配置schema.xml 
    • 四、配置server.xml
    • 五、取模分片测试

    一、取模分片

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

      

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

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

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

    二、准备工作

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

      

    三、配置schema.xml 

      

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

      说明2:逻辑库为hl_logs

      说明3:逻辑表为tb_logs

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

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

      

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

      

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

      

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

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

    四、配置server.xml

      

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

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

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

    五、取模分片测试

      首先重启Mycat

      

      登录Mycat

      

      查看逻辑库和逻辑表

      

      这里的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));

      

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

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

      

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

      

      说明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');

      

      说明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');

      

      说明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');

      

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

      

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

     

  • 相关阅读:
    Qt+STK项目配置
    MySQL性能调优
    [附源码]计算机毕业设计springboot餐馆点餐管理系统
    访问学者美国访学必须知道十大注意事项
    golang实现远程控制主机
    MyBatis基于配置文件实现对数据库的增删改查
    css实现日出日落效果
    【SpringCloud-学习笔记】DockerCompose
    牛!playwright 一行命令一键把html网页保存为pdf,太方便了!
    Java中线程是如何实现的
  • 原文地址:https://www.cnblogs.com/Se7eN-HOU/p/17909974.html
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号