Soft delete, è veramente utile?

Post del 11 Agosto 2021 in Developer

Partiamo dal principio che errore è umano e, quando si lavora, si sbaglia più spesso di quanto si vorrebbe.

Non sbagliare significherebbe non imparare o peggio, significherebbe che non si sta tentando affatto.

Per quanto ne so, si impara di più dai propri errori che dai propri successi, quindi perché smettere?

Santo backup

Il concetto di backup, per quanto possa sembrare scontato, non è mai superfluo.

Da quando esiste il Cloud, molti di noi hanno iniziato a mettersi l’anima in pace. Ci sono alcuni servizi che tendono anche la traccia storica di ogni singola modifica ai file, in questo modo è possibile ripristinare il proprio lavoro anche a distanza di mesi.

La problematica nasce quando si inizia a parlare di database. Ovviamente anche questo viene backuppato dal server in cui si trova (se correttamente pianificato), ma vogliamo veramente ripristinare l’intero DB o un’intera tabella per un solo record eliminato per errore?

Aiuto, voglio tornare indietro nel tempo!

Non conto più le volte in cui un cliente mi chiama perché ha eliminato un prodotto, una pagina e un elemento per errore.

Quando si tratta di dati non sensibili o quando la privacy è stata stilata correttamente da parte del cliente, applico il soft delete.

Questo metodo, seppur più dispendioso sia da parte della memoria, che da parte dello sviluppo, può rivelarsi piuttosto utile.

Il concetto è piuttosto semplice: invece di eliminare veramente un record all’interno di una tabella del database, si crea una colonna (es. deleted) che verrà posta diversa da zero in caso di cancellazione da parte dell’utente.

Ne consegue che, tutta la logica che fa riferimento a quella tabella, debba essere corretta di conseguenza. Quindi, ogni volta che si mostrerà l’elenco dei record di quella tabella, non bisognerà tener conto di quelli “eliminati”.

Ora abbiamo una macchina del tempo

Quando è attivo il soft delete e dobbiamo fare un ripristino, è sufficiente riportare il valore di quella colonna a zero e il record ricomparirà come per magia.

Semplice no?

Ovviamente però bisogna tenere a mente che questa tecnica ha anche degli svantaggi.

Il database andrà ad occupare molta più memoria del normale. Visto che non andremo mai ad eliminare qualcosa veramente. Avremo quindi sempre con noi l’archivio storico dell’intero progetto.

Quanto ci costa non dimenticare mai?

Proprio per una questione di memoria, ma anche di velocità, bisogna tenere a mente che si deve pianificare con attenzione quando utilizzare questa tecnica.

Quando un progetto è già avviato, diventa complicato reimpostare l’intera struttura con il soft delete, quindi è bene sviluppare il tutto sin dall’inizio.

Bisogna sempre tenere a mente che ogni volta che si andrà a fare una query su una tabella con soft delete, per quanto rapido possa essere il nostro server, avrà sempre molte più righe tra le quali cercare.

Esiste una soluzione a questo estremo spreco di memoria?

Pianifichiamo una pulizia

Un buon metodo per utilizzare il soft delete salvaguardando le prestazioni, è quello di eliminare “veramente” i record quando diventano molto vecchi.

Quando dicevo di impostare un valore diverso da zero per la colonna deleted, non intendevo necessariamente che si dovesse trattare di un “1”. In molti inseriscono, ad esempio, la data di eliminazione.

Usare una data, oltre a ricordare quando è stata effettuata la cancellazione, ci aiuta anche a capire quando è vecchia quella eliminazione.

Potremmo, per convenzione, stabilire che un record diventa “molto vecchio” quando è stato eliminato da più di un anno. È a questo punto che, quando eseguiamo il nostro processo di pulizia, potremmo eliminare definitivamente questo vecchio record.

Per concludere, prima di effettuare il processo di pulizia pianificato, consiglio sempre di effettuare un dump del database. In questo modo avremo un backup (magari in locale o sul Cloud) mentre il DB operativo resterà sempre veloce e performante.

L'Alchimista tecnologico

Mi chiamo Cristian, sono l’autore di questo blog e realizzo software e siti web da più di 10 anni.

Creazione sito web

Hai bisogno di un sito web? Dai un'occhiata alle soluzioni che abbiamo sviluppate sino ad ora.

Creazione software

Le soluzioni che abbiamo sviluppato rispettano sempre standard di qualità e prestazioni elevati.