###由于上篇统计周期内数据的量的缺陷, 本文中稍做修改, 每个周期启动三个统计时间点, ##不会造成数据指标错乱,但是时延增加。两个方法自行衡量。
lastCheckTime 09:25:33 start ...
preKey:08
curKey:09
lastKey:10
lastCheckTime 10:25:33 提交08的数据 所以时延为两个周期
preKey:09
curKey:10
lastKey:11
lastCheckTime 11:25:33
preKey:10
curKey:11
lastKey:12
###1.1、启动初始化三个统计时间点
counterMap = new TreeMap();
//当前周期时间点
String cur=new SimpleDateFormat("yyyy-MM-dd HH:mm:00").format(new Date(lastCheckTime));
//前一个周期
String pre = new SimpleDateFormat("yyyy-MM-dd HH:mm:00").format(new Date(lastCheckTime-cycle*60*1000));
//下一个周期
String next = new SimpleDateFormat("yyyy-MM-dd HH:mm:00").format(new Date(lastCheckTime+cycle*60*1000));
counterMap.put(cur, new HashMap());
counterMap.put(pre, new HashMap());
counterMap.put(next, new HashMap());
System.out.println("启动了三个时间统计点" + pre+"," + cur+ ","+next);
###1.2、脏数据: 上一个周期之前, 下一个周期之后的数据判定为脏数据不处理
###1.3、格式化统计时间, 将数据存储到counterMap,
String stimeKey = stime.substring(0, 14); //yyyy-MM-dd HH:mm:
//此处用于测试减小周期, 格式化timeKey到分钟
String minStr = stime.substring(14,16);
int min = Integer.parseInt(minStr)/(cycle)*(cycle); //60
stimeKey = stimeKey + (min= cycle*countCycle){
//如果超过统计范围则对当前Map进行统计
return true;
}
###1.5、提交前一个周期数据, 添加下个周期的timeKey