【愚公系列】2022年04月 .NET架构班 038-分布式中间件 ShardingSphere-Proxy之分库分表算法
【摘要】 一、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)