美文网首页
单库分表--用月份分片

单库分表--用月份分片

作者: 南风nanfeng | 来源:发表于2018-10-30 17:30 被阅读63次

    笔者有张大表,超过4亿数据,数据按时间递增,表中有个非空的时间字段,因此采用按照年月作为片键分表。

    1. 配置schema.xml

    <schema name="report_schema" checkSQLschema="false" sqlMaxLimit="100">
                    <table name="tbl_report" primaryKey="rec_id" dataNode="report_node" subTables="tbl_report_201409,tbl_report_20141$0-2,tbl_report_20150$1-9,tbl_report_20151$0-2,tbl_report_20160$1-9,tbl_report_20161$0-2,tbl_report_20170$1-9,tbl_report_20171$0-2,tbl_report_20180$1-9,tbl_report_20181$0-2" rule="sharding-by-date-report" />
            </schema>
            <dataNode name="report_node" dataHost="host180" database="report_his" />
            <dataHost name="host180" maxCon="1000" minCon="10" balance="0"  writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                    <heartbeat>select user()</heartbeat>
                    <writeHost host="hostM1" url="localhost:3306" user="root"  password="pass2017"></writeHost>
            </dataHost>
    </schema>
    

    注意,时间从2014-09开始至今(2018-10),有50个分表,subTables的写法请注意。亲测可用。笔者也曾经考虑按天分表,考虑的分表过多,subTables的写法复杂。

    2. 配置server.xml

     <user name="root">
        <property name="password">123456</property>
        <property name="schemas">report_schema</property>
     </user>
    

    注意,schemas对应schema.xml里的就可以了。

    3.配置rule.xml

    <function name="sharding-by-month-201409" class="io.mycat.route.function.PartitionByMonth">
        <property name="dateFormat">yyyy-MM-dd</property>
        <property name="sBeginDate">2014-09-01</property>    <!--开始日期,这里注意一定写成源数据的最小日期,也可以定义结束时间,默认是当前时间,因为按月分片,从这个时间点开始计算片键索引-->
    </function>
    
    <tableRule name="sharding-by-date-report">
        <rule>
            <columns>report_time</columns>
            <algorithm>sharding-by-month-201409</algorithm>
        </rule>
    </tableRule>
    
    

    相关文章

      网友评论

          本文标题:单库分表--用月份分片

          本文链接:https://www.haomeiwen.com/subject/dwewzftx.html