【问题标题】:When to delete old entries from MySQL DB?何时从 MySQL 数据库中删除旧条目?
【发布时间】:2020-05-31 20:59:12
【问题描述】:

所以我运行这个 TYPO3 网站,有近 80 个表格。 TYPO3 并没有真正删除记录,它只是在已删除的表字段中写入一个“1”来标记它们。这会导致一个包含许多记录的大表,这些记录在应用程序中不可见,但必须在每个数据库查询中进行处理。

我的问题是:在面临性能下降等劣势之前,您应该保留多少死条目?无论服务器硬件如何,是否有任何已知数量的条目?

提前致谢!

【问题讨论】:

  • 数据保留期限取决于应用程序要求。如果有任何功能需要显示历史记录,那么您必须保留历史记录一段时间。
  • 这就是为什么删除的记录只是被标记为deleted=1,但在后端模块'Recycler'中仍然可以决定完全删除或恢复。

标签: mysql typo3


【解决方案1】:

TYPO3 有一个包含的任务来清理旧/已删除的条目,称为:

表垃圾回收:清除数据库中任何表中的旧记录。https://docs.typo3.org/c/typo3/cms-scheduler/master/en-us/Installation/BaseTasks/Index.html#table-garbage-collection-task

您可以根据您的用例和您的服务器环境来决定,应该在哪个时期清理哪些条目。

【讨论】:

  • 我必须添加这个:这不是真的,数据在后端是不可见的。您应该使用系统扩展“recycler”,这是一个完美的方式来显示标记为已删除的记录,并且您将能够恢复已删除的记录!此外,我想大约 90 天后,记录会被上述垃圾收集器任务永久删除,这在大多数情况下是我个人的默认设置,但这可能会根据您的需要而有所不同。
【解决方案2】:

这取决于。如果有良好的索引,额外的行可能不会对性能造成太大影响。你看到减速了吗? (有句老话:“如果没坏,就不要修。”)

DELETE FROM t WHERE deleted 之类的东西可能是清​​理表 t 的可行方法。但它可能会遇到FOREIGN KEYs 的问题。

表中有多少行?如果DELETE 有数百万行,那么在不让系统崩溃的情况下完成任务会变得很棘手。

【讨论】:

  • 这个答案不是很好,因为 TYPO3 附带了一个垃圾收集器和一些其他任务,它们可以自动清理系统,而无需使用外键等。还有一个任务,例如为了优化数据库表,您可以运行这些任务,例如以每日为基础。
猜你喜欢
  • 1970-01-01
  • 2019-08-12
  • 2020-05-30
  • 2011-02-21
  • 1970-01-01
  • 2017-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多