I';m使用MySQL表记录用户数据(1000新行/分钟)。2天后如何旋转行?

I';m使用MySQL表记录用户数据(1000新行/分钟)。2天后如何旋转行?,mysql,database,database-design,innodb,Mysql,Database,Database Design,Innodb,举个例子,假设我有一个站点,用户可以在其中添加无限的cron作业(频率为1),我将每个作业的结果记录在一个Mysql表中 现在,由于我没有无限的存储空间(也因为我不希望我的表变得太大),我想将日志历史记录限制为仅持续30天 在以前的Mysql版本中,我在

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

现在,由于我没有无限的存储空间(也因为我不希望我的表变得太大),我想将日志历史记录限制为仅持续30天

在以前的Mysql版本中,我在创建日志时运行
DELETE来清理我的表,但这会导致我的表经常崩溃和损坏。在
DELETE
过程中,它还会锁定我的表,这会使网站运行非常缓慢


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

您可以使用数据库分区

范例

PARTITION BY HASH( MONTH(column) )
这将提供7个分区。然后你可以简单地

ALTER TABLE t1 TRUNCATE PARTITION p0;

删除单个分区

讨论了使用
按范围划分
作为“删除”旧数据的非常有效的方法。它解释了如何执行
删除分区
(这比
截断
更有效)并每天或每周创建一个新分区。

您好,我如何使用此功能删除超过30天的日志?看到链接页面后,我想我可以这样做:
通过HASH(MONTH(created_at))
创建表日志(…)分区,然后删除前一个月?是的,这是正确的。您希望能够快速删除的任何值也需要指出,如果您在2号删除一个月的事务,您将只有2天的数据。这样你可能需要保持2个月的tp。您可以每周执行一次,最多保存5周的数据,以确保30天的
哈希
不会执行任何分区修剪,因此这是无效的。@RickJames能否请您详细说明一下?它能以每分钟1000行的速度插入吗?如果在我开始实施之前有什么需要注意的,我将不胜感激。。谢谢Cron作业每秒运行一次?用户可以把任何他想要的东西放进去?这听起来像是一场即将发生的灾难;这将消除腐败。