准备两个表,一个存储原始数据,另一个存储每5分钟归总一次的数据。之后根据时间段绘制省份运营商性能图的时候,就直接从汇总表里获取数据;原始表留给详细查询。
数据库准备脚本如下:
```mysqlUSE myops;
CREATE TABLE IF NOT EXISTS cdn_ori_record (
id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
ip INT(10) NOT NULL DEFAULT ‘0000000000’,
isp ENUM(‘0’,’1’,’2’,’3’,’4’),
area INT(4) NOT NULL DEFAULT ‘0000’,
cur_date TIMESTAMP DEFAULT NOW(),
cdn_time INT(10) NOT NULL DEFAULT ‘0’,
cdn ENUM(‘CHINACACHE’,’DNION’,’FASTWEB’) NOT NULL,
KEY time_key (cur_date)
);

CREATE TABLE IF NOT EXISTS cdn_cron_record (
id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
isp TINYINT(1) NOT NULL DEFAULT ‘0’,
area INT(4) NOT NULL DEFAULT ‘0000’,
cur_date TIMESTAMP DEFAULT NOW(),
cdn ENUM(‘CHINACACHE’,’DNION’,’FASTWEB’) NOT NULL,
avg_time INT(10) NOT NULL DEFAULT ‘0’,
KEY time_area_isp_key (cur_date, area, isp)
);

DELIMITER |
DROP PROCEDURE IF EXISTS cdn_cron |
CREATE PROCEDURE cdn_cron()
BEGIN
INSERT INTO cdn_cron_record(isp,area,cdn,avg_time)
SELECT isp,area,cdn,AVG(cdn_time) FROM cdn_ori_record
WHERE cur_date > FROM_UNIXTIME(UNIX_TIMESTAMP()-300)
GROUP BY cdn,area,isp;
END |
DELIMITER ;

SET GLOBAL event_scheduler = 1;
CREATE EVENT IF NOT EXISTS event_cdn ON SCHEDULE EVERY 300 SECOND ON COMPLETION PRESERVE DO CALL cdn_cron();
ALTER EVENT event_cdn ON COMPLETION PRESERVE ENABLE;
```