MySQL如何收敛数据?
天蓬老师
天蓬老师 2017-04-17 14:22:39
[MySQL讨论组]

我有一个表,记录1024个IP的带宽、HTTP请求数及时间戳,记录间隔是秒,即每秒钟会收集这1024个IP的数据然后入到数据库里。
根据业务需求,每秒钟的数据保留1天(计算得出数据量为 8847万条),1-7天之前的数据,保留1分钟精度,超过7天的,保留5分钟精度。

算法为:
1-7天:计算1分钟里的 最大带宽值 作为这分钟的带宽,计算1分钟里 请求数的和 作为这分钟的请求数
超过7天:算法同上,时间跨度改为5分钟

我只想到两个方案:
1) 每天定时执行,计算后写入新的表,然后删除过期数据。但每天计算 8847 万条数据,担心数据库的性能问题,而且这个MySQL语句似乎挺复杂(不太懂数据库)。
2) 增加Redis作为缓存,每分钟和每五分钟执行一次,按算法算出值后,写入每分钟和每五分钟的数值到MySQL里。然后定时清理每秒的数据即可。

不知道哪个方案比较好。或者MySQL有更好的方案可以自动实现数据的整理?

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(2)
黄舟

为什么不用rrd

PHPz

额。一般使用第一种。

可以这样,估计下大概数据量,先写比如5分钟到内存表,然后计算并保存需要的值,之后该写数据写数据。

就看你的io够不够。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号