首页 > 其他分享 >ShardingSphere的分片策略

ShardingSphere的分片策略

时间:2022-10-17 19:37:41浏览次数:49  
标签:运算 ShardingSphere 算法 分片 路由 策略

ShardingSphere的分片策略

本篇文章源码基于4.0.1版本

上篇文章我们说到ShardingSphere通过路由引擎根据路由规则获取数据节点,然后生成路由结果,具体路由策略在ShardingStrategy的实现类中体现,这篇文章就说说ShardingSphere的分片策略,分配策略可以通过工厂类ShardingStrategyFactory来创建实例,这一块的代码在sharding-core模块的sharding-core-common子模块中

分片策略的组成

分片策略由分片算法和分片键组成,分片算法对应是接口是ShardingAlgorithm,分片策略类中会调用分片算法来进行分片处理

复合分片策略

复合分片策略对应的实现类是ComplexShardingStrategy,由于表与表之间存在复杂的关系,ShardingSphere没有帮我们实现分片算法,而是提供ComplexKeysShardingAlgorithm接口,由我们来自定义实现复合分片的算法。

Hint分片策略

Hint分片策略对应的实现类是HintShardingStrategy,它是根据Hint进行路由,我们在讲强制路由的时候就使用的这种分片策略,它的doSharding()方法中调用了HintShardingAlgorithm的分片算法,一般我们会自定义HintShardingAlgorithm的实现类,通过 HintShardingStrategyConfiguration加载了HintShardingAlgorithm实例

行表达式分片策略

行表达式分片策略对应的实现类是InlineShardingStrategy,它是根据分片键和行表达式来进行分配,行表达式通过Groovy进行解析,

不分片策略

NoneShardingStrategy是不分片策略的实现类,方法中不执行任何的路由操作。

标准分片策略

标准分片策略对应的实现类是StandardShardingStrategy,它的成员变量有分配列shardingColumn,分片算法有精确匹配分片算法PreciseShardingAlgorithm和范围匹配分配算法RangeShardingAlgorithm两种

精确匹配分片算法

精确匹配分片算法对应的接口是PreciseShardingAlgorithm,主要处理的是分配键的in和等号的SQL语句,它作为一个接口,实现类有:

  1. 对数据库进行模运算分片算法PreciseModuloDatabaseShardingAlgorithm,根据分片值对2进行取模运算
  2. 对表进行模运算分片算法PreciseModuloTableShardingAlgorithm,根据分片值对4进行取模运算

范围匹配分配算法

范围匹配分配算法算法对应的接口是RangeShardingAlgorithm,它处理的是分片键为一定范围的语句,实现类同样有两个:

  1. 对数据库进行模运算分片算法RangeModuloDatabaseShardingAlgorithm,根据最小值和最大值的范围遍历,根据分片值对2进行取模运算
  2. 对表进行模运算分片算法RangeModuloTableShardingAlgorithm,根据最小值和最大值的范围遍历,根据分片值对4进行取模运算

总结

这篇文章我们讲了ShardingSphere的分片策略,具体有5种:复合分片策略、Hint分片策略、行表达式分片策略、不分片策略、标准分片策略,并对每种分配策略用到的分配算法进行了介绍。

❤️ 感谢大家

如果你觉得这篇内容对你挺有有帮助的话:

  1. 欢迎关注我❤️,点赞

    标签:运算,ShardingSphere,算法,分片,路由,策略
    From: https://blog.51cto.com/u_15460453/5763997

相关文章

  • k8s限制cpu和内存的策略
    1.概要最近发现一个服务cpu占用了100%,导致整个服务器崩溃的悲剧,我就想k8s如何能够限制cpu/内存等的时候了。研究了一下发现还真的可以,这篇做个记录2.POD级别2.1.配置d......
  • 【设计模式之策略模式】
    前言:最近在学习设计模式,简单工厂是接触的第一个模式,后来,就遇到了策略模式,策略模式真是有谋略啊!定义了算法家族,有了算法家族,再难的计算都不在话下了!!!今天,我们一起来学习策略......
  • LFM Oversea 每周策略晨报 2022-10-17
    盘面数据 国庆后上证指数下穿3000 点,随后迎来连续上涨,上周上证指数上涨1.57%,深证成指上涨3.18%,创业板指数上涨6.35%。上周A 股日均成交额6982亿元,较上周环比+......
  • MybatisPlus生成主键策略方法
    MybatisPlus生成主键策略方法全局id生成策略【因为是全局id所以不推荐】SpringBoot集成Mybatis-Plus在yaml配置文件中添加MP配置mybatis-plus:global-config:d......
  • 原来ShardingSphere也用雪花算法
    原来ShardingSphere也用雪花算法分布式主键的生成有很多实现方式,比如百度开源的UidGenerator、美团的Leaf、以及众所周知的雪花算法,而在分库分表的场景下,id要保证唯一性,分......
  • 一年节省 40%的技术成本:基于云服务的技术成本精细化运营策略
    降本增效是今年的主旋律,对于技术团队来说,最大的成本除了人力成本,就是我们的技术成本。这里的技术成本包括各种CDN、网络带宽、服务器、存储、云计算服务等。如果你是一个......
  • kibana查看日志报错:xx个分片有xx失效
    es报错信息"Causedby:java.lang.IllegalArgumentException:Thelengthof[message]fieldof[zLYN1oMBC4v59SJ-WNqm]docof[ifp-basic-lbs-pro_2022.10.14]indexh......
  • 【源码级】MyBatis缓存策略(一级和二级缓存)
    缓存就是内存中的数据,常常来自对数据库查询结果的保存。使用缓存,我们可以避免频繁的与数据库进行交互,进而提高响应速度MyBatis也提供了对缓存的支持,分为一级缓存和二级缓存,......
  • SPI机制在ShardingSphere中的应用
    SPI机制在ShardingSphere中的应用之前我们讲过一篇SPI机制在Skywalking中的应用,这篇我们说一说ShardingSphere又是如何使用SPI机制的Sql解析器Sql解析器的功能就是用来解......
  • 【源码级】MyBatis缓存策略
    缓存就是内存中的数据,常常来自对数据库查询结果的保存。使用缓存,我们可以避免频繁的与数据库进行交互,进而提高响应速度MyBatis也提供了对缓存的支持,分为一级缓存和二级缓存......