package io.mycat.route.function; /** * Latest one month data partions ,only reserve data of latest 31 days and one * day is partioned into N slide (splitOneDay), so total datanode is M*N table's * partion column must be int type and it's value format should be yyyyMMddHH * fomat for example colmn=2014050115 means: 15 clock of april 5 ,2014 * * @author wuzhih * */ public class LatestMonthPartion extends AbstractPartitionAlgorithm { private int splitOneDay = 24; private int hourSpan; private String[] dataNodes; public String[] getDataNodes() { return dataNodes; } /** * @param dataNodeExpression */ public void setSplitOneDay(int split) { splitOneDay = split; hourSpan = 24 / splitOneDay; if (hourSpan * 24 < 24) { throw new java.lang.IllegalArgumentException( "invalid splitOnDay param:" + splitOneDay + " should be an even number and less or equals than 24"); } } @Override public Integer calculate(String columnValue) { int valueLen = columnValue.length(); int day = Integer.valueOf(columnValue.substring(valueLen - 4, valueLen - 2)); int hour = Integer.valueOf(columnValue.substring(valueLen - 2)); return (day - 1) * splitOneDay + hour / hourSpan; } public Integer[] calculateRange(String beginValue, String endValue) { return calculateSequenceRange(this,beginValue, endValue); } }