zoukankan      html  css  js  c++  java
  • sharding-jdbc—分片策略(总)

    一、分片策略

    Sharding-JDBC认为对于分片策略存有两种维度:

    • 数据源分片策略(DatabaseShardingStrategy):数据被分配的目标数据源
    • 表分片策略(TableShardingStrategy):数据被分配的目标表

    两种分片策略API完全相同,但是表分片策略是依赖于数据源分片策略的(即:先分库然后才有分表)

    二、分片算法

    Sharding分片策略继承自ShardingStrategy,提供了5种分片策略:

      

    由于分片算法和业务实现紧密相关,因此Sharding-JDBC并未提供内置分片算法,而是通过分片策略将各种场景提炼出来,提供更高层级的抽象,并提供接口让应用开发者自行实现分片算法。

    StandardShardingStrategy

    标准分片策略。提供对SQL语句中的=, IN和BETWEEN AND的分片操作支持。

    StandardShardingStrategy只支持单分片键,提供PreciseShardingAlgorithm和RangeShardingAlgorithm两个分片算法。

    • PreciseShardingAlgorithm是必选的,用于处理=和IN的分片。
    • RangeShardingAlgorithm是可选的,用于处理BETWEEN AND分片,如果不配置RangeShardingAlgorithm,SQL中的BETWEEN AND将按照全库路由处理。

    ComplexShardingStrategy

    复合分片策略。提供对SQL语句中的=, IN和BETWEEN AND的分片操作支持。

    ComplexShardingStrategy支持多分片键,由于多分片键之间的关系复杂,因此Sharding-JDBC并未做过多的封装,而是直接将分片键值组合以及分片操作符交于算法接口,完全由应用开发者实现,提供最大的灵活度。

    InlineShardingStrategy

    Inline表达式分片策略。使用Groovy的Inline表达式,提供对SQL语句中的=和IN的分片操作支持。

    InlineShardingStrategy只支持单分片键,对于简单的分片算法,可以通过简单的配置使用,从而避免繁琐的Java代码开发,如: t_user${id % 8} 表示t_user表按照user_id按8取模分成8个表,表名称为t_user_0到t_user_7。

    HintShardingStrategy

    通过Hint而非SQL解析的方式分片的策略。

    NoneShardingStrategy

    不分片的策略。

    三、自定义分片算法

    Sharding提供了以下4种算法接口:

    • PreciseShardingAlgorithm
    • RangeShardingAlgorithm
    • HintShardingAlgorithm
    • ComplexKeysShardingAlgorithm

    可以自己实现自定义的分片算法,

  • 相关阅读:
    PHP中有多态么
    【Android】九宫格实现
    采用xshell链路本地虚拟机Linux
    读取资源文件的工具.
    dede织梦背景经常使用标签
    PHP第三个教训 PHP基本数据类型
    Linux经常使用的命令(必看)
    易Android登录Demo
    [2013山东ACM]省赛 The number of steps (可能DP,数学期望)
    web开发性能优化---UI接口章
  • 原文地址:https://www.cnblogs.com/h-z-y/p/14298209.html
Copyright © 2011-2022 走看看