Mycat的分片join---江山如此多娇,引无数英雄竞折腰_mycat支持inner join吗-程序员宅基地

技术标签: Join  分片  join  数据库  分布式  Mycat  

join概述

Join绝对是关系型数据库中最常用一个特性,然而在分布式环境中,跨分片的join确是最复杂的,最难解决一个问题。
下面我们简单介绍下各种Join操作。
INNER JOIN
内连接,也叫等值连接,inner join产生同时符合A表和B表的一组数据。
如图:
这里写图片描述

LEFT JOIN
左连接从A表(左)产生一套完整的记录,与匹配的B表记录(右表) .如果没有匹配,右侧将包含null,在Mysql中等同于left outer join。
如图:
这里写图片描述
RIGHT JOIN
同Left join,AB表互换即可。
Cross join
交叉连接,得到的结果是两个表的乘积,即笛卡尔积。笛卡尔(Descartes)乘积又叫直积。假设集合A={a,b},集合B={0,1,2},则两个集合的笛卡尔积为{(a,0),(a,1),(a,2),(b,0),(b,1), (b,2)}。可以扩展到多个集合的情况。类似的例子有,如果A表示某学校学生的集合,B表示该学校所有课程的集合,则A与B的笛卡尔积表示所有可能的选课情况。
Full join
全连接产生的所有记录(双方匹配记录)在表A和表B。如果没有匹配,则对面将包含null。
这里写图片描述
性能建议

  • 尽量避免使用Left join或Right join,而用Inner join
  • 在使用Left join或Right
    join时,ON会优先执行,where条件在最后执行,所以在使用过程中,条件尽可能的在ON语句中判断,减少where的执行
  • 少用子查询,而用join。
  • Mycat目前版本支持跨分片的join,主要实现的方式有四种。
  • 全局表,ER分片,catletT(人工智能)和ShareJoin,ShareJoin在开发版中支持,前面三种方式1.3.0.1支持。

全局表

一个真实的业务系统中,往往存在大量的类似字典表的表格,它们与业务表之间可能有关系,这种关系,可以理解为“标签”,而不应理解为通常的“主从关系”,这些表基本上很少变动,可以根据主键ID进行缓存,下面这张图说明了一个典型的“标签关系”图:
这里写图片描述
在分片的情况下,当业务表因为规模而进行分片以后,业务表与这些附属的字典表之间的关联,就成了比较棘手的问题,考虑到字典表具有以下几个特性:

  • • 变动不频繁
  • • 数据量总体变化不大
  • • 数据规模不大,很少有超过数十万条记录。

鉴于此,MyCAT定义了一种特殊的表,称之为“全局表”,全局表具有以下特性:

  • • 全局表的插入、更新操作会实时在所有节点上执行,保持各个分片的数据一致性
  • • 全局表的查询操作,只从一个节点获取
  • • 全局表可以跟任何一个表进行JOIN操作

将字典表或者符合字典表特性的一些表定义为全局表,则从另外一个方面,很好的解决了数据JOIN的难题。通过全局表+基于E-R关系的分片策略,MyCAT可以满足80%以上的企业应用开发。
配置
全局表配置比较简单,不用写Rule规则,如下配置即可:

<table name="company" primaryKey="ID" type="global" dataNode="dn1,dn2,dn3" />

需要注意的是,全局表每个分片节点上都要有运行创建表的DDL语句。

ER Join

MyCAT借鉴了NewSQL领域的新秀Foundation DB的设计思路,Foundation DB创新性的提出了Table Group的概念,其将子表的存储位置依赖于主表,并且物理上紧邻存放,因此彻底解决了JION的效率和性能问题,根据这一思路,提出了基于E-R关系的数据分片策略,子表的记录与所关联的父表记录存放在同一个数据分片上。
customer采用sharding-by-intfile这个分片策略,分片在dn1,dn2上,orders依赖父表进行分片,两个表的关联关系为orders.customer_id=customer.id。于是数据分片和存储的示意图如下:
这里写图片描述
这样一来,分片Dn1上的

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wangshuang1631/article/details/62894521

智能推荐

Windows python用impyla连接远程Hive数据库_python impyla demo-程序员宅基地

文章浏览阅读260次。安装下述包:thirftpythirft-saslthirftpure-sasl(卸载sasl,若要用pyhive,sasl轮子安装路径Link)impyla# -*- coding:UTF-8 -*-from impala.dbapi import connect#下述host只是个demo,需填入真实ipconn = connect(host='11.22.33.44', port=21050, auth_mechanism='PLAIN',user='yourusername',pa_python impyla demo

php 编译 pdo_mysql_Linux正确编译pdo_mysql扩展-程序员宅基地

文章浏览阅读280次。错误编译pdo_mysqlphp扩展的操作流程,以及解决错误并成功完成编译pdo_mysql新编译的PHP环境运行项目时报错PHP Fatal error: Undefined class constant 'MYSQL_ATTR_INIT_COMMAND'原因是没有加载pdo_mysql扩展错误配置pdo_mysql及编译cd ext/pdo_mysqlphpize./configure --w..._/usr/local/php7.4.24/ext/pdo_mysql/php_pdo_mysql_int.h:29:11: fatal error: m

Mybatis入参_mybatis select参数对象-程序员宅基地

文章浏览阅读332次。<!-- 关于sql语句中填充占位符时参数的处理: 1.单个参数:MyBatis不做任何处理,填充占位符时获取参数的key可以任意指定 如:#{任意指定} 2.多个参数:MyBatis会将多个参数封装到一个Map中,Map的key时arg0,arg1,arg2...或者param1,pa..._mybatis select参数对象

Maven上传问题-手动与401_mvn 本地上传jar,401-程序员宅基地

文章浏览阅读1.4k次。Maven上传问题注意: 如非必要, 请不要手动上传jar包, 手动上传如果遗漏pom文件, 会导致jar包内的pom依赖丢失, 这样上传的包在被使用时会产生依赖丢失的报错私服jar包结构手动上传的jar生成的pom原始pom1.手动上传快照版本maven不支持手动上传snapshot版本jar包到nexus, 当需要上传快照版本时, 需要用命令上传1.配置 maven安装目录conf/settings.xml(注意此处是安装目录的setting.xml,不是.m2下的,而且由于我们命令_mvn 本地上传jar,401

vue中css样式只在当前vue中生效_vue怎么让css只在此页面显示-程序员宅基地

文章浏览阅读4.2k次,点赞2次,收藏3次。在设置style时,会影响到其他组件样式,为避免样式共享,可在样式style标签里添加scoped 即可_vue怎么让css只在此页面显示

datax-web在windows上环境搭建及同步数据测试_datax-web job execute end(finish) -----------<br>--程序员宅基地

文章浏览阅读8.6k次,点赞7次,收藏44次。datax-web部署说明:datax-web是一个集成datax和xxljob定时任务优秀的同步数据库开源框架。data-web开源地址:https://github.com/WeiYe-Jing/datax-web DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS 等各种异构数据源之间高效的数._datax-web job execute end(finish) ---------------------- returnt:returnt

随便推点

材质面向摄像机_ue5 通过材质使面片始终朝向摄像机-程序员宅基地

文章浏览阅读2.4k次,点赞2次,收藏10次。材质面向摄像机单贴图面向摄像机组合贴图面向摄像机单贴图面向摄像机主要是调用RotateAboutAxis这个材质函数输入旋转轴 001计算旋转角度去除camera的z轴影响算出物体到摄像机的向量归一化后算出夹角FVector::Rotation()函数的内部实现(局部)FRotator R; // Find yaw.R.Yaw = FMath::Atan2(Y,X) * (180.f / PI); // Find pitch.R.Pitch = FMath_ue5 通过材质使面片始终朝向摄像机

轻松搞定 android MVP 架构、okHttp 网络模块封装 的 项目_android mvp网络封装-程序员宅基地

文章浏览阅读373次。CommonMvp MVP 框架的 使用commonMvp 能做什么?1、mvp 实现 model view presenter 业务和界面解耦2、整合 网络 请求3、简化网络调用流程4、整合状态栏和标题栏 实现沉浸式 状态栏5、Activity 、Fragment 中 使用方法 一致 接口式封装 生命周期1、有问题请 提交 isuue/(QQ:194093798) 谢谢大家 持续更新2、为新手提供一个 可靠 可用的 mvp 框架结构集成allprojects { repos_android mvp网络封装

flash详解_read parameter page-程序员宅基地

文章浏览阅读2.5w次,点赞62次,收藏496次。1.2.1. 什么是FlashFlash全名叫做Flash Memory,从名字就能看出,是种数据存储设备,存储设备有很多类,Flash属于非易失性存储设备(Non-volatile Memory Device),与此相对应的是易失性存储设备(Volatile Memory Device)。关于什么是非易失性/易失性,从名字中就可以看出,非易失性就是不容易丢失,数据存储在这类设备中,即使断电了,..._read parameter page

杰里之AI SDK 自定义命令操作流程】【篇】_杰里sdk-程序员宅基地

文章浏览阅读328次。APP 异步发数据给固件的操作流程:使 用 杰 理 的 APP , 不 开 放 自 定 义 services , 需 要 添 加 自 定 义 操 作 , 只 能 通 过 自 定 义 命 令JL_OPCODE_CUSTOMER_USER,利用这个通道去封装自己需要的功能。类似于提供一个 BLE 的串口功能。固件异步发数据给 APP 流程:..._杰里sdk

APP安全测试工具_QARK初探-程序员宅基地

文章浏览阅读9.7k次。1、简介检测android应用程序安全漏洞,可以用于已打包但是未加固的app或者源代码。https://github.com/linkedin/qark2、安装要求Tested on Python 2.7.13 and 3.6 Tested on OSX, Linux, and Windows现有win10安装pip install qark安装成功后可以使用一下命令查看qark --help安装反编译工具_jadx:https:._qark

校验码——奇偶校验码详解,码距,例题_奇偶校验题目-程序员宅基地

文章浏览阅读1.1w次,点赞7次,收藏18次。相关文章: 校验码——码距 校验码——海明码及码距 校验码——CRC循环冗余校验码 一、码距二、奇偶校验码 奇偶校验码是一种增加二进制传输系统最小距离的简单和广泛采用的方法。例如,单个的奇偶校验将使码的最小距离由一增加到二。 一个二进制码字,如果它的码元有奇数个1,就称为具有奇性。例如,码字“10110101”有五个1,因此,这个码字具有奇性。同样,偶性码字具有偶数个1。注意奇性检测等效于所有码元的模二加,..._奇偶校验题目

推荐文章

热门文章

相关标签