Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Effizienteste Methode zum Verfallen von Datensätzen 10 Minuten nach der Erstellung

Der effizienteste Weg, dies zu tun, ist die Verwendung einer Ansicht. Häh? Was hat das mit dem Problem zu tun? Nun, machen Sie das Löschen nicht 10 Minuten nach den Stationen. Erstellen Sie stattdessen eine Ansicht mit der folgenden Logik:

create view v_recoveries as
    select r.*
    from recoveries r
    where expiry > date_sub(now(), interval 10 minutes);

Aus Leistungsgründen möchten Sie einen Index für recoveries(expiry) , das sollte also schnell gehen.

Löschen Sie dann nach Belieben – einmal pro Datum, einmal pro Stunde oder einmal pro Woche – nicht benötigte Datensätze mit:

DELETE FROM `recoveries`
    WHERE `expiry` <= date_sub(now(), interval 10 minutes);

Dieser Ansatz hat mehrere Vorteile:

  • Das Vorhandensein von Daten ist genau 10 Minuten lang und basiert nicht auf der Planung eines Jobs.
  • Die eigentlichen Löschungen können stattfinden, wenn sich das System im Ruhezustand befindet.
  • Wenn ein Cronjob nicht ausgeführt werden kann, sind die Daten nicht „beschädigt“ – das heißt, Sie erhalten keine Daten, die zu alt sind.
  • Wenn das System ausgelastet ist (viele Einfügungen), konkurrieren die Einfügungen nicht mit den Löschungen, was das System weiter verlangsamt.