In english || Mappa del sito - Sviluppo software

Confronto tra MySQL e PostgreSQL

Indice

Nello scegliere tra i due principali sistemi di gestione database FLOSS (Free/Libre Open Source Software), MySQL e PostgreSQL, è facile rimanere preda di propaganda e alta diffusione. Spiego perchè è meglio evitarlo.

Licenza, costi e portabilità

MySQL

MySQL è disponibile sia sotto forma di eseguibili che di codice sorgente; può essere modificato e redistribuito. I suoi termini d'uso sono regolati da una duplice licenza GPL/proprietaria.

Eseguibili e codice sorgente sono disponibili gratuitamente. Secondo la GPL, qualsiasi redistribuzione degli eseguibili deve essere accompagnata dal codice sorgente da cui sono derivati, siano essi originali o modificati. Un'eccezione alla GPL viene fatta per alcuni programmi FLOSS che usano MySQL.

Chi non sia disposto a sottostare a tali condizioni può acquistare una licenza proprietaria da MySQL Inc. Presso tale fornitore sono inoltre disponibili contratti di supporto.

MySQL funziona su molti sistemi operativi in stile Unix, è incluso nella maggior parte delle distribuzioni di Linux, e funziona nativamente su Microsoft Windows.

Versione stabile attuale: 5.0.

PostgreSQL

PostgreSQL è disponibile sia sotto forma di eseguibili che di codice sorgente; può essere modificato e redistribuito. I suoi termini d'uso sono regolati da una licenza in stile BSD, la quale non pone alcun vincolo di utilizzo.

Eseguibili e codice sorgente sono disponibili gratuitamente. E` possibile sottoscrivere contratti di supporto con un ampio numero di ditte indipendenti.

PostgreSQL funziona su molti sistemi operativi in stile Unix, è incluso nella maggior parte delle distribuzioni di Linux, e funziona nativamente su Microsoft Windows dalla versione 8.0.

Versione stabile attuale: 8.2.

Confronti

Approfondito esame di licenze e modelli di distribuzione di MySQL e PostgreSQL e Oracle:

DBMS a Confronto

Robustezza

MySQL

MySQL implementa le transazioni e le foreign key solo nella versione 4, e solo sul backend InnoDB, non sul più diffuso MyISAM. L'atteggiamento degli sviluppatori verso tali feature è stata per anni di disprezzo: ciò ha impedito di garantire il soddisfacimento dei vincoli ACID e l'integrità dei dati.

MySQL presenta un ampio numero di incongruenze e di trabocchetti nel suo utilizzo. E` reperibile in rete un'ampia casistica di problemi di sviluppo e deployment.

Completo elenco di problemi ed incoerenze di MySQL 4.1:

MySQL Gotchas

Esempio di situazione problematica incontrata nell'uso:

MySQL Hate

PostgreSQL

PostgreSQL presenta un'implementazione completa e fedele dello standard SQL, con alcune estensioni opzionali.

Esso basa da tempo la sua architettura sul modello di concorrenza MVCC (Multi Version Concurrency Control), che garantisce il soddisfacimento dei vincoli ACID e l'integrità dei dati.

Sono molto rari i casi conosciuti di perdite di dati dovute a un suo malfunzionamento.

Completo elenco di problemi ed incoerenze di PostgreSQL:

PostgreSQL Gotchas

Funzionalità e standard SQL

MySQL

MySQL implementa transazioni, foreign key, subselect e union solo dalla versione 4, e non su tutti i backend.

Implementa view, stored procedure, trigger e supporto a Unicode solo dalla versione 5.

Non implementa ancora full join e constraint sui dati.

PostgreSQL

PostgreSQL implementa da anni transazioni, foreign key, subselect, union, view, stored procedure, trigger, supporto a Unicode, full join e constraint sui dati.

Dispone inoltre di un sistema di tipi estensibile, sequenze, ereditarietà ed altre estensioni.

Confronti

Dettagliato confronto di funzionalità tra PostgreSQL 8.0, MySQL 4.1 e MySQL 5.0 (beta):

Mysql vs postgres

Velocità

MySQL

MySQL si dimostra veloce in presenza di bassi livelli di accesso concorrente, e quando le letture sono molto più numerose delle scritture. Soffre però di scarsa scalabilità all'aumentare del carico e in presenza di molte scritture.

PostgreSQL

PostgreSQL si dimostra relativamente lento per bassi livelli di concorrenza, ma scala bene verso l'alto all'aumentare del carico, e garantisce un isolamento tra accessi concorrenti tale da non soffrire anche in presenza di livelli elevati di scritture contemporanee.

Confronti

Commento su velocità e scalabilità di MySQL e PostgreSQL, con riferimenti a un benchmark approfondito:

Benchmark: PostgreSQL beats the stuffing out of MySQL

Altro commento sullo stesso benchmark:

Validating PostgreSQL Performance

Resoconto di una migrazione da MySQL a PostgreSQL:

FeedLounge now running on PostgreSQL

Test a confronto con numero di utenti variabile

Varie

PostgreSQL

Contestazione di alcuni pregiudizi su PostgreSQL:

Five reasons why you should never use PostgreSQL -- ever

Conclusioni

MySQL è stato costruito dando priorità alle prestazioni, a scapito di tutto il resto. Alcune feature dello standard SQL come transazioni, integrità referenziale e altre sono state aggiunte successivamente, obtorto collo.

Si mostra però veloce solo a bassi livelli di concorrenza, ed sono frequenti rapporti di instabilità e scarsa robustezza.

D'altro canto PostgreSQL è stato costruito sulla base del modello ACID, dando priorità all'integrità dei dati e all'aderenza allo standard SQL, a scapito delle prestazioni. Nel tempo è stato ottimizzato e velocizzato, oltre ad aggiungere feature alla già completa base.

Oggi è robusto, aderente agli standard, e dotato di molte funzioni. Pur rimanendo relativamente lento a bassi livelli di concorrenza, scala bene verso l'alto all'aumentare del carico.