一、水平分表场景

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

  

  说明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,第二个数据节点上,成功。

MySQL运维7-Mycat水平分表的更多相关文章

  1. mycat水平分表

    和垂直分库不同,水平分表,是将那些io频繁,且数据量大的表进行水平切分. 基本的配置和垂直分库一样,我们需要改的就是我们的 schema.xml和rule.xml文件配置(server.xml不用做任 ...

  2. mycat - 水平分表

    相对于垂直拆分的区别是:垂直拆分是把不同的表拆到不同的数据库中,而水平拆分是把同一个表拆到不同的数据库中.水平拆分不是将表的数据做分类,而是按照某个字段的某种规则来分散到多个库之中,每个表中包含一部分 ...

  3. mysql使用MRG_MyISAM(MERGE)实现水平分表

    在MySQL中数据的优化尤其是大数据量的优化是一门很大的学问,当然其它数据库也是如此,即使你不是DBA,做为一名程序员掌握一些基本的优化信息,也可以让你在自己的程序开发中受益匪浅.当然数据库的优化有很 ...

  4. keeplived+mycat+mysql高可用读写分离水平分表(谁看谁都会)

    一:环境准备: 应用 主机 mysql-master 192.168.205.184 mysql-slave 192.168.205.185 mycat-01,keeplived,jdk 192.16 ...

  5. 转:三思!大规模MySQL运维陷阱之基于MyCat的伪分布式架构

    在微信公众号看到一篇关于mycat的文章,觉得分析的很不错,给大家分享一下 三思!大规模MySQL运维陷阱之基于MyCat的伪分布式架构 原文链接:https://mp.weixin.qq.com/s ...

  6. mysql运维------分库分表

    1. 介绍 问题分析: 随着互联网以及移动互联网的发展,应用系统的数据量也是成指数式增长,若采用单数据库进行数据存储,存在以下性能瓶颈: IO瓶颈:热点数据太多,数据库缓存不足,产生大量磁盘IO,效率 ...

  7. mysql中的优化, 简单的说了一下垂直分表, 水平分表(有几种模运算),读写分离.

    一.mysql中的优化 where语句的优化 1.尽量避免在 where 子句中对字段进行表达式操作select id from uinfo_jifen where jifen/60 > 100 ...

  8. mysql 水平分表技术

    这里做的是我的一个笔记. 水平分表比较简单, 理解就是: 合并的表使用的必须是MyISAM引擎 表的结构必须一致,包括索引.字段类型.引擎和字符集 数据表 user1 CREATE TABLE `us ...

  9. MySQL常见水平分表技术方案

    根据经验,Mysql表数据一般达到百万级别,查询效率会很低,容易造成表锁,甚至堆积很多连接,直接挂掉:水平分表能够很大程度较少这些压力. 1.按时间分表 这种分表方式有一定的局限性,当数据有较强的实效 ...

  10. mysql数据库的水平分表与垂直分表实例讲解

    mysql语句的优化有局限性,mysql语句的优化都是围绕着索引去优化的,那么如果mysql中的索引也解决不了海量数据查询慢的状况,那么有了水平分表与垂直分表的出现(我就是记录一下自己的理解) 水平分 ...

随机推荐

  1. Web通用漏洞--sql注入

    SQL注入 mysql注入目的:获取当前web权限 mysql注入--常规查询&union联合查询 MYSQL--Web组成架构 服务器搭建web服务可能存在多个站点搭建在一台服务器中,数据集 ...

  2. UM 百度富文本编辑器上传报错

    看下报错信息 这三张图记录了当时,上传图片 遇见的报错信息 最终解决方案 我把UM下jsp文件下的ueditor-mini.jar包拷贝到WEB_INF下的lib文件夹下,就成功了. maven的话把 ...

  3. 云原生(docker jenkins k8s)docker篇

    docker (1)架构 ● Docker_Host: ○ 安装Docker的主机 ● Docker Daemon: ○ 运行在Docker主机上的Docker后台进程 ● Client: ○ 操作D ...

  4. 文盘Rust -- tonic-Rust grpc初体验

    gRPC 是开发中常用的开源高性能远程过程调用(RPC)框架,tonic 是基于 HTTP/2 的 gRPC 实现,专注于高性能.互操作性和灵活性.该库的创建是为了对 async/await 提供一流 ...

  5. Dubbo3应用开发—XML形式的Dubbo应用开发和SpringBoot整合Dubbo开发

    Dubbo3程序的初步开发 Dubbo3升级的核心内容 易⽤性 开箱即⽤,易⽤性⾼,如 Java 版本的⾯向接⼝代理特性能实现本地透明调⽤功能丰富,基于原⽣库或轻量扩展即可实现绝⼤多数的 微服务治理能 ...

  6. 【Python爬虫】使用代理ip进行网站爬取

    使用代理IP进行网站爬取可以有效地隐藏你的真实IP地址,让网站难以追踪你的访问行为.本文将介绍Python如何使用代理IP进行网站爬取的实现,包括代理IP的获取.代理IP的验证.以及如何把代理IP应用 ...

  7. package.json指南

    一.属性 name 定义项目的名称,不能以"."和"_"开头,不能包含大写字母 version 定义项目的版本号,格式为:大版本号.次版本号.修订号 descr ...

  8. div 让a内容居中方法

    <div>标签是HTML中的一个重要标签,它代表了一个文档中的一个分割区块或一个部分.在<div>标签中,我们可以放置各种内容,包括文本.图像.链接等等.有时候,我们需要将其中 ...

  9. MySQL数据库操作 Lab1

              实验一 MySQL数据库操作 实验目的: 掌握MySQL安装.配置与登录方法,使用MySQL客户创建数据库及对数据库表完成各种操作 实验内容: 1. 安装MySQL数据库管理系统, ...

  10. KubeEdge v1.15.0发布!新增5大特性

    本文分享自华为云社区<KubeEdge v1.15.0发布!新增Windows 边缘节点支持,基于物模型的设备管理,DMI 数据面支持等功能>,作者:云容器大未来 . 北京时间2023年1 ...