>>分享孙卫琴的Java技术专稿和著作 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 8218 个阅读者 刷新本主题
 * 贴子主题:  【Spring Cloud Alibaba专题】ShardingSphere核心概念 回复文章 点赞(0)  收藏  
作者:sunweiqin    发表时间:2022-08-25 11:27:06     消息  查看  搜索  好友  邮件  复制  引用

本文参考孙卫琴,杜聚宾所创作的<<Spring Cloud Alibaba微服务开发宝典>>一书,即将出版

ShardingSphere围绕着分库分表,必须建立真实表和逻辑表在结构上的对应关系,还要建立真实表和逻辑表的记录的对应关系。本文介绍ShardingSphere的核心概念。

1.  和表相关的概念

和表相关的概念包括:真实表、逻辑表、数据节点、绑定表、广播表。
(1)真实表
数据库中真实存在的物理表。例如order_1表、order_2表。
(2)逻辑表
存放同类型数据的所有真实表的合并表,例如order_1表和order_2表的逻辑表为order。逻辑表是ShardingSphere提供的虚拟表,使得应用程序可以忽略分库分表的细节,只需操纵一张逻辑表。
(3)数据节点
由数据源和真实表组成。例如ds1.order_1数据节点表示位于ds1数据源的真实表order_1。
(4)绑定表
指的是分片规则一致的关系表(主表、子表),例如13.1节的图13-7把order表进行垂直和水平拆分,得到order_1、order_2、order_detail_1和order_detail_2表。order_1和order_2表的逻辑表为order主表,order_detail _1和order_detail _2表的逻辑表为order_detail子表。order逻辑主表与order_detail逻辑子表为绑定表关系。绑定表之间的多表关联查询不会出现笛卡尔积关联,可以提升关联查询性能。
以下是应用程序向ShardingShpere提交的一条查询语句,应用程序操纵的是order和order_detail逻辑表:

SELECT * FROM order o JOIN order_detail d
ON o.id=d.id WHERE o.id in (10, 11);

在不配置绑定表关系时,ShardingSphere会向真实的数据库提交4条SQL语句,它们呈现为笛卡尔积:

SELECT * FROM order_1 o JOIN order_detail_1 d
ON o.id=d.id WHERE o.id in (10, 11);

SELECT * FROM order_1 o JOIN order_detail_2 d
ON o.id=d.id WHERE o.id in (10, 11);

SELECT * FROM order_2 o JOIN order_detail_1 d
ON o.id=d.id WHERE o.id in (10, 11);

SELECT * FROM order_2 o JOIN order_detail_2 d
ON o.id=d.id WHERE o.id in (10, 11);

配置了order与order_detail逻辑表的绑定表关系,ShardingSphere只会向真实的数据库提交两条SQL语句,不再呈现为笛卡尔积:

SELECT * FROM order_1 o JOIN order_detail_1 d
ON o.id=d.id WHERE o.id in (10, 11);

SELECT * FROM order_2 o JOIN order_detail_2 d
ON o.id=d.id WHERE o.id in (10, 11);

(5)广播表
在实际应用中,有些表没必要做分片,例如字典表,因为它的数据量不大,而且这种表常常需要与存放海量数据的表进行关联查询。广播表会在各个真实数据库中进行存储,存储的表结构以及表中的数据完全相同。

2.  和分片相关的概念

分片包含两层含义:
  • 对表进行水平拆分,使得表中的数据可以分片存放到多个分表中。
  • 对于应用程序提交的SQL语句,按照分片策略计算出SQL的路由,即到底在哪些真实表中执行SQL操作。
(1)分片键
表中用于分片的字段,即对表进行水平拆分的字段。例如根据order订单表中的id主键分片,则id主键就是分片键。
分片键分为两种:
  • 单分片键:把单个字段作为分片键。
  • 复合分片键:把多个字段作为分片键。
(2)分片算法(ShardingAlgorithm)
由于分片算法和业务实现紧密相关,因此并未提供内置的具体分片算法,而是从各种分片场景中抽象出更高层级的分片算法。目前提供四种分片算法,参见表1。
表1  分片算法的种类
点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小
(3)分片策略
包含分片键和分片算法。分片策略结合分片键和分片算法,指定了具体的分片方式。目前包括5种分片策略,参见表2。
表2  分片策略的种类
点击在新窗口中浏览原图
CTRL+鼠标滚轮放大或缩小
(4)分片策略配置维度
分片策略配置包括两个维度:数据源分片维度和表分片维度。两种维度的分片策略配置API完全相同。数据源分片维度用于指定数据被分配的目标数据源;表分片维度用于指定数据被分配的目标表。由于表存在于数据源内,所以表分片维度会依赖数据源分片维度的分片结果。13.6.9节的配置代码就从这两个维度设置了分片策略。




程序猿的技术大观园:www.javathinker.net
  Java面向对象编程-->Swing组件(下)
  JavaWeb开发-->Web运作原理(Ⅲ)
  JSP与Hibernate开发-->持久化层的映射类型
  Java网络编程-->安全网络通信
  精通Spring-->通过Vuex进行状态管理
  Vue3开发-->Vue Router路由管理器
  【Spring Cloud Alibaba专题】GateWay的内置断言工厂
  【Spring Cloud Alibaba专题】Dubbo框架中提供者回调消费者
  【Spring Cloud Alibaba专题】OpenFeign开启对请求和响应数据...
  【Spring专题】用AOP和SLF4J输出日志的范例
  【Spring专题】@Query注解设定查询语句
  视频:我的Java课堂总动员,带领小白们走马观花看Java江湖
  【Vue专题】Vue组件的CSS过渡模式
  【持久化专题】从JPA API中获得Hibernate API
  【持久化专题】Spring与Hibernate与JPA的整合
  【Java网络编程专题】用java.net.URL类访问HTTP服务器读取网...
  【Java网络编程专题】创建基于SSL的安全服务器和安全客户的范...
  【Java网络编程专题】优化访问数据库的程序代码的一些技巧
  【JavaWeb专题】在JavaWeb应用中对客户请求的异步处理
  【JavaWeb专题】Spring MVC创建Web应用范例,轻松入门
  【Java基础编程专题】用static修饰符进行静态导入的作用和语...
  更多...
 IPIP: 已设置保密
楼主      
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。