【愚公系列】2022年04月 .NET架构班 038-分布式中间件 ShardingSphere-Proxy之分库分表算法

举报
愚公搬代码 发表于 2022/04/05 19:06:21 2022/04/05
【摘要】 一、ShardingSphere-Proxy之分库分表算法# 3、创建客户端连接库schemaName: hmms#1、连接mysqldataSources: hmmsdatasources-0: url: jdbc:mysql://主机地址:端口号/hmms-0?serverTimezone=UTC&useSSL=false username: root passwo...

一、ShardingSphere-Proxy之分库分表算法

# 3、创建客户端连接库
schemaName: hmms

#1、连接mysql
dataSources:
  hmmsdatasources-0:
    url: jdbc:mysql://主机地址:端口号/hmms-0?serverTimezone=UTC&useSSL=false
    username: root
    password: 密码
    connectionTimeoutMilliseconds: 30000
    idleTimeoutMilliseconds: 60000
    maxLifetimeMilliseconds: 1800000
    maxPoolSize: 50
    minPoolSize: 1

  hmmsdatasources-1:
    url: jdbc:mysql://主机地址:端口号/hmms-1?serverTimezone=UTC&useSSL=false
    username: root
    password: 密码
    connectionTimeoutMilliseconds: 30000
    idleTimeoutMilliseconds: 60000
    maxLifetimeMilliseconds: 1800000
    maxPoolSize: 50
    minPoolSize: 1
    

# 2、分片规则
rules:
- !SHARDING
  tables:
    user:
      actualDataNodes: hmmsdatasources-${0..1}.user-${0..1}   
      tableStrategy:
        standard:
          shardingColumn: useid
          shardingAlgorithmName: use_MOD
      databaseStrategy:  #分库规则
          standard:
            shardingColumn: useid
            shardingAlgorithmName: use_MOD
      keyGenerateStrategy: 
        column: useid
        keyGeneratorName: snowflake
  shardingAlgorithms:
    use_MOD:
      type: MOD
      props:
        sharding-count: 2 
    use_HASH_MOD:
      type: HASH_MOD
      props:
        sharding-count: '2'
  keyGenerators: 
    snowflake: 
       type: SNOWFLAKE
       props: 
         worker-id: 123

1.取模算法

 shardingAlgorithms:  #分表算法
    use_MOD:  #取模算法
      type: MOD
      props:
        sharding-count: 2  #分表数据和分表的表达式必须是一致的

2.范围算法

  shardingAlgorithms:
    use_BOUNDARY_RANGE:
      type: BOUNDARY_RANGE
      props:
        sharding-ranges: 2,100  #多个节点是以逗号分割  [是根据分的表结合配置节点]

备注
分片键为:useid int类型,分表为3个表,

sharding-ranges: 2,100 是以2为节点,小于2的数据存到表0,2到99存到表1,100以上存到表3

3.容量算法

shardingAlgorithms:
	use_VOLUME_RANGE:
        type: VOLUME_RANGE
        props:
          range-lower: '20000000'  #最小值
          range-upper: '40000000'  #最大值
          # 分片的区间的数据的间隔
          sharding-volume: '20000000'

备注
最小值为2000万,也就是说表数据量小于等于2000万,最大数量为4000万,表与表的间隔为2000万,比如说分了两张表:

1-2000万       存到表0
2001万-4000万   存到表1

是根据分表的数量来定义最大值的
分了三张表,那最大值为6000万

3.HASH-CODE算法

如果分片键是字符串类型,需要这种算法分表

  shardingAlgorithms:
    use_HASH_MOD:
      type: HASH_MOD
      props:
        sharding-count: '2'  #分表数量,单引号必须要加

4.时间分表算法

shardingAlgorithms:
    use_AUTO_INTERVAL:
        type: AUTO_INTERVAL
        props:
          datetime-lower: '2020-01-01 23:59:59'
          datetime-upper: '2022-12-31 23:59:59'
          # 以1年度为单位进行划分
          sharding-seconds: '31536000'  
          # 以1个月为单位进行划分
          #sharding-seconds: '2678400'   
          # 以1天为单位进行划分
          #sharding-seconds: '86400'
 #设置的最大值必须和分多少表匹配才行,否者报错,找不到表

二、分布式ID(雪花算法)

SnowFlake 算法,是 Twitter 开源的分布式 id 生成算法。其核心思想就是:使用一个 64 bit 的 long 型的数字作为全局唯一 id。在分布式系统中的应用十分广泛,且ID 引入了时间戳,基本上保持自增的。
在这里插入图片描述
给大家举个例子吧,比如下面那个 64 bit 的 long 型数字:

第一个部分,是 1 个 bit:0,这个是无意义的。

第二个部分是 41 个 bit:表示的是时间戳。

第三个部分是 5 个 bit:表示的是机房 id,10001。

第四个部分是 5 个 bit:表示的是机器 id,1 1001。

第五个部分是 12 个 bit:表示的序号,就是某个机房某台机器上这一毫秒内同时生成的 id 的序号,0000 00000000。

ShardingSphere-Proxy使用分布式ID

# 3、创建客户端连接库
schemaName: hmms

#1、连接mysql
dataSources:
  hmmsdatasources-0:
    url: jdbc:mysql://localhost:3306/hmms?serverTimezone=UTC&useSSL=false
    username: root
    password: 1QAZ2WSX3EDC
    connectionTimeoutMilliseconds: 30000
    idleTimeoutMilliseconds: 60000
    maxLifetimeMilliseconds: 1800000
    maxPoolSize: 50
    minPoolSize: 1
    
# 2、分片规则
rules:
- !SHARDING
  tables:
    user:
      actualDataNodes: hmmsdatasources-0.user-${0..1}
      tableStrategy:
        standard:
          shardingColumn: id
          shardingAlgorithmName: use_HASH_MOD
      keyGenerateStrategy: 
        column: id
        keyGeneratorName: snowflake
  shardingAlgorithms:
    use_MOD:
      type: MOD
      props:
        sharding-count: 2 
    use_HASH_MOD:
      type: HASH_MOD
      props:
        sharding-count: '2'
  keyGenerators: 
    snowflake: 
       type: SNOWFLAKE
       props: 
         worker-id: 123
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。