Mycat实战之配置EP分片
ER分片介绍
以mycat逻辑库里面自带的例子,例如客户(CUSTOMER)跟订单(orders)以及订单条目(orders_item),订单条目依赖订单表,订单表依赖客户,这样客户与订单以及订单条目之间存在依赖关系,这类似业务的切分可以抽象出合适的切分规则,比如根据用户ID切分,其它相关的表都依赖于用户ID,再或者根据订单ID进行切分,总之部分业务总会可以抽象出父子关系的表。这类表适用于ER分片表,子表的记录与所关联的父表记录存放在同一个数据分片上,避免数据Join跨库操作,以order与order_item例子为例和customer与order,schema.xml中定义合适的分片配置,order,order_item根据id迕行数据切分,保证相同id的数据分到同一个分片上,在进行数据插入操作时,Mycat会获取order所在的分片,然后将order_item也插入到order所在的分片。同理order与customer也是这样关系。
Tables | 主键 | 对应的父表 | 关联关系 |
---|---|---|---|
customer | id | ||
orders | id | customer | orders.customer_id=customer.id |
order_items | id | orders | order_items.order_id=orders.id |
customer_addr | id | customer | customer_addr.customer_id= customer.id |
1 修改 scehma.xml 添加 ER分片对应的父子表
#customer 采用rule是sharding-by-intfile,是枚举类型,类似range,可以看成是range特例情况.[root@localhost conf]# vi schema.xml<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://org.opencloudb/"><schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100"><table name="travelrecord" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" /><table name="T_VOTE" dataNode="dn1,dn2,dn3" rule="sharding-by-murmur" /><table name="customer" primaryKey="ID" dataNode="dn1,dn2" rule="sharding-by-intfile"><childTable name="orders" primaryKey="ID" joinKey="customer_id" parentKey="id"><childTable name="order_items" joinKey="order_id"parentKey="id" /></childTable><childTable name="customer_addr" primaryKey="ID" joinKey="customer_id"parentKey="id" /></table></schema><dataNode name="dn1" dataHost="192.168.2.130" database="db1" /><dataNode name="dn2" dataHost="192.168.2.130" database="db2" /><dataNode name="dn3" dataHost="192.168.2.130" database="db3" /><dataHost name="192.168.2.130" maxCon="1000" minCon="10" balance="0"writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"><heartbeat>select user()</heartbeat><writeHost host="hostM1" url="192.168.2.130:3306" user="root"password="root123"></writeHost></dataHost>
</mycat:schema>
2 修改 rule.xml
#修改默认规则columns里面对应sharding_id变成id <tableRule name="sharding-by-intfile"><rule><columns>id</columns><algorithm>hash-int</algorithm></rule></tableRule><function name="hash-int"class="org.opencloudb.route.function.PartitionByFileMap"><property name="mapFile">partition-hash-int.txt</property></function>#修改func 对应的文本:定义2个值对应datanode[root@localhost conf]# vi partition-hash-int.txt10000=010010=1#reload configmysql> reload @@config;Query OK, 1 row affected (0.24 sec)Reload config success
3 在逻辑库中创建需要表
注释:创建customer和customer_addr表演示ER分片.
[root@localhost bin]# mysql -h 192.168.2.130 -P8066 -u test -ptest
Warning: Using a password on the command line interfa ce can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 17
Server version: 5.5.8-mycat-1.5.1-RELEASE-20161130213509 MyCat Server (OpenCloundDB)Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql>
mysql>
mysql> show databases;
+----------+
| DATABASE |
+----------+
| TESTDB |
+----------+
1 row in set (0.00 sec)mysql> use TESTDB
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -ADatabase changed
mysql> show tables;
+------------------+
| Tables in TESTDB |
+------------------+
| customer |
| customer_addr |
| orders |
| order_items |
| travelrecord |
| t_vote |
+------------------+
6 rows in set (0.00 sec)mysql> create table customer(id int not null,customer_id int not null,datanode varchar(10),primary key(id));
Query OK, 0 rows affected (0.09 sec)mysql> create table customer_addr(id int not null,customer_id int not null,customer_addr varchar(200),datanode varchar(10),primary key(id));
Query OK, 0 rows affected (0.04 sec)
插入数据到customer和customer_addr表
a:插入数据到customer
mysql> insert into customer(id,customer_id,datanode) values(10000,1,database());
Query OK, 1 row affected (0.07 sec)
对应的日志
可以看到写入到db1
b:插入数据到 customer_addr
mysql> insert into customer_addr (id, customer_id, customer_addr, datanode) values (10000, 10000, 'shanghai', DATABASE())
Query OK, 1 row affected (0.11 sec)
对应的日志
c:继续插入数据到dn2
mysql> insert into customer(id,customer_id,datanode) values(10010,2,database());
Query OK, 1 row affected (0.01 sec)mysql> insert into customer_addr(id,customer_id,customer_addr,datanode) values(10010,10010,'chengdu',database());
Query OK, 1 row affected (0.11 sec)
4 验证ER分片
#获取全部数据
mysql> explain select customer.id,customer.customer_id,customer.datanode,customer_addr.customer_addr from customer,customer_addr where customer.id=customer_addr.customer_id;
+-----------+-----------------------------------------------------------+
| DATA_NODE | SQL |
+-----------+-----------------------------------------------------------+
| dn1 |select customer.id,customer.customer_id,customer.datanode, |
| | customer_addr.customer_addr |
| |from customer,customer_addr |
| |where customer.id=customer_addr.customer_id; |
| | |
| dn2 |select customer.id,customer.customer_id,customer.datanode, |
| | customer_addr.customer_addr |
| |from customer,customer_addr |
| |where customer.id=customer_addr.customer_id; |
+-----------+-----------------------------------------------------------+
对应的日志
由上可知走的是全部路由
#获取单个分片上的数据
mysql> explain select customer.id,customer.customer_id,customer.datanode,customer_addr.customer_addr from customer,customer_addr where customer.id=customer_addr.customer_id and customer.id=10000;
+-----------+--------------------------------------------------------------------+
| DATA_NODE | SQL |
+-----------+--------------------------------------------------------------------+
| dn1 | select customer.id,customer.customer_id,customer.datanode, |
| | customer_addr.customer_addr |
| | from customer,customer_addr |
| | where customer.id=customer_addr.customer_id and customer.id=10000 |
+-----------+--------------------------------------------------------------------+
1 row in set (0.00 sec)
由上可知路由到了dn1上
转载于:https://www.cnblogs.com/chinesern/p/7800936.html
Mycat实战之配置EP分片相关推荐
- MyCat实战--读写分离/数据分片/mycat集群/haproxy负载均衡
目录 简介 优势 关键特性 读写分离 安装mycat 配置mycat server.xml schema.xml rule.xml 启动mycat 停止mycat 连接mycat 测试 数据分片 配置 ...
- MySQL 基于MyCAT配置数据分片
目录 MySQL 基于MyCAT配置数据分片 相关概念 分库/分表 垂直分割 水平分割 MyCAT介绍 软件介绍 分片规则 工作过程 部署MyCAT服务 环境部署 拓部结构 IP规划 部署MyCAT服 ...
- 学习笔记:分库分表之中间件Mycat实战
点关注,不迷路! 本文已整理成文档! 文章目录 1.数据切分概念 垂直切分 水平切分 2.什么是Mycat 应用场景 3.Mycat中的核心概念及配置 核心概念 安装与配置 linux安装 4. My ...
- 数据库中间件:Mycat 权威指南+Mycat 实战笔记,双管齐下
前阵子复习了一下消息中间件MQ系列的知识点,忽然想起还有个数据库中间件--MyCat! Mycat 是一个开源的分布式数据库系统,是一个实现了MySQL协议的服务器,前端用户可以把它看作是一个数据库代 ...
- MyCat介绍与配置(精)
Mycat 前生今世 如果我有一个32核心的服务器,我就可以实现1个亿的数据分片,我有32核心的服务器么?没有,所以我至今无法实现1个亿的数据库分片.---Mycat's Plan Mycat 简介 ...
- Mycat安全权限配置user_配置mycat用户只读数据---MyCat分布式数据库集群架构工作笔记0031
技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 咱们先总结一下,mycat可以,实现读写分离 我们做了读写分离对吧,然后 mycat还可以实现数据 ...
- 我的架构梦:(五十四) 分库分表实战及中间件之Mycat实战
分库分表实战及中间件之Mycat实战 一. Mycat 简介 二.Mycat 核心概念 三.server.xml配置 四.schema.xml配置 五.rule.xml配置 六.Mycat实战 七.M ...
- mycat读写分离配置
为什么使用MyCat 如今随着互联网的发展,数据的量级也是撑指数的增长,从GB到TB到PB.对数据的各种操作也是愈加的困难,传统的关系性数据库已经无法满足快速查询与插入数据的需求.这个 ...
- Linux下配置jupyter notebook远程访问实战:配置Jupyter的连接密码、启动jupyter服务、远程访问jupyter(关闭防火墙)
Linux下配置jupyter notebook远程访问实战:配置Jupyter的连接密码.启动jupyter服务.远程访问jupyter(关闭防火墙) 目录 Linux下配置jupyter note ...
- Plotly绘制金融时间序列图实战:配置滑动控件
Plotly绘制金融时间序列图实战:配置滑动控件 # 可视化金融时间序列数据并设置时间粒度组件: import plotly as py import plotly.graph_objs as go ...
最新文章
- cp: /usr/bin/chromedriver: Operation not permitted
- Magento 模版路径
- 软件测试中排错的基本方法
- 【机器学习算法专题(蓄力计划)】十八、机器学习中SVM算法中的硬间隔和软间隔
- 个人项目的设计与分析——类饿了么、美团式订餐类校园食堂版App“加个蛋”。...
- Python下调用Linux的Shell命令
- oracle日志查看问题?
- tabel表格制作及操作
- 力扣332. 重新安排行程(JavaScript)
- pycharm 中 pep8 检查开启.
- CentOS下使用SVN实现多项目管理配置方案
- 百度网页注册HTML代码
- matlab 产生瑞利信道,瑞利信道仿真 matlab
- 手机网速正常电脑很慢_电脑上网慢手机却很快如何解决_手机上网速度快电脑慢的解决方法-系统城...
- 【网络同步】浅析帧同步和状态同步
- API 网关和微服务介绍
- python中的os.listdir()方法、os.path.isdir()方法
- select下拉框分组展示插件的使用--(select-mania插件的使用)
- Codeforces Round #750 (Div. 2)E. Pchelyonok and Segments (数学+DP)
- python 绘图-时间显示
热门文章
- mysql xmlhttp_php_xmlhttp 乱码问题解决方法
- 多方安全计算、联邦学习、可信计算 对比区别
- 区块链 p2p点对点网络是什么
- windows 上网重新刷新IP
- gitlab查看word文档_gitlab迁移
- php基础之时间函数(date(), time(), microtime())
- 解决Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile
- ibatis 核心原理解析
- Http 理论基础-请求与响应、响应状态码汇总
- 微信小游戏 UserInfoButton 获取用户信息