Ciao, e benvenuto nella sesta puntata della quarantunesima stagione. Nella terza puntata abbiamo scoperto il superpotere di Redis, le strutture di dati dietro le etichette. Oggi vediamo quelle strutture al lavoro, in un compito che sembra magico e che con gli strumenti tradizionali è sorprendentemente difficile: la classifica in tempo reale. I punteggi più alti di un gioco, la lista di ciò che è di tendenza adesso, una graduatoria che si aggiorna in continuazione mentre migliaia di persone agiscono. Oggi capiamo perché per una base di dati classica è un incubo, e per Redis è quasi un gioco da ragazzi.
Partiamo dal problema, perché è meno banale di quanto sembri. Immagina una classifica dei punteggi di un gioco con tanti giocatori. In ogni istante arrivano nuovi punteggi, e la classifica deve restare sempre ordinata dal più alto al più basso, e deve poter mostrare al volo, per esempio, i primi dieci. Ora, con una base di dati classica, tenere una tabella enorme sempre ordinata, e riordinarla a ogni nuovo punteggio che arriva, è un lavoro pesante e lento. Riordinare di continuo migliaia o milioni di righe, mentre i punteggi piovono senza sosta, mette in ginocchio anche un buon magazzino. Il problema non è conservare i punteggi: è tenerli sempre in ordine, in tempo reale.
Ed ecco come Redis lo risolve quasi senza sforzo, che voglio farti apprezzare. Ricordi l'insieme ordinato, una delle strutture che avevamo incontrato? È una collezione che Redis tiene automaticamente in ordine di punteggio, da sola, in continuazione. Non devi riordinare tu: aggiungi semplicemente un punteggio, e Redis mantiene tutto ordinato per te, all'istante. Poi chiedi dammi i primi dieci, e te li restituisce già in ordine, in un lampo. Il lavoro difficile, tenere tutto ordinato mentre i dati arrivano, lo fa la struttura, per costruzione. Tu non ordini niente: metti dentro i punteggi, e chiedi la cima della classifica quando vuoi.
Voglio farti vedere che questo è il vero riscatto della terza puntata, perché lì sta la lezione. Ecco perché le strutture di dati erano un superpotere, e non un dettaglio. Il problema della classifica è difficile solo se devi ordinare tu, a mano, ogni volta. Ma siccome in Redis il valore è già un insieme ordinato, cioè una struttura che sa tenersi in ordine, l'operazione difficile, ordinare in tempo reale, è incorporata nella struttura stessa, e diventa immediata. Non stai aggirando il problema: stai usando la struttura giusta, quella progettata proprio per questo, e il problema quasi svanisce. La struttura fa il lavoro pesante al posto tuo.
Voglio darti l'immagine che rende chiara questa differenza, perché è vivida. Immagina un tabellone dei punteggi che si riordina da solo nell'istante esatto in cui arriva un nuovo punteggio: appena qualcuno segna, il suo nome scivola magicamente al posto giusto nella graduatoria, senza che nessuno intervenga. Ora immagina, al contrario, un impiegato con un registro di carta, che a ogni singolo nuovo punteggio deve ricopiare a mano tutta la lista, in ordine, da capo. Il primo è l'insieme ordinato di Redis; il secondo è la base di dati costretta a riordinare tutto ogni volta. La differenza di fatica, e quindi di velocità, è abissale.
Voglio allargare ai contatori veloci, perché è lo stesso spirito. La stessa magia vale per il contare in fretta. Pensa a contare le visualizzazioni di un video, i mi piace, i voti, mentre arrivano a raffica da tutto il mondo. Aumentare un numero, tantissime volte al secondo, in modo affidabile, è un altro compito che mette in difficoltà una base di dati sotto carico, ma che per Redis è naturale e fulmineo: aumentare un contatore in memoria è tra le cose più veloci che esistano. Classifiche e contatori sono cugini: entrambi chiedono operazioni semplici ripetute a grande velocità, ed entrambi sono il pane di Redis, proprio grazie al vivere in memoria e alle strutture giuste.
Voglio trarre la lezione generale, perché è una delle più profonde della programmazione. Ecco la verità che questa puntata regala: la struttura di dati giusta trasforma un problema difficile in uno facile. Lo stesso identico compito, la classifica in tempo reale, è un incubo con lo strumento sbagliato, la tabella da riordinare a mano, e quasi banale con lo strumento giusto, l'insieme ordinato che si tiene in ordine da sé. Scegliere la struttura adatta al problema è una delle abilità più preziose di chi programma, perché può trasformare ore di fatica e lentezza in una singola operazione istantanea. Redis è una dimostrazione vivente di questa verità: dà le strutture giuste, e i problemi difficili si sciolgono.
Per oggi ci fermiamo qui. Abbiamo visto le strutture di Redis al lavoro in un compito che per le basi di dati classiche è un incubo: la classifica in tempo reale. Tenere una tabella sempre ordinata mentre piovono punteggi è pesantissimo; ma l'insieme ordinato di Redis si tiene in ordine da solo, e ti dà i primi dieci all'istante. È il riscatto del superpotere della terza puntata: la struttura giusta incorpora l'operazione difficile e la rende immediata. Lo stesso vale per i contatori velocissimi. Come un tabellone che si riordina da solo, contro un impiegato che ricopia tutto a mano. La lezione: la struttura di dati giusta trasforma un problema difficile in uno facile. Nella prossima puntata vediamo come Redis fa parlare le parti di un sistema: messaggi e code. Nelle note trovi qualche spunto. Se ti è utile, condividila. Grazie per l'ascolto, e ci sentiamo alla prossima.