企业实战_17_MyCat水平扩展_跨分片查询_ER分片
接上一篇:企业实战_16_MyCat全局自增ID
https://blog.csdn.net/weixin_40816738/article/details/100064315
案例比较:
在垂直拆分场景中,针对字段个数少的类型为字典类型的表,我们可以使用全局表的方式解决。
在水平扩展场景中,针对数据量很大的表,怎样实现跨分片查询呢? ER分片
文章目录
- 一、跨分片查询的另一个场景
- 1. 思考
- 2. 回顾!
- 3. 目前,归纳
- 二、配置order_detail表的全局自增id
一、跨分片查询的另一个场景
1. 思考
order_master表进行了切片操作,而order_detail没有进行切片操作, 2张表,不在一个分片中,现在这种关联属于跨分片关联,针对这种跨分片的查询应该如何处理呢?
2. 回顾!
- 在垂直拆分场景中,针对这种跨分片查询的情况,有3种方式解决跨分片查询。
方式 | 应用场景/说明 |
---|---|
api | 结果拼接,比较耗时 |
数据冗余 | 数据冗余量大 |
全局表 | 字段少 字典类型的表 |
3. 目前,归纳
- 在水平扩展场景,针对这种跨分片查询的情况,使用方式解决跨分片查询。
方式 | 应用场景/说明 |
---|---|
ER分片 | 字段多,访问频繁,数据集大 |
- 得出结论!
全局表:适用于字段少的字典类型的表的场景,而order_master订单表是一个非常庞大的表,调用比较频繁,因此并不适合使用全局表的应用场景。
ER分片表,是通过ER关系来进行分片的,可以把需要两个关联的表,根据他们的关联键,把要关联的这些数据分布到同一个分片内,那么,我们在同一个分片内来解决这个关联问题,以此来,解决跨分片查询的问题
mysql -uapp_imooc -p123456 -h192.168.92.101 -P8066mysql> select * from order_master a join order_detail b on a.order_id = b.order_id;
ERROR 1064 (HY000): invalid route in sql, multi tables found but datanode has no intersection sql:select * from order_master a join order_detail b on a.order_id = b.order_id
mysql>
ER分片
#分别在order_db01、order_db02、order_db03、order_db04数据库中创建order_detail表
#登录node2节点,在order_db01、order_db02数据库中创建order_detail表
[root@node2 ~]# mysql -uroot -p123456
mysql> use order_db01;
mysql> use order_db02;
依次初始化创建表sql#登录node3节点,在order_db03、order_db04数据库中创建order_detail表
[root@node3 ~]# mysql -uroot -p123456
mysql> use order_db03;
mysql> use order_db04;
依次初始化创建表sql
初始化创建表sql
CREATE TABLE `order_detail` (`order_detail_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键ID,订单详情表ID',`order_id` int(10) unsigned NOT NULL COMMENT '订单表ID',`product_id` int(10) unsigned NOT NULL COMMENT '订单商品ID',`product_name` varchar(50) NOT NULL COMMENT '商品名称',`product_cnt` int(11) NOT NULL DEFAULT '1' COMMENT '购买商品数量',`product_price` decimal(8,2) NOT NULL COMMENT '购买商品单价',`average_cost` decimal(8,2) NOT NULL DEFAULT '0.00' COMMENT '平均成本价格',`weight` float DEFAULT NULL COMMENT '商品重量',`fee_money` decimal(8,2) NOT NULL DEFAULT '0.00' COMMENT '优惠分摊金额',`w_id` int(10) unsigned NOT NULL COMMENT '仓库ID',`modified_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间',PRIMARY KEY (`order_detail_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单详情表';
数据清理
# 删除order_master的数据
mysql -uapp_imooc -p123456 -h192.168.92.101 -P8066
use imooc_db;
delete from order_master;
添加分片配置
修改编辑schema.xml
order_master在的table标签中添加childTable 标签,并把下面以前定义的的order_detailtable标签删除
cd /app/mycat/conf/
vim schema.xml
<table name="order_master" primaryKey="order_id" dataNode="ordb01,ordb02,ordb03,ordb04" rule="order_master" autoIncrement="true"/>
<childTable name="order_detail" primaryKey="order_detail_id" joinKey="order_id" parentKey="order_id" autoIncrement="true" />
</table>
注:在childTable标签中,没有定义 dataNode属性,因此,说明字表和父表公用此属性
- joinKey 父表和字表关联的键
- parentKey 父表主键
- primaryKey order_detail表的主键
- autoIncrement 全局自增id 一旦开启需要在配置文件中配置才可以生效
由于order_detail配置了autoIncrement="true"
这个属性,因此,我们需要配置order_detail表的全局自增id
配置order_detail表的全局自增id
二、配置order_detail表的全局自增id
需要在sequence_db_conf.properties文件中,添加order_detail的id数据节点
cd /app/mycat/conf/
vim sequence_db_conf.properties#sequence stored in datanode
GLOBAL=mycat
ORDER_MASTER=mycat
ORDER_DETAIL=mycat
设置自增配置项‘
mysql -uroot -p123456
use mycat;# 查询现有
mysql> select * from MYCAT_SEQUENCE;
+--------------+---------------+-----------+
| name | current_value | increment |
+--------------+---------------+-----------+
| GLOBAL | 1 | 1 |
| ORDER_MASTER | 11 | 1 |
+--------------+---------------+-----------+# 插入新的自增配置项
mysql> insert into MYCAT_SEQUENCE values ('ORDER_DETAIL',1,1);
Query OK, 1 row affected (0.00 sec)mysql> select * from MYCAT_SEQUENCE;
+--------------+---------------+-----------+
| name | current_value | increment |
+--------------+---------------+-----------+
| GLOBAL | 1 | 1 |
| ORDER_DETAIL | 1 | 1 |
| ORDER_MASTER | 11 | 1 |
+--------------+---------------+-----------+
3 rows in set (0.00 sec)# 为了演示好看,将自增ID都改成从1开始,生产环境不能操作,这一步也可以不操作
mysql> update MYCAT_SEQUENCE set current_value =1 where name ='ORDER_MASTER';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0mysql> select * from MYCAT_SEQUENCE;
+--------------+---------------+-----------+
| name | current_value | increment |
+--------------+---------------+-----------+
| GLOBAL | 1 | 1 |
| ORDER_DETAIL | 1 | 1 |
| ORDER_MASTER | 1 | 1 |
+--------------+---------------+-----------+
3 rows in set (0.00 sec)
重启mycat
mycat stopmycat start
# 登录mycat批量插入order_master和order_detail表的数据
mysql -uapp_imooc -p123456 -h192.168.92.101 -P8066use imooc_db;# 初始化脚本,批量插入order_master和order_detail表的数据
从上面图的order_id中可以看出,order_master和order_detail都在通一个分片中
select a.order_id,order_sn,product_name from order_master a join order_detail b on a.order_id=b.order_id;
到此,ER跨分片查询的问题已经解决!
下一篇:企业实战_18_MyCat_ZK集群安装部署
https://gblfy.blog.csdn.net/article/details/100075631
企业实战_17_MyCat水平扩展_跨分片查询_ER分片相关推荐
- 企业实战_12_MyCat水平扩展_分库分表
接上一篇:企业实战_11_MyCat垂直拆分相关配置 https://gblfy.blog.csdn.net/article/details/100055838 文章目录 一.概念理论理解 1. 垂直 ...
- sql跨表查询_跨表查询经常有,何为跨表更新?
有点 SQL 基础的朋友肯定听过 「跨表查询」,那啥是跨表更新啊? 背景 项目新导入了一批人员数据,这些人的有的部门名称发生了变化,有的联系方式发生了变化,暂且称该表为 t_dept_members, ...
- 企业实战_18_MyCat_ZK集群安装部署
接上一篇:企业实战_17_MyCat水平扩展_跨分片查询_ER分片 https://gblfy.blog.csdn.net/article/details/100066013 文章目录 一.使用ZK记 ...
- 企业实战_16_MyCat全局自增ID
接上一篇:企业实战_15_MySql主从复制到MyCat总结 https://gblfy.blog.csdn.net/article/details/118657995 文章目录 一.准备工作 1. ...
- 企业实战_13_MyCat清除冗余数据
接上一篇:企业实战_12_MyCat水平扩展_分库分表 https://gblfy.blog.csdn.net/article/details/100059793 文章目录 一.复制链路停止 1. 清 ...
- 企业实战_11_MyCat垂直拆分相关配置
接上一篇:企业实战_10_MyCat Mysql 主复制总结 https://gblfy.blog.csdn.net/article/details/118652742 文章目录 一.准备工作 1. ...
- ES的跨索引查询有多便利?对比下分库分表、分片更直观
作者介绍 李猛(ynuosoft),Elastic-stack产品深度用户,ES认证工程师,2012年接触Elasticsearch,对Elastic-Stack开发.架构.运维等方面有深入体验,实践 ...
- 企业实战_14_MyCat跨分片查询_全局表
接上一篇:企业实战_13_MyCat清除冗余数据 https://gblfy.blog.csdn.net/article/details/100057317 文章目录 一.跨分片查询验证 1. 登录m ...
- MySQL复制与高可用水平扩展架构实战
前言 一键获取MySQL核心数据结构.底层实现原理.索引.事务.锁机制.MySQL性能优化案例.美团MySQL中间件等. 一.什么是MySQL复制 1.什么是复制 MySQL的复制是构建大规模.高性能 ...
最新文章
- centOS防火墙中端口的开启和关闭
- AI 质检学习报告——学习篇——AI质检产生背景和发展过程
- 适配器模式和装饰模式
- 第一届大数据科学与工程国际会议(2016)征文通知
- ext中ArrayStore,JsonStore,XmlStore的用
- 并发高?可能是编译优化引发有序性问题
- c#调用c++ dll const char* String类型转换问题。传值,与接收返回值问题
- java程序设计实验结论_实验报告三
- 泰文Unicode编码表及排版规则
- 计算机网络接口 rj45类型,网卡:网线接口类型(RJ45/BNC/AUIFDDI/ATM接口) -电脑资料...
- qq远程听到计算机声音,QQ2017远程播放视频没有声音_软件应用_电脑知识学习_培训之家...
- ZPL条码及参数说明
- 女生做数据分析师累吗?零基础可以转行吗?
- 无线控制需要服务器,无线局域网无线控制器管理用户通过RADIUS服务器认证的配置-Cisco.PDF...
- 终于有人把 “单点“ 登录说清楚了!
- matlab中a2qua,matlab-toolbox-forINS 惯性导航系统的 工具箱,里面包含使用说明以及各个m文件的功能 272万源代码下载- www.pudn.com...
- flask开启debug调试模式
- 用计算机制作程序框图,流程图 结构图制作更轻松
- 基于回溯搜索优化算法的WSN覆盖优化
- iOS-控件之间的继承