"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相关推荐

  1. MYSQL中如何查看表结构命令_mysql查看表结构命令

    mysql查看表结构命令,如下: desc 表名; show columns from 表名; describe 表名; show create table 表名; use information_s ...

  2. mysql分片库分页查询_Mysql分库分表

    一.数据库瓶颈 不管是IO瓶颈,还是CPU瓶颈,最终都会导致数据库的活跃连接数增加,进而逼近甚至达到数据库可承载活跃连接数的阈值.在业务Service来看就是,可用数据库连接少甚至无连接可用.接下来就 ...

  3. mysql清空数据库所有表的命令_mysql清空表数据命令是什么?_数据库,mysql,清空表数据...

    mysql服务无法启动怎么解决_数据库 mysql服务无法启动的解决方法是:1.配置环境变量:2.在mysql安装目录下,新建my.ini文件,设置默认字符集.端口.存储引擎等:3.执行[mysqld ...

  4. mysql配置命令_MySQL基本配置命令总结

    创建数据库 create databse 数据库名称; 显示MySQL中的数据库 show databases; 进入数据库 use 数据库名称; 显示数据库中的表 show tables; 显示表结 ...

  5. mysql 删除表 命令_MySQL 删除数据表

    MySQL 删除数据表 MySQL中删除数据表是非常容易操作的, 但是你再进行删除表操作时要非常小心,因为执行删除命令后所有数据都会消失. 语法 以下为删除MySQL数据表的通用语法: DROP TA ...

  6. ShardingSphere(二) 水平分表配置搭建,实现分表写入读取

    概述:本章内容分将搭建一个ShardingSphere工程环境,并实现最简单的单库下的水平分表配置演示.通过解读配置文件我们来了解ShardingSphere中是如何实现他的路由操作. 环境:Spri ...

  7. MYSQL二级表的管理_MySQL库和表的管理

    MySQL数据库服务配置好后,系统会有4个默认的数据库. information_schema:虚拟对象,其对象都保存在内存中 performance_schema:服务器性能指标库 mysql:记录 ...

  8. mysql常用表名大全_MySQL常用系统表大全

    MySQL5.7 默认的模式有:information_schema, 具有 61个表: m ysqL, 具有31个表: performance_schema,具有87个表; sys, 具有1个表, ...

  9. mysql查询和修改一个命令_MYSQL的常用命令和增删改查语句

    连接命令:mysql -h[主机地址] -u[用户名] -p[用户密码] 创建数据库:create database [库名] 显示所有数据库: show databases; 打开数据库:use [ ...

最新文章

  1. python魔术方法call_php魔术方法__call
  2. 用800行代码做个行为树(Behavior Tree)的库(2
  3. mysql 5.7 多实例主从_mysql-5.7.20源码安装 + 多实例 + 主从复制
  4. jsonProperty
  5. 通用权限管理系统组件中简易员工档案管理模块参考
  6. Unity - Humanoid设置Bip骨骼导入报错
  7. EXCHANGE 系列
  8. SAP License:SAP标准教材的编号原则
  9. 使用GDAL获取网络数据
  10. HG8240电信光猫禁用TR069之修改配置法
  11. 计算机软考网络工程师中级多少分过,计算机软考网络工程师中级多少分过
  12. 微软Win11与万物互联时代新系统需求更加迫切
  13. 指数分布的期望和方差
  14. chemdraw怎么连接两个结构_用ChemDraw连接两个结构片段的教程
  15. 威联通nas怎么更换大硬盘_QNAP 篇一:记一次换硬盘引发的折腾
  16. 【Basis】狄利克雷分布
  17. python + Selenium 实现自动化查询问财数据及下载Excel数据并存入到mysql
  18. matlab批量修改图片的大小_MATLAB实现批量处理图像图片的两种方法
  19. js处理移动端有虚拟按键影响页面布局的处理方法
  20. webRTC服务器搭建(基于Janus)与Demo运行

热门文章

  1. c语言输出不足10补0,c++ cout输出不足位补0 setw、setfill
  2. MinGW下载和安装详细步骤 及 环境配置
  3. 人工智能与机器学习课程大作业(四、函数优化)
  4. 【django 图书信息】
  5. 高斯——克吕格投影正算
  6. 使用ms17-010永恒之蓝漏洞对win7进行渗透
  7. 红外成像与微光成像的区别
  8. 盈建科弹性板6计算_常见的盈建科计算参数理解.ppt
  9. 接收前端传过来的图片文件,并保存到电脑磁盘中
  10. Java五子棋小游戏(源码及效果图)