← Tutti gli episodi
Copertina di Leggere e scrivere senza fare la fila: le versioni multiple
Stagione 53 · Episodio 004

Leggere e scrivere senza fare la fila: le versioni multiple

12 settembre 2026 4:42
0:00 4:42

Ciao, e benvenuto nella quarta puntata della cinquantatreesima stagione. Oggi arriviamo al trucco più ingegnoso di Postgres, l'idea che più di ogni altra lo distingue e che risolve uno dei problemi più difficili delle basi di dati. Oggi capiamo come Postgres gestisce la folla: leggere e scrivere senza fare la fila.

Partiamo dal problema, perché è spinoso. In una base di dati vera non c'è una persona sola. Ci sono decine, centinaia, migliaia di utenti che leggono e scrivono gli stessi dati nello stesso momento. E qui nasce una domanda difficilissima: mentre uno sta modificando una riga, cosa deve vedere un altro che nello stesso istante la sta leggendo? Il valore vecchio o quello nuovo, ancora a metà? Se lasci che si intralcino, ottieni caos e dati incoerenti. La soluzione più ovvia è mettere un lucchetto: quando uno tocca un dato, tutti gli altri aspettano. Ma se tutti aspettano sempre, la base di dati diventa una fila lentissima.

Voglio darti la risposta di Postgres, perché è elegante. La risposta di Postgres è geniale, e ribalta il problema: invece di far aspettare le persone, tiene più versioni della stessa cosa. Quando modifichi una riga, Postgres non cancella la vecchia per scrivere sopra la nuova. Crea una nuova versione, e lascia in vita la vecchia finché a qualcuno serve. Così, ogni transazione vede una fotografia coerente della base di dati com'era nel momento in cui è cominciata. Tu leggi la tua fotografia, un altro modifica la sua, e nessuno dei due deve aspettare l'altro.

Voglio dirti la conseguenza, perché è la firma di Postgres. Da questo nasce la sua regola d'oro, quella che chi lo conosce ripete come un mantra: chi legge non blocca chi scrive, e chi scrive non blocca chi legge. È enorme. Vuol dire che una lunga lettura pesante, un report che macina milioni di righe, non congela tutto il sistema mentre gira. E vuol dire che chi scrive può farlo senza aspettare che tutti i lettori abbiano finito. Ognuno lavora sulla propria versione coerente del mondo, e Postgres tiene insieme il tutto. È così che mantiene la promessa dell'isolamento di cui parlavamo, senza trasformare la base di dati in una fila.

Voglio darti l'immagine che rende chiara questa idea, perché è vivida. Immagina una stanza piena di cose e tante persone che vogliono lavorarci. Il modo con il lucchetto sarebbe: una persona alla volta entra, chiude la porta, e tutti gli altri aspettano fuori in fila. Il modo di Postgres è diverso: nel momento in cui entri, ti viene data una fotografia perfetta della stanza com'è in quell'istante. Tu lavori sulla tua foto, un altro entra un secondo dopo e riceve la sua, leggermente diversa. Nessuno aspetta nessuno, e a ognuno il mondo appare fermo e coerente, anche se in realtà sta cambiando di continuo.

Voglio essere onesto sul prezzo, perché ce n'è uno. Questa magia ha un costo, ed è giusto conoscerlo. Tenere più versioni vuol dire che, col tempo, si accumulano versioni vecchie che non servono più a nessuno. Sono spazio occupato da fantasmi. Perciò Postgres ha bisogno di uno spazzino che ripassa periodicamente a raccogliere e buttare via le versioni morte, liberando lo spazio. Di solito lo fa da solo, in sottofondo, senza che tu te ne accorga. Ma se lo trascuri, o se il lavoro è enorme, quei fantasmi si accumulano e la base di dati si gonfia. È il rovescio onesto di un'idea altrimenti bellissima: la libertà di non fare la fila si paga con un po' di pulizia.

Voglio trarre la lezione generale, perché è il cuore. La lezione è che il vero genio, spesso, non è nel forzare l'ordine, ma nel trovare un modo perché tutti possano andare avanti senza scontrarsi. Postgres non risolve il problema della folla facendo aspettare le persone: lo risolve dando a ciascuno una versione coerente del mondo. È un cambio di prospettiva profondo, dal bloccare al moltiplicare, ed è il motivo per cui Postgres regge tanti utenti insieme restando reattivo e corretto. Chi legge non blocca chi scrive: sotto quella frase semplice c'è una delle idee più belle delle basi di dati.

Per oggi ci fermiamo qui. Abbiamo visto il trucco più ingegnoso di Postgres. Il problema: tanti utenti leggono e scrivono gli stessi dati insieme, e mettere un lucchetto che fa aspettare tutti trasforma la base di dati in una fila lenta. La risposta di Postgres è tenere più versioni della stessa cosa: quando modifichi, crea una nuova versione e lascia in vita la vecchia, così ogni transazione vede una fotografia coerente del momento in cui è cominciata. Da qui la regola d'oro: chi legge non blocca chi scrive, e viceversa. Come entrare in una stanza e ricevere una foto perfetta invece di aspettare in fila. Con un prezzo onesto: le versioni vecchie vanno ripulite da uno spazzino. La lezione: il genio non è forzare l'ordine, è far andare avanti tutti senza scontri. Nella prossima puntata: tu dici cosa, lui decide come. Nelle note trovi qualche spunto. Se ti è utile, condividila. Grazie per l'ascolto, e ci sentiamo alla prossima.