MyCat分片水平拆分

news2024/10/6 5:28:07

场景

在业务系统中 , 有一张表 ( 日志表 ), 业务系统每天都会产生大量的日志数据 , 单台服务器的数据存
储及处理能力是有限的 , 可以对数据库表进行拆分。

准备

准备三台服务器,具体的结构如下:

 并且,在三台数据库服务器中分表创建一个数据库test

 

配置 

schema.xml

    <schema name="TEST" checkSQLschema="true" sqlMaxLimit="100">
   		    <table name="tb_log" dataNode="dn4,dn5,dn6" primaryKey="id" rule="mod-long" />
    </schema>
    <dataNode name="dn4" dataHost="dhost1" database="test" />
    <dataNode name="dn5" dataHost="dhost2" database="test" />
    <dataNode name="dn6" dataHost="dhost3" database="test" />
	<dataHost name="dhost1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1" slaveThreshold="100">
		<heartbeat>select user()</heartbeat>
		<writeHost host="master" url="jdbc:mysql://192.168.2.3:3306?useSSL=false&amp;serverTimezone=Asia/Shanghai&amp;characterEncoding=utf8" user="root" password="newPwd520@" />
	</dataHost>
	<dataHost name="dhost2" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1" slaveThreshold="100">
		<heartbeat>select user()</heartbeat>
		<writeHost host="master" url="jdbc:mysql://192.168.2.4:3306?useSSL=false&amp;serverTimezone=Asia/Shanghai&amp;characterEncoding=utf8" user="root" password="newPwd520@" />
	</dataHost>
	<dataHost name="dhost3" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1" slaveThreshold="100">
		<heartbeat>select user()</heartbeat>
		<writeHost host="master" url="jdbc:mysql://192.168.2.5:3306?useSSL=false&amp;serverTimezone=Asia/Shanghai&amp;characterEncoding=utf8" user="root" password="newPwd520@" />
	</dataHost>
tb_log 表最终落在 3 个节点中,分别是 dn4 dn5 dn6 ,而具体的数据分别存储在 dhost1 、 dhost2、 dhost3 test 数据库中

server.xml

配置 root 用户既可以访问 SHOPPING 逻辑库,又可以访问 TEST 逻辑库。
<user name="root" defaultAccount="true">
<property name="password">123456</property>
<property name="schemas">SHOPPING,TEST</property>
<!-- 表级 DML 权限设置 -->
<!--
<privileges check="true">
<schema name="DB01" dml="0110" >
<table name="TB_ORDER" dml="1110"></table>
</schema>
</privileges>
-->
</user>

测试

配置完毕后,重新启动 MyCat ,然后在 mycat 的命令行中,执行如下 SQL 创建表、并插入数据,查看数据分布情况。
CREATE TABLE tb_log (
id bigint(20) NOT NULL COMMENT 'ID',
model_name varchar(200) DEFAULT NULL COMMENT '模块名',
model_value varchar(200) DEFAULT NULL COMMENT '模块值',
return_value varchar(200) DEFAULT NULL COMMENT '返回值',
return_class varchar(200) DEFAULT NULL COMMENT '返回值类型',
operate_user varchar(20) DEFAULT NULL COMMENT '操作用户',
operate_time varchar(20) DEFAULT NULL COMMENT '操作时间',
param_and_value varchar(500) DEFAULT NULL COMMENT '请求参数名及参数值',
operate_class varchar(200) DEFAULT NULL COMMENT '操作类',
operate_method varchar(200) DEFAULT NULL COMMENT '操作方法',
cost_time bigint(20) DEFAULT NULL COMMENT '执行方法耗时, 单位 ms',
source int(1) DEFAULT NULL COMMENT '来源 : 1 PC , 2 Android , 3 IOS',
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO TB_LOG (id, model_name, model_value, return_value, return_class,
operate_user, operate_time, param_and_value, operate_class, operate_method,
cost_time,source)
VALUES('1','user','insert','success','java.lang.String','10001','2022-01-06
18:12:28','{\"age\":\"20\",\"name\":\"Tom\",\"gender\":\"1\"}','cn.itcast.contro
ller.UserController','insert','10',1);
INSERT INTO TB_LOG (id, model_name, model_value, return_value, return_class,
operate_user, operate_time, param_and_value, operate_class, operate_method,
cost_time,source)
VALUES('2','user','insert','success','java.lang.String','10001','2022-01-06
18:12:27','{\"age\":\"20\",\"name\":\"Tom\",\"gender\":\"1\"}','cn.itcast.contro
ller.UserController','insert','23',1);
INSERT INTO TB_LOG (id, model_name, model_value, return_value, return_class,
operate_user, operate_time, param_and_value, operate_class, operate_method,
cost_time,source)
VALUES('3','user','update','success','java.lang.String','10001','2022-01-06
18:16:45','{\"age\":\"20\",\"name\":\"Tom\",\"gender\":\"1\"}','cn.itcast.contro
ller.UserController','update','34',1);
INSERT INTO TB_LOG (id, model_name, model_value, return_value, return_class,
operate_user, operate_time, param_and_value, operate_class, operate_method,
cost_time,source)
VALUES('4','user','update','success','java.lang.String','10001','2022-01-06
18:16:45','{\"age\":\"20\",\"name\":\"Tom\",\"gender\":\"1\"}','cn.itcast.contro
ller.UserController','update','13',2);
INSERT INTO TB_LOG (id, model_name, model_value, return_value, return_class,
operate_user, operate_time, param_and_value, operate_class, operate_method,
cost_time,source)
VALUES('5','user','insert','success','java.lang.String','10001','2022-01-06
18:30:31','{\"age\":\"200\",\"name\":\"TomCat\",\"gender\":\"0\"}','cn.itcast.co
ntroller.UserController','insert','29',3);
INSERT INTO TB_LOG (id, model_name, model_value, return_value, return_class,
operate_user, operate_time, param_and_value, operate_class, operate_method,
cost_time,source)
VALUES('6','user','find','success','java.lang.String','10001','2022-01-06
18:30:31','{\"age\":\"200\",\"name\":\"TomCat\",\"gender\":\"0\"}','cn.itcast.co
ntroller.UserController','find','29',2);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1093238.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

启山智软/JAVA商城

一、项目介绍 启山网上商城采用目前流行的JAVA spring cloud架构开发&#xff0c;前端使用的是目前最流行的TypeScript、VUE3、uniapp、element-plus、pinia技术&#xff0c;后端采用的是JAVA、SpringBoot、spring cloud技术&#xff0c;数据库采用的是MSQ&#xff0c;采用前后…

C语言----程序环境

目录 前言: 1.翻译环境 1.1预编译(预处理) 1.2编译 1.3汇编 1.4链接 2.运行环境 前言: 我们在用vs或一些其他的编译器写代码的时候,当我们运行代码的时候,很自然而然的就出结果了,但是它究竟是如何是如何实现的呢?因为这部分的内容是涉及到"编译原理"的,所以本章…

读书笔记——C++高性能编程(六)

第六章.并发和性能 阿姆达尔定律 介绍了阿姆达尔定律&#xff08;Amdahls Law&#xff09;&#xff0c;这个定律的意义是“系统中对某一部件采用更快执行方式所能获得的系统性能改进程度&#xff0c;取决于这种执行方式被使用的频率”。具体的公式如下&#xff1a; 其中s0是程…

基于CodeFormer使用C++实现图片模糊变清晰,去除马赛克等效果

前言 CodeFormer是一种基于AI技术深度学习的人脸复原模型&#xff0c;由南洋理工大学和商汤科技联合研究中心联合开发。该模型通过结合了VQGAN和Transformer等技术&#xff0c;可以通过提供模糊或马赛克图像来生成清晰的原始图像。可以实现老照片修复、照片马赛克修复、黑白照…

深入浅出ThreadPoolExecutor(一)

文章目录 线程池简诉ThreadPoolExecutor详解ThreadPoolExecutor参数详解创建线程池的工具类Executors 线程池简诉 针对各种池子,比如 连接池:用于管理和重复使用数据库连接&#xff0c;避免频繁创建和销毁数据库连接带来的性能开销。对象池&#xff1a;用于管理和重复使用对象…

中国雪深长时间序列数据集(1979-2020)

简介 中国雪深长时间序列数据集&#xff08;1979-2020&#xff09;提供1979年1月1日到2020年12月31日逐日的中国范围的积雪厚度分布数据&#xff0c;其空间分辨率为25km&#xff0c;是“中国雪深长时间序列数据集&#xff08;1978-2012&#xff09;”的升级版本。前言 – 人工…

5.Python-使用XMLHttpRequest对象来发送Ajax请求

题记 使用XMLHttpRequest对象来发送Ajax请求&#xff0c;以下是一个简单的实例和操作过程。 安装flask模块 pip install flask 安装mysql.connector模块 pip install mysql-connector-python 编写app.py文件 app.py文件如下&#xff1a; from flask import Flask, reque…

Docker逃逸---授权 SYS_ADMIN Capability逃逸原理浅析

目录 一、产生原因 二、利用条件 三、复现过程 1、容器内挂载宿主机cgroup 2、设置notify_no_release并寻找容器在宿主机上的存储路径 3、将恶意脚本写入release_agent 一、产生原因 给容器额外授权了SYS_ADMIN Cap&#xff0c;并且容器以root权限运行&#xff0c;攻击者…

HUAWEI(26)——防火墙双机热备

一、拓扑 二、需求 PC2 ping PC1 FW1与FW2双机热备,FW1为active,FW2为Standby,抢占延时1s VRRP 三、配置 1.IP地址,防火墙接口加入区域 防火墙用户名:admin 防火墙旧密码:Admin@123 防火墙新密码:admin@123 [FW1]interface GigabitEthernet 1/0/0 [FW1-GigabitEthe…

【计算机毕业设计】python在线课程培训学习考试系统637r7-PyCharm项目

使用说明 使用Navicat或者其它工具&#xff0c;在mysql中创建对应名称的数据库&#xff0c;并导入项目的sql文件&#xff1b; 使用PyCharm 导入项目&#xff0c;修改配置&#xff0c;运行项目&#xff1b; 将项目中config.ini配置文件中的数据库配置改为自己的配置&#xff0c;…

CSS 滚动驱动动画 animation-range

animation-range 语法 normallength-percentagetimeline-range-name 具名时间线范围 named timeline rangecovercontainentry 和 entry-crossingexit 和 exit-crossing 兼容性 animation-range 这个属性可同时对 scroll progress timeline 和 view progress timeline 这两种不…

机器学习笔记 - 使用3D卷积神经网络进行视频分类

1、导入相应的库 3D CNN 使用三维滤波器来执行卷积。内核能够在三个方向上滑动,而在 2D CNN 中它可以在二维上滑动。 首先安装并导入必要的库,用于处理ZIP文件内容的Remotezip 、用于使用进度条的tqdm 、用于处理视频文件的OpenCV 、用于执行更复杂的张量操作的einop…

计算机的总线

文章目录 前言一、总线的概述1.总线的概述&#xff08;是什么、什么用&#xff09;2.总线的分类2.1 片内总线2.2 系统总线2.2.1 数据总线2.2.2 地址总线2.2.3 控制总线 二、总线的仲裁1.为什么需要总线仲裁2.总线仲裁的方法2.1 链式查询2.2 计时器定时查询2.3 独立请求 总结 前…

激发创意,打造震撼视觉效果——Adobe After Effects 2024(Ae2024)全新来袭!

想要创造独特的、令人惊叹的视觉效果吗&#xff1f;不要犹豫&#xff0c;现在就升级到全新的Adobe After Effects 2024&#xff08;Ae2024&#xff09;&#xff01;作为业界领先的动态图形和视觉效果软件&#xff0c;Ae2024将为您的创作带来前所未有的火花。 Ae2024拥有强大的…

Android 音频可视化

Android音频可视化&#xff0c;指的是将音频的频率绘制到屏幕上&#xff0c;达到一种视觉效果&#xff0c;使播放或录制过程更加生动形象。 在Android进行视频可视化涉及的三个主要知识点,其中比较难以理解的傅里叶变换公式。 Android原生的Visualizer使用&#xff08;获取频…

someip 入门

什么是someip&#xff1f; SomeIP&#xff08;Scalable Service-Oriented MiddlewarE over IP&#xff09;是一种基于以太网的通信协议&#xff0c;用于汽车领域的通信。它允许不同的汽车电子控制单元&#xff08;ECUs&#xff09;之间通过网络进行通信&#xff0c;以便在车辆内…

网站的搭建与应用|企业APP软件定制开发|小程序

网站的搭建与应用|企业APP软件定制开发|小程序 网站是一种数字化媒体&#xff0c;它可以将我们的信息传递给全球的用户&#xff0c;让更多的人了解我们、了解我们的产品和服务。那么&#xff0c;如何搭建一个网站呢&#xff1f;下面&#xff0c;我将为大家介绍一下网站的建设步…

JavaScript 通过数组对JSON key字段进行排序

这里我以vue为例 不过json排序用的js方式 任何前端项目都可以通过js完成 我们组件代码现在是这样的 <template><div><div v-for "item in navCateList" :key "item.id">{{ item.name }}</div></div> </template>&…

【电源专题】电源芯片手册中的NVDC(narrow voltage DC)功能和电池充电曲线详解

在查看一些充电芯片的规格书时,会发现有一个NVDC功能。其中NVDC的全称是narrow voltage DC ,直译过来是窄电压DC电源架构。此外在规格书里还会发现NVDC Power Path Management字样,也就浊NVDC电源路径管理。 那么什么是NVDC电源路径管理? 如下所示当VIN有输入时(如适配器U…

【LeetCode】剑指 Offer Ⅱ 第7章:队列(6道题) -- Java Version

题库链接&#xff1a;https://leetcode.cn/problem-list/e8X3pBZi/ 类型题目解决方案滑动窗口剑指 Offer II 041. 滑动窗口的平均值队列&#xff1a;滑动窗口 ⭐剑指 Offer II 042. 最近请求次数队列&#xff1a;滑动窗口 ⭐二叉树宽搜剑指 Offer II 043. 在完全二叉树中添加节…