PostgreSQL - La storia finora

PostgreSQL (o Postgres) nacque nel 1986 come POSTGRES, un progetto di ricerca dell'Università della California a Berkeley, guidato da Michael Stonebraker, illustre ricercatore nel campo dei database. Nel progettare POSTGRES il team di Stonebraker cercò di migliorare INGRES, un prototipo precedente anch'esso guidato da Stonebraker, principalmente tramite l'introduzione di tipi definiti dall'utente (o “domini”) con vincoli arbitrariamente complessi e altri concetti tipici dell'impostazione relazionale a oggetti.

Il team di Stonebraker ha sviluppato attivamente POSTGRES per otto anni, e ha sviluppato caratteristiche quali regole, procedure e tipi estendibili con indici. POSTGRES è stato commercializzato in seguito come Illustra, acquisito poi da Informix che lo integrò nel proprio Universal Server. Nel 2001 IBM ha poi acquisito Informix per un miliardo di dollari.

POSTGRES usava un suo linguaggio di query, POSTQUEL. Benché teoricamente superiore al più diffuso SQL, essendo dotato di una maggiore espressività grazie a fondamenti teorici più avanzati, in pratica POSTQUEL non era allineato ai bisogni dell'industria, la quale aveva già adottato SQL come standard. Per tale ragione nel 1995 due studenti di dottorato del laboratorio di Stonebraker, Andrew Yu e Jolly Chen, sostituirono POSTQUEL con un sottoinsieme esteso di SQL. POSTGRES fu quindi rinominato Postgres95.

Il 1996 vide una crescita significativa dell'interesse per il progetto al di fuori del mondo accademico. Essendo chiaro che il nome Postgres95 sarebbe divenuto inadeguato col passare degli anni, il progetto fu rinominato PostgreSQL. Nacque così il PostgreSQL Global Development Group, un'affiliazione internazionale di sviluppatori di database che lavorano principalmente nell'industria, assumendo il controllo del codice sorgente di Postgres. PostgreSQL iniziò con la versione 6, per coerenza con i numeri di versione usati ai tempi di Berkeley, in omaggio al contributo significativo del team di Stonebraker.

Durante quest'era iniziale (6.*) dello sviluppo open source furono sviluppate molte delle caratteristiche che hanno definito PostgreSQL, incluse:

  • Multiversion Concurrency Control. Il locking a livello di tabella fu sostituito da MVCC, un sofisticato sistema che impedisce ai processi in lettura di bloccare i processi in scrittura e viceversa, esplorato originariamente da Oracle;
  • Significativi miglioramenti in termini di prestazioni. Avendo il progetto storicamente dato priorità all'integrità dei dati e alla stabilità, in questa fase sono state migliorate significativamente le prestazioni;
  • Miglioramenti ai tipi di dati primitivi, compresi tipi sofisticati per gestire date e tempi, e tipi geometrici avanzati.

Le 5 versioni principali che in circa 4 anni hanno contrassegnato l'era 7.* hanno superato un numero ancora maggiore di traguardi. Tra essi:

  • La più degna di nota è l'implementazione della tecnologia WAL (write-ahead logging, log transazionali). Il termine WAL denota una famiglia di tecniche che permettono di ottenere l'atomicità e la durabilità nei sistemi di database. Certi segmenti WAL, capaci di descrivere tutti i cambiamenti al database, vengono scritti sul disco ancor prima che tali cambiamenti vengano applicati;
  • JOIN esterni;
  • TOAST, una tecnica per memorizzare dati di grandi dimensioni esternamente alle tabelle e in modo compresso: in questo modo è possibile, per esempio, memorizzare grandi porzioni di testo in modo efficiente all'interno una tabella del database;
  • Molti linguaggi procedurali, incluso PL/pgSQL, basato sul linguaggio PL/SQL del database Oracle.

Mentre la serie 7.* è stata contrassegnata da miglioramenti all'usabilità, uniti a funzionalità avanzate centrate sul ruolo dello sviluppatore, che superavano di gran lunga quelle di tutti i rivenditori di software proprietario, è stato con la serie 8.*, tra il 2004 e il 2009, che sono giunte caratteristiche fino ad allora considerate a esclusivo appannaggio di due o tre mega-aziende. La tecnologia WAL è stata parte integrale dell'architettura di molte di queste caratteristiche, in particolare nell'ambito del clustering e dell'alta disponibilità. Essa rappresenta adesso come allora un filo conduttore dei contributi open source di 2ndQuadrant. La serie 8.* coincide anche con la fondazione di 2ndQuadrant, coinvolta da subito nel processo di sviluppo di PostgreSQL.

Con la versione 8.0 si aggiunse una caratteristica importante: i Savepoint, o sotto-transazioni, che consentono di dividere una transazione in parti più piccole le quali possono essere annullate in modo "atomico" senza pregiudicare lo svolgimento della transazione principale. I savepoint possono anche essere annidati a piacere. Un'altra caratteristica introdotta in quella versione, forse anche più importante, è la tecnologia Point-In-Time Recovery, che consente di effettuare un backup continuo di un server, o di ripristinare lo stato di un determinato punto del passato prossimo. Tale versione vide anche l'arrivo del port nativo su Windows, atteso da tempo.

La versione 8.1 portò con sé nel 2005 un'altra caratteristica di livello enterprise, sviluppata da 2ndQuadrant: il partizionamento delle tabelle mediante l'uso di "constraint exclusion", che permette al planner di evitare la scansione di quelle tabelle "figlio" per cui sia possibile stabilire che non contengono righe interessate dalla query in questione.

Nella versione 8.2, rilasciata nel 2006, furono consolidati gli obiettivi ottenuti nelle release precedenti, incrementando notevolmente la strumentazione informativa WAL e aggiungendo svariate funzionalità di ripristino dopo eventuali crash. La 8.2 è ricordata anche per essere stata la versione su cui Greenplum ha basato il proprio software proprietario, mirato al mercato di nicchia dei data warehouse. Appena quattro anni dopo, EMC ha acquisito sia Greenplum sia l'omonima soluzione software. Il valore totale dell'acquisizione non è stato reso noto; corre tuttavia voce che Greenplum abbia raccolto 61 milioni di dollari di finanziamenti subito prima dell'acquisizione, consentendo alla stampa di settore di stimare in modo indipendente il valore complessivo dell'operazione tra i 100 e 150 milioni di dollari.

La versione 8.3 del 2008 ha rappresentato uno spartiacque in termini di prestazioni. Sono comparse una serie di funzionalità principali per le prestazioni, tra le quali:

  • HOT (Heap-only Tuples), un'ottimizzazione che permette ai comandi INSERT e UPDATE di riutilizzare le tuple obsolete, in aggiunta al consueto processo di VACUUM, qualora non vengano cambiati i valori nelle colonne indicizzate. Oltre a incrementare considerevolmente le prestazioni, questa ottimizzazione ne aumenta anche la consistenza;
  • Commit asincrono, una caratteristica introdotta da Simon Riggs, CTO di 2ndQuadrant, per consentire alle transazioni di venire finalizzate in modo asincrono; le applicazioni possono usare questa caratteristica per aumentare le prestazioni nei casi in cui sia ragionevole farlo;
  • Riscrittura del processo di scrittura in background da parte di Gregory Smith, consulente principale di 2ndQuadrant Stati Uniti ed esperto di prestazioni di PostgreSQL, con l'introduzione di una nuova strategia di tipo "just-in-time" che ha migliorato notevolmente l'efficienza della scrittura su disco;
  • Un miglioramento della strategia di estromissione della cache, guidato da 2ndQuadrant, per evitare che pagine frequentemente richieste vengano indebitamente espulse a causa di scansioni sequenziali di grandi dimensioni;
  • Il modulo pg_standby, scritto da 2ndQuadrant, che semplifica la gestione dei server warm standby.

La versione 8.4, ultima della serie 8.*, è uscita nel 2009. Tale versione ha apportato ulteriori miglioramenti a usabilità e prestazioni, e caratteristiche rivolte agli sviluppatori, tra cui:

  • Funzionalità SQL più avanzate, quali Funzioni Window e Common Table Expression. Prima di allora, ambedue le funzionalità erano disponibili solo su un piccolo numero di sistemi di database proprietari;
  • Ripristino in parallelo, che consente appunto di ripristinare un backup logico tramite più processi in parallelo;
  • La mappa della visibilità, che riduce drasticamente il costo di vacuum per le tabelle che cambiano lentamente;
  • La mappa su disco dello spazio disponibile, la quale ha semplificato la gestione della mappa dello spazio disponibile a tal punto che l'utente finale non deve più occuparsene.

L'attuale serie 9.* rappresenta un punto di svolta per la comunità PostgreSQL, per una serie di ragioni; nella mente di molti utenti la causa principale è l'introduzione nella 9.0 della replica binaria in streaming come caratteristica di serie. Questa caratteristica è stata indotta principalmente dal lavoro di 2ndQuadrant, come logico complemento del lavoro precedente sulla tecnologia WAL, e precisamente dell'introduzione di Hot Standby da parte del CTO di 2ndQuadrant Simon Riggs.

Un'altra ragione per cui la 9.* rappresenta un punto di svolta ed è con essa che PostgreSQL, un tempo definito dal paragone con i RDBMS proprietari, viene ad occupare la frontiera dello sviluppo, sorpassando in parecchie aree importanti ogni concorrente. È forse ancor più notevole l'introduzione nella 9.1 della replica sincrona da parte di 2ndQuadrant, la quale offre una caratteristica di valore immenso: la replica con zero perdita di dati. Primo a livello mondiale, PostgreSQL consente all'utente di controllare la durabilità a livello di singola transazione, e una singola applicazione può usare agevolmente tutti i livelli di durabilità.

La serie 9.* è inoltre corredata da un insieme di altre funzionalità, anch'esse primato a livello mondiale, che non sono legate direttamente alla tecnologia WAL. Tra esse il livello serializzabile di isolamento delle transazioni, funzionalità innovativa basata su un recente lavoro di ricerca positivamente accolto in ambito accademico, che permette di raggiungere la serializzabilità completa offerta dal locking a livello di predicato, senza bloccare in alcun modo le transazioni, e senza alcun deadlock aggiuntivo. In tale versione sono inoltre presenti i vincoli di esclusione, tramite i quali è possibile risolvere il “problema della doppia prenotazione” (impedire che una sala conferenze venga prenotata due volte da due sessioni che si sovrappongono): imposti in modo simile a vincoli di unicità, senza però ricorrere a pesanti lock espliciti che colpirebbero duramente le prestazioni. Un altro esempio di primato mondiale raggiunto con PostgreSQL 9.1 è fornito dalle Common Table Expression scrivibili, introdotte dal consulente 2ndQuadrant Marko Tiikkaja. Questa estensione non-standard delle Common Table Expression definite dallo standard SQL consente alle clausole WITH di contenere sottoquery che eseguono anche comandi INSERT, UPDATE e DELETE. Diventa così più facile gestire diversi casi d'uso utili, per esempio lo spostamento di dati tra due tabelle (cancellandoli da una tabella e inserendoli nell'altra) nell'ambito di una sola query/snapshot.


Tieniti in contatto con noi.

Iscriviti alla nostra newsletter trimestrale: riceverai le ultime notizie su 2ndQuadrant e aggiornamenti sulle tecnologie da noi supportate

La tua privacy è tutelata in base alla normativa vigente (art. 13 D. Lgs. 30.06.2003, n. 196).