Spesso capita di dover eseguire delle azioni ripetitive e, generalmente, ci si affida a Cron.
Cron è affidabile senz’altro ma, se l’operazione ripetitiva riguarda la manutenzione di alcune tabelle piuttosto che l’eliminazione di alcuni record (temporanei, di sessione), significa dover creare un script (in php, in python, in bash) che stabilisca una connessione al database ed esegua la query.
Ma fare questo significa impegnare il processore in tre processi:
- Crontab, che deve tener conto dell’azione da eseguire e di quando eseguirla
- L’interprete dello script, che dovrà leggere ed eseguire le vostre istruzioni
- MySQL, che eseguirà il vero e proprio lavoro
Ma non si potrebbe ridurre tutto a un singolo processo? Sì, basta delegare MySQL a fare tutto da se, ovvero con il suo scheduler.Per usarlo, prima di tutto dobbiamo assicurarci che sia abilitato:
SET GLOBAL event_scheduler = ON;
e quindi creare l’evento con le informazioni necessarie e i comandi da eseguire:
CREATE EVENT delmessage ON SCHEDULE EVERY 1 DAY
STARTS '2017-03-01 00:00:00'
DO
DELETE FROM tbl_message WHERE DATEDIFF( NOW( ) , timestamp ) >=7;
L’evento “delmessage” appena creato altro non farà, la mezzanotte di ogni giorno a partire dallo 01-03-2017, che eliminare dalla tabella “tbl_message” tutti i record più vecchi di 7 giorni.
Fatto. Un solo processo.