我正在使用MySQL表来记录用户数据(1000行/分钟)。如何在2天后旋转行?

时间:2016-10-22 05:04:34

标签: mysql database database-design innodb

举个例子,假设我有一个网站,用户可以添加无限的cron作业(频率为1s),并在Mysql表中记录每个作业的结果。

既然我没有无限制的存储空间(也因为我不希望我的桌子变大)我想将日志历史记录限制为仅限30天。

以前在旧版本的Mysql上运行DELETE FROM logs where created_at < DATE_SUB(NOW(), INTERVAL 30 DAY)来清理我的表,但这会导致我的表经常崩溃并被破坏。它还会在DELETE期间锁定我的桌面,这会使网站变得非常慢。

无论如何,那么如何为我的Mysql表或行实现行旋转(如日志旋转)?删除行是我唯一的选择还是有其他选择?

2 个答案:

答案 0 :(得分:3)

您可以使用数据库分区

https://dev.mysql.com/doc/refman/5.7/en/partitioning-types.html

实施例

set

这给出了7个分区。那么你可以简单地

PARTITION BY HASH( MONTH(column) )

删除单个分区。

答案 1 :(得分:1)

This讨论了使用PARTITION BY RANGE作为一种非常有效的方式来删除&#34;旧数据。它解释了如何执行DROP PARTITION(效率高于TRUNCATE)并每天或每周创建一个新分区。