每期一个小窍门(003): mycat实现单库按月分表 (可以跨年)

Posted 李昊轩的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每期一个小窍门(003): mycat实现单库按月分表 (可以跨年)相关的知识,希望对你有一定的参考价值。

在这一期的小窍门里, 分享一个简单好用的分库小中间件, mycat

rules.xml (请增量式的修改, 不建议随意删除自带算法)

这里声明了算法的监控字段, 注意这个sBeginDate, 要和后面配置文件的相对应, 不能早于或者晚于

<?xml version="1.0" encoding="UTF-8"?>
<!-- - - Licensed under the Apache License, Version 2.0 (the "License"); 
	- you may not use this file except in compliance with the License. - You 
	may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 
	- - Unless required by applicable law or agreed to in writing, software - 
	distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT 
	WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the 
	License for the specific language governing permissions and - limitations 
	under the License. -->
<!DOCTYPE mycat:rule SYSTEM "rule.dtd">
<mycat:rule xmlns:mycat="http://io.mycat/">

	<tableRule name="sharding-by-month">	
		<rule>
			<columns>gtDate</columns>
			<algorithm>partbymonth</algorithm>
		</rule>
	</tableRule>

	<function name="partbymonth"
		class="io.mycat.route.function.PartitionByMonth">
		<property name="dateFormat">yyyy-MM-dd</property>
		<property name="sBeginDate">2021-10-01</property>
		<!-- <property name="sEndDate">2022-4-30</property> -->
	</function>
	
</mycat:rule>

schema.xml

这里定义了 表/库 是如何路由的.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">


<mycat:schema xmlns:mycat="http://io.mycat/">

        <schema name="saas_logical_db" checkSQLschema="false" sqlMaxLimit="100">
            <table name="gpsmessage" subTables="gpsmessage_2021$10-12,gpsmessage_2022$01-04" dataNode="dn1" rule="sharding-by-month" />
          
        </schema>

         <dataNode name="dn1" dataHost="dataHost01" database="testdb"/>

        <dataHost name="dataHost01" maxCon="1000" minCon="10" balance="0"
                writeType="0" dbType="mysql" dbDriver="native">
                <heartbeat>select 1</heartbeat>
                <writeHost host="hostM1" url="127.0.0.1:3306" user="root" password="123456"/>
        </dataHost>
    
</mycat:schema>

表创建语句, 大家可以换成自己的表

create table testdb.gpsmessage_2021+(月份, 单位数月份不要加0前缀 例如1而不是01)
(
    id           bigint(18)     not null,
    deviceNo     varchar(26)    null,
    longitude    decimal(20, 8) null,
    latitude     decimal(20, 8) null,
    speed        int(5)         null,
    direction    int(5)         null,
    gtDate       datetime       null,
    createDate   datetime       null,
    uploadDate   datetime       null,
    provider     varchar(20)    null,
    rawLongitude decimal(20, 8) null,
    rawLatitude  decimal(20, 8) null,
    gpsId        varchar(50)    null,
    inputDate    datetime       null,
    constraint GPSMessage_id_uindex
        unique (id)
);

alter table testdb.gpsmessage_202113
    add primary key (id);


以上是关于每期一个小窍门(003): mycat实现单库按月分表 (可以跨年)的主要内容,如果未能解决你的问题,请参考以下文章

每期一个小窍门(003) 关闭selinux 和 swap

每期一个小窍门: k8s容器亲和性的小例子

每期一个小窍门: k8s容器亲和性的小例子

每期一个小窍门: k8s容器亲和性的小例子

每期一个小窍门(001): 一个简单优雅的redis 工具类 (最简单版本)

每期一个小窍门(001): 一个简单优雅的redis 工具类 (最简单版本)