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        代表多少天为一组

相关文章
|
6月前
|
算法 Java 数据库
美团面试:百亿级分片,如何设计基因算法?
40岁老架构师尼恩分享分库分表的基因算法设计,涵盖分片键选择、水平拆分策略及基因法优化查询效率等内容,助力面试者应对大厂技术面试,提高架构设计能力。
美团面试:百亿级分片,如何设计基因算法?
|
5月前
|
存储 编解码 负载均衡
数据分片算法
【10月更文挑战第25天】不同的数据分片算法适用于不同的应用场景和数据特点,在实际应用中,需要根据具体的业务需求、数据分布情况、系统性能要求等因素综合考虑,选择合适的数据分片算法,以实现数据的高效存储、查询和处理。
|
5月前
|
存储 缓存 算法
分布式缓存有哪些常用的数据分片算法?
【10月更文挑战第25天】在实际应用中,需要根据具体的业务需求、数据特征以及系统的可扩展性要求等因素综合考虑,选择合适的数据分片算法,以实现分布式缓存的高效运行和数据的合理分布。
|
6月前
|
算法 Java 数据库
美团面试:百亿级分片,如何设计基因算法?
40岁老架构师尼恩在读者群中分享了关于分库分表的基因算法设计,旨在帮助大家应对一线互联网企业的面试题。文章详细介绍了分库分表的背景、分片键的设计目标和建议,以及基因法的具体应用和优缺点。通过系统化的梳理,帮助读者提升架构、设计和开发水平,顺利通过面试。
美团面试:百亿级分片,如何设计基因算法?
|
7月前
|
算法 前端开发 机器人
一文了解分而治之和动态规则算法在前端中的应用
该文章详细介绍了分而治之策略和动态规划算法在前端开发中的应用,并通过具体的例子和LeetCode题目解析来说明这两种算法的特点及使用场景。
一文了解分而治之和动态规则算法在前端中的应用
|
8月前
|
数据可视化 算法 前端开发
基于python flask+pyecharts实现的中药数据可视化大屏,实现基于Apriori算法的药品功效关系的关联规则
本文介绍了一个基于Python Flask和Pyecharts实现的中药数据可视化大屏,该系统应用Apriori算法挖掘中药药材与功效之间的关联规则,为中医药学研究提供了数据支持和可视化分析工具。
251 2
|
9月前
|
数据采集 机器学习/深度学习 算法
Python基于Apriori关联规则算法实现商品零售购物篮分析
Python基于Apriori关联规则算法实现商品零售购物篮分析
|
10月前
|
机器学习/深度学习 算法 BI
机器学习笔记(一) 感知机算法 之 原理篇
机器学习笔记(一) 感知机算法 之 原理篇
|
10月前
|
存储 NoSQL 算法
Redis集群,集群的概念 三种主流分片方式1.哈希求余 一致性哈希算法:方案三:哈希槽分区算法问题一Redis集群是最多有16384个分片吗问题二:为什么是16384个,集群扩容:1.新的主节点
Redis集群,集群的概念 三种主流分片方式1.哈希求余 一致性哈希算法:方案三:哈希槽分区算法问题一Redis集群是最多有16384个分片吗问题二:为什么是16384个,集群扩容:1.新的主节点
|
10月前
|
机器学习/深度学习 算法 搜索推荐
【机器学习】Apriori算法在关联规则学习中的应用
【机器学习】Apriori算法在关联规则学习中的应用
159 0
下一篇
oss创建bucket