总结:ShardingSphere-Proxy5 分片算法-时间范围分片

优采云 发布时间: 2022-10-12 00:41

  总结:ShardingSphere-Proxy5 分片算法-时间范围分片

  ShardingSphere-Proxy5分片算法

  ShardingSphere 提供了多种内置的分片算法,根据类型可分为自动分片算法、标准分片算法、复合分片算法和提示分片算法。同时,也提供了针对复杂服务自定义分片算法的方式。

  自动分片算法 模分片算法 自动时间段分片算法 基于分片容量的范围分片算法 基于分片边界标准分片算法的范围分片算法

  Apache ShardingSphere 内置的标准分片算法实现类包括:

  行表达式切片算法

  使用 Groovy 表达式,它提供对 SQL 语句中 = 和 IN 的分片操作的支持,并且仅支持单个 shard key。对于简单的分片算法,可以通过简单的配置使用,避免繁琐的Java代码开发,如:t_user_$->{u_id % 8}表示t_user表按照u_id取模8分为8张表,表名是 t_user_0 到 t_user_7。有关详细信息,请参阅行表达式。

  时间范围切片算法

  该算法主动忽略了 datetime-pattern 的时区信息。这意味着当 datetime-lower、datetime-upper 和传入的 shard key 收录时区信息时,不会因为时区不一致而发生时区转换。当传入的sharding key为java.time.Instant时,有一种特殊情况,会携带系统的时区信息,转换成datetime-pattern的字符串格式,然后进行下一个sharding。

  创建数据源

  修改config-sharding.yaml文件添加数据源配置

  databaseName: sharding_db ##逻辑库

dataSources: ## 数据源,连接真实物理库,注意物理库必须有相应的库存在,负责proxy无法启动。

ds_0:

url: jdbc:mysql://127.0.0.1:13307/demo_ds_0?serverTimezone=UTC&useSSL=false

username: root

password: sunday

connectionTimeoutMilliseconds: 30000

idleTimeoutMilliseconds: 60000

maxLifetimeMilliseconds: 1800000

maxPoolSize: 50

minPoolSize: 1

ds_1:

url: jdbc:mysql://127.0.0.1:3306/demo_ds_1?serverTimezone=UTC&useSSL=false

username: root

password: sunday

connectionTimeoutMilliseconds: 30000

idleTimeoutMilliseconds: 60000

maxLifetimeMilliseconds: 1800000

maxPoolSize: 50

minPoolSize: 1

  配置分片规则

  继续修改config-sharding.yaml文件添加数据分片规则

   alg_interval:

type: INTERVAL

props:

datetime-pattern: "yyyyMM" # 分片字段格式

datetime-lower: "202201" # 范围下限

datetime-upper: "202206" # 范围上限

<p>

sharding-suffix-pattern: "yyyyMM" # 分片名后缀,可以是MM,yyyyMMdd等。

datetime-interval-amount: 1 # 分片间隔,这里指一个月

datetime-interval-unit: "MONTHS" # 分片间隔单位

</p>

  完整档案

  databaseName: sharding_db

dataSources: ## 数据源,连接真实物理库,注意物理库必须有相应的库存在,负责proxy无法启动。

ds_0:

url: jdbc:mysql://127.0.0.1:13307/demo_ds_0?serverTimezone=UTC&useSSL=false

username: root

password: sunday

connectionTimeoutMilliseconds: 30000

idleTimeoutMilliseconds: 60000

maxLifetimeMilliseconds: 1800000

maxPoolSize: 50

minPoolSize: 1

ds_1:

url: jdbc:mysql://127.0.0.1:3306/demo_ds_1?serverTimezone=UTC&useSSL=false

username: root

password: sunday

connectionTimeoutMilliseconds: 30000

idleTimeoutMilliseconds: 60000

maxLifetimeMilliseconds: 1800000

maxPoolSize: 50

minPoolSize: 1

## 分片规则配置

rules:

- !SHARDING

tables:

t_order_interval: # 分片表

actualDataNodes: ds_${0..1}.t_order_interval${202201..202206}

databaseStrategy: # 分库规则

standard: # 标准类型分片,目前官方有四种分片类型

shardingColumn: user_id

shardingAlgorithmName: alg_mod # 算法名称

tableStrategy: # 分表规则

standard:

shardingColumn: data_year_month

shardingAlgorithmName: alg_interval # 算法名称,具体使用哪一种算法下面会根据算法名称配置

keyGenerateStrategy: # 主键生成规则

<p>

column: id

keyGeneratorName: snowflake

keyGenerators: # 主键生成规则配置

snowflake:

type: SNOWFLAKE

shardingAlgorithms: # 分片算法配置,根据上面的算法名称配置算法的类型和算法接收的参数

alg_mod:

type: MOD

props:

sharding-count: 2

alg_interval:

type: INTERVAL

props:

datetime-pattern: "yyyyMM" # 分片字段格式

datetime-lower: "202201" # 范围下限

datetime-upper: "202206" # 范围上限

sharding-suffix-pattern: "yyyyMM" # 分片名后缀,可以是MM,yyyyMMdd等。

datetime-interval-amount: 1 # 分片间隔,这里指一个月

datetime-interval-unit: "MONTHS" # 分片间隔单位

</p>

  连接代理创建分片表

  配置分片表后,不会生成对应的分片表。您需要连接到 sharding-proxy 并在代理中执行建表语句。创建逻辑表时,分表会由代理根据配置​​的规则自动创建。

  CREATE TABLE `t_order_interval` (

`id` bigint(20) NOT NULL AUTO_INCREMENT,

`order_no` varchar(30) DEFAULT NULL,

`user_id` bigint(20) DEFAULT NULL,

`amount` decimal(10,2) DEFAULT NULL,

`data_year_month` varchar(125) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=779468255126355969 DEFAULT CHARSET=utf8mb4;

  插入测试数据

  INSERT INTO `sharding_db`.`t_order_interval`(`id`, `order_no`, `user_id`, `amount`) VALUES (779468213359476737, &#39;22&#39;, 22, 22.00, "202204");

INSERT INTO `sharding_db`.`t_order_interval`(`id`, `order_no`, `user_id`, `amount`) VALUES (779468285585391617, &#39;44&#39;, 44, 44.00, "202203");

INSERT INTO `sharding_db`.`t_order_interval`(`id`, `order_no`, `user_id`, `amount`) VALUES (779468168534949888, &#39;11&#39;, 11, 11.00, "202202");

INSERT INTO `sharding_db`.`t_order_interval`(`id`, `order_no`, `user_id`, `amount`) VALUES (779468255126355968, &#39;33&#39;, 33, 33.00, "202201");

  插入后,观察物理数据库的表数据存储。

  工作经验:5118出品,SEO老司机,15年实操经验总结

  5118,国内知名的站长平台之一,我一天去几次。

  前段时间官方放出了几张作战地图,每一张真的都是干货满满,而这只是其中一张。

  它是存放在新闻箱底部的个人物品之一,供大家一起学习。

  技巧主动提交死链接提交--XENU扫描--及时删除链接--主动提交站长后台网站修改:1.链接301跳转。2.站长后台封站保护。3. 检查日志以确保它是正确的。4.死链多层扫描。是否允许索引: 1. robots.txt。2.元。3.http头。4.html。

  

  搜索引擎排名 核心可访问性指标 用户行为指标 访问用户数及粘性监测 搜索引擎转化监测 流量监测 流量关键词SEO结果监测

  页面和内容关键词目标和类型次要核心词命中如何产生内容原创源爬虫无法索引新媒体首次捕获采集伪原创结构和设计内部等级制度

  安全可及性外部因素:DNSCDN 机房/数据中心速度测量和监控工具

  点击“扩展链接”下载

  思维导图总结

  

  ●SEO运营图--百度算法大全

  ●百度小程序开发者操作技能知识图谱1.0

  ●2019天猫电商双十一战图(包括京东、苏宁及往年)

  ●主流编程语言总结思维导图

  ●短视频从业者必备指南2.0(从创造到盈利)

  ●思维导图 | 好好说话,不要涉足区块链

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线