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天前
|
机器学习/深度学习 算法
应用规则学习算法识别有毒的蘑菇
应用规则学习算法识别有毒的蘑菇
|
2天前
|
数据采集 机器学习/深度学习 算法
数据分享|WEKA关联规则挖掘Apriori算法在学生就业数据中的应用
数据分享|WEKA关联规则挖掘Apriori算法在学生就业数据中的应用
|
2天前
|
机器学习/深度学习 算法 数据挖掘
【Python机器学习专栏】关联规则学习:Apriori算法详解
【4月更文挑战第30天】Apriori算法是一种用于关联规则学习的经典算法,尤其适用于购物篮分析,以发现商品间的购买关联。该算法基于支持度和置信度指标,通过迭代生成频繁项集并提取满足阈值的规则。Python中可借助mlxtend库实现Apriori,例如处理购物篮数据,设置支持度和置信度阈值,找出相关规则。
|
2天前
|
数据可视化 算法
R语言Apriori算法关联规则对中药用药复方配伍规律药方挖掘可视化(下)
R语言Apriori算法关联规则对中药用药复方配伍规律药方挖掘可视化(下)
|
2天前
|
算法 数据可视化 网络可视化
R语言Apriori算法关联规则对中药用药复方配伍规律药方挖掘可视化(上)
R语言Apriori算法关联规则对中药用药复方配伍规律药方挖掘可视化
R语言Apriori算法关联规则对中药用药复方配伍规律药方挖掘可视化(上)
|
2天前
|
数据采集 存储 算法
数据分享|Weka数据挖掘Apriori关联规则算法分析用户网购数据
数据分享|Weka数据挖掘Apriori关联规则算法分析用户网购数据
|
2天前
|
数据采集 算法 安全
数据分享|R语言关联规则挖掘apriori算法挖掘评估汽车性能数据
数据分享|R语言关联规则挖掘apriori算法挖掘评估汽车性能数据
|
2天前
|
移动开发 算法 数据可视化
数据分享|Spss Modeler关联规则Apriori模型、Carma算法分析超市顾客购买商品数据挖掘实例
数据分享|Spss Modeler关联规则Apriori模型、Carma算法分析超市顾客购买商品数据挖掘实例
|
2天前
|
算法 数据可视化 搜索推荐
数据分享|Python用Apriori算法关联规则分析亚马逊购买书籍关联推荐客户和网络图可视化
数据分享|Python用Apriori算法关联规则分析亚马逊购买书籍关联推荐客户和网络图可视化
|
2天前
|
算法 数据可视化 数据挖掘
【视频】关联规则模型、Apriori算法及R语言挖掘商店交易数据与交互可视化|数据分享
【视频】关联规则模型、Apriori算法及R语言挖掘商店交易数据与交互可视化|数据分享