第4章:分库分表常见中间件介绍和ShardingSphere极速认知

ShardingSphere核心组件与分片算法详解

分库分表常见中间件介绍

  1. Cobar(被淘汰了)
  2. TDDL:淘宝根据自己的业务特点开发了TDDL,基于JDBC规范,没有server,以client-jar的形式存在,引入项目即可使用。开源功能较少,阿里内部使用为主。
  3. Mycat:地址http://www.mycat.org.cn/,java语言编写的Mysql数据库网络协议的开源中间件,前身是Cobar,遵守Mysql原生协议,跨语言,跨平台,跨数据库的通用中间件代理。是基于Proxy,它复写了Mysql协议,将Mycat Server伪装成了一个Mysql数据库。和ShardingShere下的Sharding-Proxy作用类似,需要单独部署。
  4. ShardingSphere下的Sharding-JDBC,地址:https://shardingsphere.apache.org/。Apach下的一套开源的分布式数据库中间件解决方案组成的生态圈,由Sharding-JDBC,Sharding-Proxy,Sharding-Sidecar 3个产品组成。Sharing-JDBC基于jdbc驱动,不需要额外的proxy,支持任意实现JDBC规范的数据库,它使用客户端直接连接数据库,以jar包形式提供服务,无需要额外部署和依赖,可以理解为加强帮JDBC驱动,兼容JDBC和各种ORM框架。

其中最被面试官问到是Mycat和Sharding-JDBC。

其两者都是相同的设计理念,SQL解析->SQL路由->SQL改写->结果归并。

Sharding-JDBC:

  1. 基于jdbc驱动,不用额外的proxy,在本地应用层重新jdbc原生的方法,实现数据库分片形式。
  2. 是基于jdbc接口的扩展,以jar包的形式提供轻量级服务的,性能高。
  3. 代码具有侵入性。

Mycat:

  1. 是基于Proxy,它复写了Mysql协议,将Mycat Server伪装成一个Mysql数据库。
  2. 客户端所有的jdbc请求都必须要先交给MyCat,再有MyCat转发到具体的真实服务器。
  3. 缺点是效率偏低,中间包装了一层。
  4. 代码没有侵入性。

ShardingSphere认知

Sharding-Sidecar:定位是云原生数据库代理,以Sidecar的形式代理使所有对数据库的访问,通过无中心,零代码侵入的方案提供与数据库交互的齿合层,即DataBase Mesh,由可称数据库网络。

ShardingSphere-JDBC:它是使用客户端直接连接数据库,以jar包形式提供服务,无需额外部署和依赖,可以理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架,适用任何第三方的数据库连接池,;支持任意实现JDBC规范的数据库,目前支持Mysql,PostgreSQL,Oracle,SQLServer以及任何可以使用JDBC访问的数据库。采用无中心化架构,与应用程序共享资源,适用于Java开发的高性能的轻量级OLTP应用。

ShardingSphere-Proxy:数据库代理端,提供封装了数据库二进制协议的服务端版本,用于完成对异构语言的支持。向应用程序完全透明,可以直接当作Mysql/PostgreSQL。它可以使用任意兼容Mysql/PostgreSql。它可以使用任何兼容Mysql/PostgreSQL协议的访问客户端操作数据。

三大组件对比:

ShardingSphere-JDBC

ShardingSphere-Proxy

Sharding-Sidecar

数据库

任意

Mysql/PostgreSQL

Mysql/PostgreSQL

连接消耗数

异构语言

仅JAVA

任意

任意

性能

损耗低

损耗偏高

损耗低

无中心化

静态入口

常见术语

数据节点Node:

数据分片的最小单元,由数据源名称和数据表组成。比如:ds_0.product_order_0。

真实表:

在分片的数据库中真实存在的物理表。比如:订单表product_order_0。

逻辑表:水平拆分的数据库(表)的相同逻辑和数据结构表的总称。比如订单表product_order_0,product_order_1等的逻辑表就是product_order。

绑定表:

指分片规则一致的主表和子表。比如product_order和product_order_item,均按照order_id分片,则此两张表互为绑定表关系。绑定表之间的多表关联查询不会出现笛卡尔积关联,关联查询效率将大大提升。

广播表:

指所有的分片数据源中都存在的表,表结构和表中数据在每个数据库中均完全一致。适用与数据量不大且需要海量数据的表进行关联查询的场景。例如:字典表,配置表。

Sharding-JDBC常见分片算法

数据库表分片(水平库,表):包含分片键和分片策略。

第4章:分库分表常见中间件介绍和ShardingSphere极速认知

分片键(PartitionKey):

用于分片的数据库字段,是将数据库(表)水平拆分的关键字段。比如product_order订单表,根据订单号out_trade_no做哈希取模,则out_trade_no是分片键,除了对单分片字段的支持,ShardingSpher也支持根据多个字段进行分片。

分片策略:

  1. 行表达式分片策略InlineShardingStrategy(必备):只支持单分片键使用的表达式,提供对SQL语句中的 = 和IN的分片操作支持。可以通过简单的配置使用,无需自定义分片算法,从而比避免繁琐的Java代码开发。
  2. 标准分片策略StandardShardingStrategy(需了解):只支持单分片键,提供PreciseShardingAlgorithm和RangeShardingAlgorithm两个分片算法。PreciseShardingAlgorithm范围分配是可选的,用于处理BETWEEN AND分片;如果不配置RangeShardingAlgorithm,如果SQL中用了BETWEEN AND语法,则将按照全库路由处理,性能下降。
  3. 复合分片策略ComplexShardingStrategy(需了解):支持多分片键,多分片键之间的关系复杂,由开发者自己实现,提供最大的灵活度。提供对SQL语句中的 =,IN和BETWEEN AND的分片操作支持,
  4. Hint分片策略HintShardingStrategy(需了解):这种分片策略无需配置分片键,分片键值也不再从SQL中解析,外部手动指定分片键或分片库,让SQL在指定分库分表中执行。用于处理使用Hint行分片的场景,通过Hint而非SQL解析的方式分片的策略。Hint策略会绕过SQL解析的,对于这些比较复杂的需要分片的查询,HInt分片策略性可能会更好。
  5. 不分片策略NoneShardingStrategy(需了解):不分片的策略。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值