




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Mycat跨分片Join指南1 前言Mycat目前版本支持跨分片的join,主要实现的方式有四种。全局表ER分片HBT(参考MyCAT人工智能解决跨分片SQL.docx)ShareJoinShareJoin在开发版中支持,前面三种方式支持2 ShareJoin ShareJoin是一个简单的跨分片Join,基于HBT的方式实现。目前支持2个表的join,原理就是解析SQL语句,拆分成单表的SQL语句执行,然后把各个节点的数据汇集。支持任意配置的A,B表如:A,B的dataNode相同A,B的dataNode不同或2.1 相关类图JoinParser: SQL语句的解析TableFilter:存解析后的各个子表ShareJoin:执行拆分的语句管理控制,和字段,记录的管理ShareDBJoinHandler:第一个表执行后获取数据的handlerShareRowOutPutDataHandler:最后一个表执行后获取数据的handlerEnginerCtx:执行引擎SQLJob:SQL语句执行任务SQLJobHandler:SQL语句执行后获取数据的handlerBatchSQLJob:批量执行任务控制AllJobFinishedListener:所有任务完成侦听器HintCatletHandlerShareJoinRouteService2.2 测试默认mycat的环境测试:/*!mycat:catlet=demo.catlets.ShareJoin */ select a.*,b.id, as tit from customer a,company b on pany_id=b.id;/*!mycat:catlet=demo.catlets.ShareJoin */ select a.*,b.id, as name from orders a join customer b where a.customer_id=b.id;/*!mycat:catlet=demo.catlets.ShareJoin */ select a.*,b.* from orders a join customer b where a.customer_id=b.id;/*!mycat:catlet=demo.catlets.ShareJoin */ select a.id,a.user_id,date,a.fee,a.days,b.id as nnid, b.title as tit from travelrecord a join hotnews b on b.id=a.days order by a.id ;2.3 升级未来支持多表的跨分片Join小表放人缓存或广播方式3 全局表一个真实的业务系统中,往往存在大量的类似字典表的表格,它们与业务表之间可能有关系,这种关系,可以理解为“标签”,而不应理解为通常的“主从关系”,这些表基本上很少变动,可以根据主键ID进行缓存,下面这张图说明了一个典型的“标签关系”图:省份表厂商表网络设备设备状态表设备类型表在分片的情况下,当业务表因为规模而进行分片以后,业务表与这些附属的字典表之间的关联,就成了比较棘手的问题,考虑到字典表具有以下几个特性: 变动不频繁 数据量总体变化不大 数据规模不大,很少有超过数十万条记录。鉴于此,MyCAT定义了一种特殊的表,称之为“全局表”,全局表具有以下特性: 全局表的插入、更新操作会实时在所有节点上执行,保持各个分片的数据一致性 全局表的查询操作,只从一个节点获取 全局表可以跟任何一个表进行JOIN操作将字典表或者符合字典表特性的一些表定义为全局表,则从另外一个方面,很好的解决了数据JOIN的难题。通过全局表+基于E-R关系的分片策略,MyCAT可以满足80%以上的企业应用开发。3.1 配置全局表配置比较简单,不用写Rule规则,如下配置即可:需要注意的是,全局表每个分片节点上都要有运行创建表的DDL语句。4 ER分片MyCAT借鉴了NewSQL领域的新秀Foundation DB的设计思路,Foundation DB创新性的提出了Table Group的概念,其将子表的存储位置依赖于主表,并且物理上紧邻存放,因此彻底解决了JION的效率和性能问题,根据这一思路,提出了基于E-R关系的数据分片策略,子表的记录与所关联的父表记录存放在同一个数据分片上。customer采用sharding-by-intfile这个分片策略,分片在dn1,dn2上,orders依赖父表进行分片,两个表的关联关系为orders.customer_id=customer.id。于是数据分片和存储的示意图如下:Dn2(orders)Parent_Id:3Parent_id :4Dn1(orders)Parent_id:1Parent_id:2Dn2(customer)Id:3Id:4Dn1(customer)Id:1Id:2orderscustomer这样一来,分片Dn1上的的customer与Dn1上的orders就可以进行局部的JOIN联合,Dn2上也如此,再合并两个节点的数据即可完成整体的JOIN,试想一下,每个分片上orders表有100万条,则10个分片就有1个亿,基于E-R映射的数据分片模式,基本上解决了80%以上的企业应用所面临的问题。4.1 配置以上述例子为例,schema.xml中定义如下的分片配置:5 HBT分片解决跨分片的SQL JOIN的问题,远比想象的复杂,而且往往无法实现高效的处理,既然如此,就依靠人工的智力,去编程解决业务系统中特定几个必须跨分片的SQL的JOIN逻辑,MyCAT提供特定的API供程序员调用,这就是MyCAT创新性的思路人工智能。以一个跨节点的SQL为例,Select a.id,,b.title from a,b where a.id=b.id其中a在分片1,2,3上,b在4,5,6上,需要把数据全部拉到本地(MyCAT服务器),执行JOIN逻辑,具体过程如下(只是一种可能的执行逻辑):EngineCtx ctx=new EngineCtx();/包含MyCat.SQLEngineString sql=,“select a.id , from a ”;/在a表所在的所有分片上顺序执行下面的本地SQLctx.executeNativeSQLSequnceJob(allAnodes,new DirectDBJoinHandler();DirectDBJoinHandler类是一个回调类,负责处理SQL执行过程中返回的数据包,这里的这个类,主要目的是用a表返回的ID信息,去b表上查询对于的记录,做实时的关联:DirectDBJoinHandler Private HashMap rows;/Key为id,value为一行记录的Column原始Byte数组,这里是a.id,,b.title这三个要输出的字段 Public Boolean onHeader(byte header) /保存Header信息,用于从Row中获取Field字段值 Public Boolean onRowData(byte rowData) String id=getColumnAsString(“id”);/放入结果集,b.title字段未知,所以先空着rows.put(getColumnRawBytes(“id”),rowData); /满1000条,发送一个查询请求String sql=”select b.id, from b where id in (.)”;/此SQL在B的所有节点上并发执行,返回的结果直接输出到客户端 ctx.executeNativeSQLParallJob(allBNodes,sql ,new MyRowOutPutDataHandler(rows); Public Boolean onRowFinished() Public void onJobFinished() If(ctx.allJobFinished() /used total time . /最后,增加一个Job事件监听器,这里是所有Job完成后,往客户端发送RowEnd包,结束整个流程。ctx.setJobEventList
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小学数学练习题汇编与讲解
- 企业色板管理流程标准与操作规程
- 工厂职工食品安全检查标准
- 离婚协议签订前子女抚养费用支付争议解决
- 写字楼租赁安全协议及消防设施检查及维护合同
- 药用辅料管理规范及流程
- 砌石挡土墙施工工艺及安全措施
- 多源数据融合分析-第44篇-洞察及研究
- 实时交通监控与智能调度系统-洞察及研究
- 7.3溶液浓稀的表示(第二课时)教学设计-九年级化学科粤版下册
- 2025年国有企业土地使用权出让合同标准文本
- 语文●全国甲卷丨2021年普通高等学校招生全国统一考试语文试卷及答案
- 三瘫一截康复
- JG/T 286-2010低温辐射电热膜
- 海南区污水处理项目可行性研究报告
- 应届生校招:管理培训生笔试试题及答案
- 机械维修工试题及答案
- AI+汽车智能化系列之十一:以地平线为例探究第三方智驾供应商核心竞争力
- 年产30万立方米商砼建设项目环评资料环境影响
- 院感知识培训资料课件
- 销售部门绩效考核管理办法
评论
0/150
提交评论