分布式中间件——ShardingSphere
分布式中间件——ShardingSphere
一、ShardingSphere介绍
1、Apache ShardingSphere
Apache ShardingSphere是一个开源生态系统,允许您将任何数据库转换为分布式数据库系统,并通过分片、弹性扩展、加密功能等对其进行增强。该项目包括一个 JDBC、一个代理和 Sidecar(规划)。由于其面向插件的架构,功能可以随意灵活扩展。
几乎所有数据库都受支持,包括 MySQL、PostgreSQL、SQL Server、Oracle 数据库、MariaDB 或任何其他 SQL-92 数据库。Apache ShardingSphere 社区致力于通过插件增强现有数据库的计算和存储能力以及核心功能来提供生态系统和服务平台。
2、ShardingSphere JDBC
定位轻量级Java框架,在Java的JDBC层提供额外的服务。它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可以理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架。
- 适用于任何基于JDBC的ORM框架,如 JPA、Hibernate、MyBatis、SpringJDBC Template 或直接使用JDBC;
- 支持任何第三方的数据库连接池,如 DBCP、C3P0、BoneCP、HikariCP等;
- 支持任意实现JDBC规范的数据库,目前支持MySQL,PostgreSQL,Oracle,SQLServer以及任何可用JDBC访问的数据库。
二、分库分表核心知识点
1、相关概念
在了解分片策略之前,先要了解以下几个重点概念:逻辑表
、真实表
、数据节点
、绑定表
、广播表
。
- 逻辑表: 水平拆分的数据库(表)的相同逻辑和数据结构表的总称。
逻辑上 tb_device 表示的是描述设备信息的表,为了体现分表的概念,把tb_device表分成了两张。于是
tb_device就是逻辑表 ,而tb_device_0 和 tb_device_1就是该逻辑表的物理表。
- 真实表: 在分片数据库中真实存在的物理表。即 tb_device_0 和 tb_device_1。
- 数据节点: 数据分片的最小单元。由数据源名称(数据库)和数据表组成,例:dbTestDemo.tb_device_1。
- 绑定表: 指分片规则一致的主表和子表。例如:tb_device表和tb_device_item表,均按照device_id分片,则此两张表互为绑定关系。绑定表之间的多表关联查询不会出现笛卡尔积关联,关联查询效率将大大提升。
- 广播表: 指所有的分片数据源中都存在的表,表结构和表中的数据在每个数据库中均完全一致。适用于数据量不大且需要与海量数据的表进行关联查询的场景,例如:字典表。
2、分片策略
-
分片键:
用于分片的数据字段,是将数据库(表)水平拆分的关键字段。SQL中如果无分片字段,将执行全路由,性能较差。除了对单分片字段的支持,ShardingSphere也支持根据多个字段进行分片。
-
分片算法:
通过分片算法将数据分片,支持通过 = 、>= 、<= 、> 、< 、BETWEEN 和 IN 分片。
Sharding目前提供 4 种分片算法。由于分片算法和业务实现紧密相关,因此并未提供内置分片算法,而是通过分片策略将各种场景提炼出来,提供更高层级的抽象,并提供接口让开发者自行实现分片算法。
-
精确分片算法
对应PreciseShardingAlgorithm,用于处理使用单一键作为分片键的 = 与 IN 进行分片的场景。需要配合StandardShardingStrategy使用。
-
范围分片算法
对应RangeShardingAlgorithm,用于处理使用单一键作为分片键的BETWEEN AND、> 、< 、>= 、<= 、进行分片的场景。需要配合StandardShardingStrategy使用。
-
复合分片算法
对应ComplexKeyShardingAlgorithm,用于处理使用多键作为分片键进行分片的场景,包含多个分片键的逻辑较复杂,需要开发者自行处理其中的复杂度。需要配合ComplexShardingStrategy使用。
-
Hint 分片算法 (强制分片)
对应HintShardingAlgorithm,用于处理使用Hint行分片的场景。需要配合HintShardingStrategy使用。
-
-
分片策略
包含分片键和分片算法,由于分片算法的独立性,将其独立抽离。真正可用于分片操作的是分片键 + 分片算法,也就是分片策略。目前提供 5 种分片策略。
-
标准分片策略
对应StardardShardingStrategy。提供对SQL语句中的 = 、> 、< 、>= 、<= 、IN 和 BETWEEN AND 的分片操作支持。StandardShardingStrategy只支持单分片键,提供PreciseShardingAlgorithm 和 RangeShardingAlgorithm两个分片算法。
-
复合分片策略
-
行表达式分片策略
-
Hint分片策略
-
不分片策略
对应NoneShardingStrategy。不分片的策略。
-
标题:分布式中间件——ShardingSphere
作者:amethystfob
地址:https://newmoon.top/articles/2023/11/27/1701065858496.html
欢迎各路大侠指点留痕: