mysql分库分表配置命令_mysql分库分表中间件Heisenberg
"trans_shard">
"trans_online, trans_content, trans_tb "dataNode="transDN$0-9"rule="rule1"/>
trans_shard 提供的schema,对应于server.xml中的名字
下面会有多个需要分库的表,
"trans_online"dataNode="transDN$0-9"rule="rule1"/>
这里必须要把需要分库分表的内容写出来,当然,如果不分库表也是可以的
”tbxxx"dataNode="transDN0" ruleRequired=”false”/
rule.xml
分库分表规则配置,其中columns,dbRuleList,tbRuleList里面的列名要保持大写
首先先上一个整体配置
"rule1">
TRANS_ID
#set($start=$TRANS_ID.length() - 2)##
#set($end=$TRANS_ID.length() - 1)##
$stringUtil.substring($TRANS_ID,$start,$end)
#set($start=$TRANS_ID.length() - 2)##
$stringUtil.substring($TRANS_ID,$start)
def map = [:];
for (int i=0; i<10; i++) {
def list = [];
for (int j=0; j<10; j++) {
list.add(i+""+j);
}
map.put(i,list);
};
return map;
其中dbRuleList 为分库规则
#set($start=$TRANS_ID.length() - 2)##
#set($end=$TRANS_ID.length() - 1)##
$stringUtil.substring($TRANS_ID,$start,$end)
分库规则dbRuleList可以有多个dbRule,当第一个不满足时,可以用第二个,当然这个效率不好,如果有规则区分,尽量再写一个rule,
dbRule 最后的结果是表的前缀
比如分库分表 库名为db0-db9,那么这个dbRule渲染时
取到TRANS_ID 这个为后,在脚本里计算出取倒数第2位为库后缀
比如上图的分库为
分表规则配置
#set($start=$TRANS_ID.length() - 2)##
$stringUtil.substring($TRANS_ID,$start)
这个和上面分库一样了,以倒数1,2位为库的后缀
如下图:
有个潜规则就是
需要保证全局的表名不能重复
比如db0有个trans_tb00,db1就不能有叫trans_tb00的表
表初始化
def map = [:];
for (int i=0; i<10; i++) {
def list = [];
for (int j=0; j<10; j++) {
list.add(i+""+j);
}
map.put(i,list);
};
return map;
需要初始化个表,其中key为db的下标索引,比如db0 的下标为0,
list为每个库里的表后缀名
目录是为了初始化定义这些库表
如何使用呢?
通过命令行
这里就不用讲了,wms_shard就是在server.xml里面配置的逻辑分库分表的数据源schema,应用只要访问这个就好了
show tables;也可以看到自己的一些表信息
ok.
mysql> select * from t_user_id_map;
+-----------+---------------------------+-----------+------------+---------------------+---------------------+
| F_uid | F_uname | F_enabled | F_user_id | F_create_time | F_modify_time |
+-----------+---------------------------+-----------+------------+---------------------+---------------------+
| 105001050 | @8230762802717b6a723fe9cd | 1 | 1287824017 | 2014-03-10 15:38:44 | 2014-03-10 15:38:44 |
| 62000 | | 1 | 533885000 | 2014-03-26 23:02:31 | 2014-03-26 23:02:31 |
| 86000 | | 1 | 237406000 | 2014-03-27 01:04:23 | 2014-03-27 01:04:23 |
| 96000 | | 1 | 767684000 | 2014-03-27 00:30:32 | 2014-03-27 00:30:32 |
| 130000 | | 1 | 506552000 | 2014-03-27 15:57:31 | 2014-03-27 15:57:31 |
| 149000 | | 1 | 868483000 | 2014-03-27 15:50:09 | 2014-03-27 15:50:09 |
| 179000 | | 1 | 245626000 | 2014-03-26 21:33:46 | 2014-03-26 21:33:46 |
当没有指定分库分表规则时,是进行的全表扫描,当然我们可以通过学习
mysql> explain select * from t_user_id_map;
+-----------+-----------------------------------
| DATA_NODE | SQL
+-----------+-----------------------------------
| wmsDN[0] | select * from t_user_id_map_00_0
| wmsDN[0] | select * from t_user_id_map_00_1
| wmsDN[0] | select * from t_user_id_map_00_2
| wmsDN[0] | select * from t_user_id_map_00_3
| wmsDN[0] | select * from t_user_id_map_00_4
| wmsDN[0] | select * from t_user_id_map_00_5
| wmsDN[0] | select * from t_user_id_map_00_6
| wmsDN[0] | select * from t_user_id_map_00_7
| wmsDN[0] | select * from t_user_id_map_00_8
| wmsDN[0] | select * from t_user_id_map_00_9
| wmsDN[1] | select * from t_user_id_map_01_0
| wmsDN[1] | select * from t_user_id_map_01_1
| wmsDN[1] | select * from t_user_id_map_01_2
| wmsDN[1] | select * from t_user_id_map_01_3
| wmsDN[1] | select * from t_user_id_map_01_4
| wmsDN[1] | select * from t_user_id_map_01_5
| wmsDN[1] | select * from t_user_id_map_01_6
| wmsDN[1] | select * from t_user_id_map_01_7
| wmsDN[1] | select * from t_user_id_map_01_8
| wmsDN[1] | select * from t_user_id_map_01_9
| wmsDN[2] | select * from t_user_id_map_02_0
....
这边表很多,其中dataNode是我们里面对应的结点
mysql> select * from t_user_id_map where f_uid=196606999;
+-----------+---------+-----------+-----------+---------------------+---------------------+
| F_uid | F_uname | F_enabled | F_user_id | F_create_time | F_modify_time |
+-----------+---------+-----------+-----------+---------------------+---------------------+
| 196606999 | | 1 | 749331999 | 2014-04-04 14:46:58 | 2014-04-04 14:46:58 |
+-----------+---------+-----------+-----------+---------------------+---------------------+
1 row in set (0.04 sec)
这边配置的是按F_uid最后三位分库分表的,dbRuleList配置的是倒数2,3位,
tbRuleList配置的是最后1位
我们看下是怎么路由的
mysql> explain select * from t_user_id_map where f_uid=196606999;
+-----------+---------------------------------------------------------+
| DATA_NODE | SQL |
+-----------+---------------------------------------------------------+
| wmsDN[99] | select * from t_user_id_map_99_9 where f_uid=196606999 |
+-----------+---------------------------------------------------------+
1 row in set (0.03 sec)
可以看到data_node --> wmsDN[99] ,分库位
t_user_id_map_99_9 对应的表
mysql分库分表配置命令_mysql分库分表中间件Heisenberg相关推荐
- MYSQL中如何查看表结构命令_mysql查看表结构命令
mysql查看表结构命令,如下: desc 表名; show columns from 表名; describe 表名; show create table 表名; use information_s ...
- mysql分片库分页查询_Mysql分库分表
一.数据库瓶颈 不管是IO瓶颈,还是CPU瓶颈,最终都会导致数据库的活跃连接数增加,进而逼近甚至达到数据库可承载活跃连接数的阈值.在业务Service来看就是,可用数据库连接少甚至无连接可用.接下来就 ...
- mysql清空数据库所有表的命令_mysql清空表数据命令是什么?_数据库,mysql,清空表数据...
mysql服务无法启动怎么解决_数据库 mysql服务无法启动的解决方法是:1.配置环境变量:2.在mysql安装目录下,新建my.ini文件,设置默认字符集.端口.存储引擎等:3.执行[mysqld ...
- mysql配置命令_MySQL基本配置命令总结
创建数据库 create databse 数据库名称; 显示MySQL中的数据库 show databases; 进入数据库 use 数据库名称; 显示数据库中的表 show tables; 显示表结 ...
- mysql 删除表 命令_MySQL 删除数据表
MySQL 删除数据表 MySQL中删除数据表是非常容易操作的, 但是你再进行删除表操作时要非常小心,因为执行删除命令后所有数据都会消失. 语法 以下为删除MySQL数据表的通用语法: DROP TA ...
- ShardingSphere(二) 水平分表配置搭建,实现分表写入读取
概述:本章内容分将搭建一个ShardingSphere工程环境,并实现最简单的单库下的水平分表配置演示.通过解读配置文件我们来了解ShardingSphere中是如何实现他的路由操作. 环境:Spri ...
- MYSQL二级表的管理_MySQL库和表的管理
MySQL数据库服务配置好后,系统会有4个默认的数据库. information_schema:虚拟对象,其对象都保存在内存中 performance_schema:服务器性能指标库 mysql:记录 ...
- mysql常用表名大全_MySQL常用系统表大全
MySQL5.7 默认的模式有:information_schema, 具有 61个表: m ysqL, 具有31个表: performance_schema,具有87个表; sys, 具有1个表, ...
- mysql查询和修改一个命令_MYSQL的常用命令和增删改查语句
连接命令:mysql -h[主机地址] -u[用户名] -p[用户密码] 创建数据库:create database [库名] 显示所有数据库: show databases; 打开数据库:use [ ...
最新文章
- python魔术方法call_php魔术方法__call
- 用800行代码做个行为树(Behavior Tree)的库(2
- mysql 5.7 多实例主从_mysql-5.7.20源码安装 + 多实例 + 主从复制
- jsonProperty
- 通用权限管理系统组件中简易员工档案管理模块参考
- Unity - Humanoid设置Bip骨骼导入报错
- EXCHANGE 系列
- SAP License:SAP标准教材的编号原则
- 使用GDAL获取网络数据
- HG8240电信光猫禁用TR069之修改配置法
- 计算机软考网络工程师中级多少分过,计算机软考网络工程师中级多少分过
- 微软Win11与万物互联时代新系统需求更加迫切
- 指数分布的期望和方差
- chemdraw怎么连接两个结构_用ChemDraw连接两个结构片段的教程
- 威联通nas怎么更换大硬盘_QNAP 篇一:记一次换硬盘引发的折腾
- 【Basis】狄利克雷分布
- python + Selenium 实现自动化查询问财数据及下载Excel数据并存入到mysql
- matlab批量修改图片的大小_MATLAB实现批量处理图像图片的两种方法
- js处理移动端有虚拟按键影响页面布局的处理方法
- webRTC服务器搭建(基于Janus)与Demo运行