MyCat - 分片 - 分片规则 - 日期时间相关分片算法 | 学习笔记

简介: 快速学习 MyCat - 分片 - 分片规则 - 日期时间相关分片算法

开发者学堂课程【全面讲解开源数据库中间件MyCat使用及原理(二):MyCat - 分片 - 分片规则 - 日期时间相关分片算法】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/756/detail/13275


MyCat - 分片 - 分片规则 - 日期时间相关分片算法

内容介绍:

一、日期分片算法

二、单月小时算法

三、自然月分片算法

四、日期范围 hash 算法

 

一、日期分片算法

1、按照日期来分片

日期时间相关的分片算法。首先第一个日期分片算法,日期分片算法顾名思义,就是按照日期来进行分片。分片规则配置,要来指定按照哪一个字段进行分片,然后再指定分片算法。

<tableRu1e name="sharding-by-date">

<rule>

<columns>create time</columns>

<algorithm>sharding-by-date</algorithm>

</rule>

</tableRule>

下面是分片算法的一个处理类 PartitionByDate,主要来看一下里面的四个属性。这里面有四个属性,第一个 dataFormat,指的是日期的格式,接下来是 sBeginDate 和 sEndDate,这两个分别指的是日期的开始时间和日期的结束时间,接下来还有最后一个  sPartionDate,10 指的是多长时间或几天来做一个分片,所以他指的是从 2020 年 1 月 1 号到 2020 年 12 月 31 号,每十天为一个分片。

<function name="sharding-by-date"class="io. mycat. route. function. Partitionbydate">

<property name="dateFormat">yyyy-MM-dd</property>

<property name="sBeginDate">2020-01-01</property>

<property name="sEndDate">2020-12-31</property>

<property name="sPartionDay">10</property>

</function>

这是日期分片算法。

2、配置说明:

属性       描述

columns   标识将要分片的表字段

algorithm  指定分片函数与 function 的对应关系

class       指定该分片算法对应的类

dateFormat 日期格式

sBeginDate 开始日期

sEndDate   结束日期,如果配置了结束日期,则代码数据到达了这个日期的分片后,会重复从开始分片插入

sPartionDay  分区天数,默认值 10,从开始日期算起,每个 10 天一个分区

注意:配置规则的表的 dataNode 的分片,必须和分片规划数量一致,例如 2020-01-01 到 2020-12-31,每 10 天一个分片,一共需要 37 个分片。

 

二、单月小时算法

单月小时算法指的是在一个月内按照小时拆分,最小的力度是小时,一天最多可以有 24 个分片,最小一个分片。最小一个分片就是,将这行代码(<property name="sPlitOneDay">24</property>中的数字 24 设置为 1,代表的就是 24小时为一个分片。下个月从头开始循环,每个月末需要手动清理数据。

1、分片规则的配置

<tableRule name="sharding-by-hour">

<rule>

<columns>create time</columns>

<algorithm>sharding-by-hour</algorithm>

</rule>

</tableRule>

<function name="sharding-by-hour"class="io. mycat. route. function.LatestMonthPartion">

<property name="split0neDay">24</property>

</function>

首先指定分片字段,根据 create_time 进行分片,在指定分片的算法 sharding-by-hour,下面需要指定分片的处理类,还有一个叫做 splitoneday,one day 是一天,Split 是分割,也就是说一天分割为多少片,24 片代表一小时几片。

 

三、自然月分片算法

自然月分片算法指的就是按月分片,使用场景就是按月份分片,每个自然月为一个分片。比如有些系统当中订单的数据量比较大,他会把每一个月的订单存放在一张表中,这个时候就可以使用自然月分片算法。

1、自然月分片算法配置

<tableRule name="sharding-by-month">

<rule>

<columns>create- time</columns>

<algorithm>sharding-by-month</algorithm>

</rule>

</tableRule>

对于自然月分片算法的配置再来看一下,第一个 create- time 分片字段,第二个 sharding-by-month 分片算法。主要来看下面的属性,第一个 dataFormat 指的是日期的格式,还有一个 sBeginData 和 sEndData 这两个分别指定的是开始时间和结束时间。他的意思也就是说,在这个时间范围内,每个月都会生成一个分片,这就是它的含义。

<function name="sharding-by-month"class="io. mycat. route. function. Partition ByMonth">

<property name="dateFormat">yyyy-MM-dd</property>

<property name="sBeginDate">2020-01-01</property>

<property name="sEndDate">2020-12-31</property>

</function>

 

四、日期范围 hash 算法

日期范围 hash 算法和范围求模算法比较类似,他也是先按照日期进行范围分片求出分片组,再根据日期时间直接进行 hash 算法,再进行分片组类均匀分布。它的优点是可以避免扩容时的数据迁移,又可以一定程度上避免范围分片的热点问题。

注意:要求日期格式尽量精确些,不然达不到局部均匀的目的。

1、日期范围 hash 算法配置

<tableRule name="range-date-hash">

<rule>

<columns>create- time</columns>

<algorithm>range-date-hash</algorithm>

</rule>

</tableRule>

第一个 create_time 指定分片字段,range-date-hash 指定分片算法。下面是分片函数的处理类,yyyy-MM-dd HH:mm:ss 是时间格式,时间格式是什么样的以及从每个时间点开始进行分片,从 2020-01-01 00:00:00 这个时间点进行分片。接下来还有一个叫做 groupPartionSize,它指的是分片组的大小,也就是说会将 2020-01-01 00:00:00 这个时间段之后要进行一个分片组,一共有 6 个组,接下来还有一个叫 sPartionDay,这个指的是具体多少天为一组,也就是说 10 他为一组,一共有 6 组,持续的时间为 60 天。

<function name="range-date-hash"class="io. mycat. route. function.PartitionByRangeDateHash">

<property name="dateFormat">yyyy-MM-dd HH:mm:ss</property>

<property name="sBeginDate">2020-01-01 00:00:00</property>

<property name="groupPartionSize">6</property>

<property name="sPartionDay">10</property>

</function>

当我们插入一条数据的时候,他先会根据时间以及分片组的大小,以及每一个分片所占用的天数计算出当前这个时间,应该归属于哪一个分片组。然后再根据时间的hash 算法,将这条记录再插入到分片组当中的某一个分片,这就是日期范围 hash 算法的含义。

2、配置说明:

属性               描述

Columns           标识将要分片的表字段

Algorithm          指定分片函数与 function 的对应关系

class               指定该分片算法对应的类

dateFormat         日期格式,符合 Java 标准

sBeginDate         开始日期 ,与 dateFormat 指定的格式一致

groupPartionS ize   每组的分片数量

spartion pay        代表多少天为一组

相关文章
|
2月前
|
存储 算法 安全
【云计算与大数据技术】数据分片哈希算法、路由算法、复制算法的讲解(图文解释 超详细)
【云计算与大数据技术】数据分片哈希算法、路由算法、复制算法的讲解(图文解释 超详细)
45 0
|
3月前
|
机器学习/深度学习 自然语言处理 算法
Python预测 数据分析与算法 学习笔记(特征工程、时间序列)2
Python预测 数据分析与算法 学习笔记(特征工程、时间序列)
55 0
|
3月前
|
机器学习/深度学习 算法 数据可视化
Python预测 数据分析与算法 学习笔记(特征工程、时间序列)1
Python预测 数据分析与算法 学习笔记(特征工程、时间序列)
61 0
|
4月前
|
算法
29MyCat - 分片规则(固定分片hash算法)
29MyCat - 分片规则(固定分片hash算法)
19 0
|
5月前
|
存储 算法 关系型数据库
|
2天前
|
算法 物联网 定位技术
基于WIFI指纹的室内定位算法matlab仿真
基于WIFI指纹的室内定位算法matlab仿真
|
4天前
|
编解码 算法
m基于码率兼容打孔LDPC码nms最小和译码算法的LDPC编译码matlab误码率仿真
m基于码率兼容打孔LDPC码nms最小和译码算法的LDPC编译码matlab误码率仿真
9 0