mysql - 我正在使用 MySQL 表来记录用户数据(1000 个新行/分钟)。如何在 2 天后轮换行?

标签 mysql database database-design innodb

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

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

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

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

最佳答案

您可以使用数据库分区

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

示例

PARTITION BY HASH( MONTH(column) )

这给出了 7 个分区。然后你可以简单地

ALTER TABLE t1 TRUNCATE PARTITION p0;

删除单个分区。

关于mysql - 我正在使用 MySQL 表来记录用户数据(1000 个新行/分钟)。如何在 2 天后轮换行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40188530/

相关文章:

mysql - 更新记录的同时从同一个表中选择更新的条件?

c# - Selenium点击按钮功能

java - 在方法内关闭数据库相关资源

mysql - 使用各方扮演的各种角色来实现 'party model' 的正确方法是什么?

database-design - 在数据库中存储位置信息的最佳方法是什么?

mysql - 从多对多关系中检索数据并以类似对象的 json 形式显示

mysql - 从子查询中删除多行的 SQL 语法错误

php - Magento Product Collection GROUP BY 具有最低价格产品 ID 的最低价格?

javascript - 如何对存储在组合框中的数据库结果进行排序

ios - 在 Swift 中使用过滤器进行高级 Firebase 查询