Post­gre­SQL e MySQL sono due dei sistemi di gestione di database open source più uti­liz­za­ti, ma quali sono esat­ta­men­te le loro dif­fe­ren­ze e so­mi­glian­ze e quale dei due strumenti è più adatto a seconda dei diversi scenari di im­ple­men­ta­zio­ne?

Post­gre­SQL o MySQL?

Sia Post­gre­SQL che MySQL sono sistemi di gestione di base di dati (DBMS). Nella maggior parte dei casi, i sistemi tendono a essere più simili che diversi. Tuttavia, un confronto tra Post­gre­SQL e MySQL mette in evidenza alcune sottili dif­fe­ren­ze che possono essere più o meno utili per il vostro progetto.

Consiglio

Per saperne di più sui due sistemi, con­sul­ta­te i nostri articoli det­ta­glia­ti:

Entrambi i sistemi uti­liz­za­no il lin­guag­gio di pro­gram­ma­zio­ne SQL come in­ter­fac­cia centrale per l’in­te­ra­zio­ne con i database e i dati in essi contenuti. Il comando più noto è pro­ba­bil­men­te l’istru­zio­ne SELECT per l’ese­cu­zio­ne di query. Questo permette di trovare e ri­pro­dur­re dati all’interno del database. Inoltre, esistono vari comandi SQL per con­trol­la­re il DBMS.

L’ambito fun­zio­na­le di SQL è definito in vari standard. Le im­ple­men­ta­zio­ni comuni ri­spet­ta­no lo standard. Nel confronto tra Post­gre­SQL e MySQL, Post­gre­SQL è più potente e supporta una gamma di funzioni più ampia rispetto a MySQL.

Consiglio

Non conoscete l’SQL? Date un’occhiata a questa in­tro­du­zio­ne al lin­guag­gio di pro­gram­ma­zio­ne SQL.

Una dif­fe­ren­za im­por­tan­te tra Post­gre­SQL e MySQL è la loro ar­chi­tet­tu­ra di base. Entrambi sono sistemi di gestione di database re­la­zio­na­li (RDBMS). Tuttavia, Post­gre­SQL può fare molto di più, perché è un DBMS re­la­zio­na­le a oggetti (ORDBMS).

Entrambi i DBMS si basano su un motore di ar­chi­via­zio­ne come in­ter­fac­cia per l’ar­chi­via­zio­ne dei dati su supporti fisici. Per un accesso ad alte pre­sta­zio­ni, si uti­liz­za­no indici che si ri­fe­ri­sco­no alle singole voci del database. Esistono diversi motori di ar­chi­via­zio­ne e metodi di in­di­ciz­za­zio­ne, ciascuno con i propri vantaggi e svantaggi.

Consiglio

Post­gre­SQL e MySQL sono sistemi di gestione di database open source, il che li rende diversi dai prodotti pro­prie­ta­ri dei grandi fornitori come Microsoft e IBM. Inoltre, esistono molti altri DBMS open source. Nel nostro articolo vi pre­sen­tia­mo i più im­por­tan­ti database open source a confronto.

MySQL: il classico RDBMS open source

MySQL è stato svi­lup­pa­to a metà degli anni ‘90 da MySQL AB, in Svezia. L’azienda è stata acquisita da Sun Mi­cro­sy­stems nel 2008 e da Oracle nel 2010. A causa della dif­fi­den­za della comunità open source nei confronti di Oracle, è nato il fork “MariaDB”. Questo per garantire che il progetto man­te­nes­se una licenza open source.

Durante gli anni del boom del World Wide Web, MySQL è diventato un com­po­nen­te popolare dell’on­ni­pre­sen­te stack LAMP. Il software di database viene ora aggiunto a Linux, Apache e PHP nella maggior parte dei piani di web hosting. MySQL è diventato presto lo standard per i progetti web basati su database re­la­zio­na­li.

Post­gre­SQL: la potente al­ter­na­ti­va re­la­zio­na­le a oggetti

Post­gre­SQL è stato ori­gi­na­ria­men­te concepito come “Postgres”, un suc­ces­so­re del DBMS Ingres. È stato svi­lup­pa­to a metà degli anni ‘80 presso l’Uni­ver­si­tà della Ca­li­for­nia, Berkeley. Il codice fu pub­bli­ca­to con la licenza “Berkeley Software Di­stri­bu­tion” (BSD). A metà degli anni ‘90, il passaggio a SQL come in­ter­fac­cia uniforme avvenne insieme al cambio di nome a “Post­gre­SQL”. Entrambi i nomi sono tuttora uti­liz­za­ti.

Secondo quanto detto da IBM, Post­gre­SQL è:

Citazione

“One of the most compliant, stable and mature re­la­tio­nal databases available today and can easily handle complex queries.“ – Fonte: https://www.ibm.com/cloud/blog/post­gre­sql-vs-mysql-whats-the-dif­fe­ren­ce

Tra­du­zio­ne: “Uno dei database re­la­zio­na­li più conformi, stabili e maturi oggi di­spo­ni­bi­li e in grado di gestire fa­cil­men­te query complesse.” (tradotto da IONOS)

Un confronto tra Post­gre­SQL e MySQL

Sia Post­gre­SQL che MySQL sem­pli­fi­ca­no il lavoro sui database re­la­zio­na­li. Entrambi i sistemi includono comandi SQL per creare, mo­di­fi­ca­re e popolare tabelle ed eseguire query. Un confronto tra Post­gre­SQL e MySQL mostra dif­fe­ren­ze fon­da­men­ta­li nelle loro fun­zio­na­li­tà, evidenti anche nelle ri­spet­ti­ve ar­chi­tet­tu­re.

Mentre MySQL è un puro sistema di gestione di database re­la­zio­na­li (RDBMS), Post­gre­SQL è un DBMS re­la­zio­na­le a oggetti (ORDBMS) e supporta una serie di concetti noti alla pro­gram­ma­zio­ne orientata agli oggetti. Questi includono i tipi di dati definiti dall’utente, i tipi di dati combinati e l’ere­di­ta­rie­tà. Perciò è più potente di MySQL, ma anche più complesso.

Ca­rat­te­ri­sti­che del DBMS Post­gre­SQL / ORDBMS MySQL / RDBMS
Più dati per campo Array sup­por­ta­ti Richiede una tabella e un join separati
Relazione m:n Di­ret­ta­men­te mo­del­la­bi­le Richiede una tabella e un join ag­giun­ti­vi
Ere­di­ta­rie­tà   Di­ret­ta­men­te mo­del­la­bi­le Richiede soluzioni complesse/viste, tabelle multiple, ecc.  
Dati ge­rar­chi­ci   Tramite JSON, HStore e XML Solo JSON
Valori booleani   Tipo di dati personale   Im­ple­men­ta­zio­ne come TINYINT(1)  

Tipi di dati

I tipi di dati sono alla base di una solida pro­get­ta­zio­ne di database e del loro uso pro­dut­ti­vo. Quando si pro­get­ta­no le tabelle, si specifica il tipo di dati contenuti nelle singole colonne. Esistono i seguenti tipi di dati:

Tipo di dati Post­gre­SQL MySQL
Valori booleani Post­gre­SQL dispone di un proprio tipo di dati boolenani. MySQL segue un altro approccio: invece di im­ple­men­ta­re i valori booleani come un proprio tipo di dati li memorizza come numeri di tipo TINYINT(1).
In­ter­val­li Post­gre­SQL offre un ampio supporto per i tipi di in­ter­val­lo, il che sem­pli­fi­ca il lavoro con i valori ordinali. MySQL non supporta gli in­ter­val­li; quindi per ser­vir­se­ne si deve ricorrere ad al­ter­na­ti­ve rea­liz­za­te au­to­no­ma­men­te.
Geodati Post­gre­SQL dispone del­l'e­sten­sio­ne open source PostGIS, che è con­si­de­ra­ta una delle im­ple­men­ta­zio­ni GIS più mature. MySQL supporta i geodati e le query a essi associate dalla versione 8. Tuttavia, la gamma di funzioni è inferiore a quella di Post­gre­SQL.
Array Post­gre­SQL supporta gli array come ORDBMS. Con gli array di Post­gre­SQL è possibile me­mo­riz­za­re più valori in un unico campo. MySQL non supporta questo tipo di dati.
Dati ge­rar­chi­ci / JSON Post­gre­SQL supporta JSON. In questo modo, una struttura di dati complessa e ge­rar­chi­ca­men­te annidata può essere inserita in un singolo campo. Anche MySQL supporta JSON, ma non è così potente come Post­gre­SQL.

Pre­sta­zio­ni

Le pre­sta­zio­ni dei database sono un argomento complesso. I diversi DBMS pre­sen­ta­no vantaggi e svantaggi a seconda dell’utilizzo che se ne fa. In generale, MySQL è con­si­de­ra­to estre­ma­men­te per­for­man­te, so­prat­tut­to quando l’accesso al database è “read-heavy”, cioè in modalità di lettura. Questo è il caso dei sistemi di gestione dei contenuti come WordPress, che leggono prin­ci­pal­men­te i contenuti dal database e li for­ni­sco­no ai vi­si­ta­to­ri e alle vi­si­ta­tri­ci.

A dif­fe­ren­za di MySQL, Post­gre­SQL offre spesso pre­sta­zio­ni migliori per le ope­ra­zio­ni di scrittura (“write-heavy”). Inoltre, l’ORDBMS è più adatto alle soluzioni di data ware­hou­sing e ad altri sistemi di “ela­bo­ra­zio­ne analitica online” (OLAP). Questo tipo di database supporta con­nes­sio­ni multiple con processi propri, il che comporta requisiti di memoria più elevati.

Sicurezza e di­spo­ni­bi­li­tà

I DBMS re­la­zio­na­li ga­ran­ti­sco­no la coerenza e la di­spo­ni­bi­li­tà dei dati ar­chi­via­ti. Questo aspetto viene anche definito proprietà “ACID”. Post­gre­SQL supporta le proprietà ACID, mentre su MySQL dipende dal motore di ar­chi­via­zio­ne uti­liz­za­to.

La si­tua­zio­ne è simile per quanto riguarda il “Mul­ti­ver­sion Con­cur­ren­cy Control” (MVCC), che ga­ran­ti­sce la coerenza dei dati in caso di accesso si­mul­ta­neo al database. Con Post­gre­SQL MVCC è già presente, mentre con MySQL dipende dal motore di ar­chi­via­zio­ne. In termini di sicurezza, MySQL offre la crit­to­gra­fia TLS mentre Post­gre­SQL utilizza ancora il vecchio standard SSL.

Am­mi­ni­stra­zio­ne

Un aspetto im­por­tan­te del lavoro con i DBMS è il supporto di diverse in­ter­fac­ce di am­mi­ni­stra­zio­ne. Sia Post­gre­SQL che MySQL di­spon­go­no di un’in­ter­fac­cia a riga di comando (CLI), ri­spet­ti­va­men­te con psql e mysql. Uti­liz­zan­do gli strumenti CLI, è possibile con­net­ter­si al database ed eseguire codice SQL tramite input diretto o un file di script.

Oltre alle in­ter­fac­ce a riga di comando, Post­gre­SQL e MySQL di­spon­go­no di in­ter­fac­ce grafiche native e basate sul web (GUI). Gli strumenti di im­por­ta­zio­ne ed espor­ta­zio­ne dedicati con­sen­to­no di creare e ri­pri­sti­na­re i backup dei database. Post­gre­SQL è dotato di pg_dump e pg_restore ed è più potente in termini di backup rispetto al backup di MySQL con dump.

Strumento di am­mi­ni­stra­zio­ne Post­gre­SQL MySQL
Client CLI psql mysql
GUI web php­P­gAd­min ph­p­MyAd­min
GUI nativa pgAdmin MySQL Workbench

Quando si usa Post­gre­SQL piuttosto che MySQL?

Con­fron­tan­do Post­gre­SQL e MySQL, è chiaro che sono molto diversi, ma quale dei due sistemi di gestione dei database conviene usare per il vostro progetto? For­tu­na­ta­men­te, la risposta è semplice. Potete optare per Post­gre­SQL se avete esigenze par­ti­co­la­ri per quanto riguarda il database. In caso contrario, MySQL è suf­fi­cien­te.

In altre parole, si potrebbe usare Post­gre­SQL per im­ple­men­ta­re il sito web di una banca o di un’isti­tu­zio­ne critica. La piena con­for­mi­tà ACID ripaga meglio in questo caso. La maggiore richiesta di stabilità e coerenza dei dati giu­sti­fi­ca la maggiore com­ples­si­tà dell’ORDBMS. Inoltre, sono di­spo­ni­bi­li risorse suf­fi­cien­ti per un ambiente Post­gre­SQL ad alte pre­sta­zio­ni.

Un’altra ap­pli­ca­zio­ne adatta a Post­gre­SQL è nel caso in cui l’ar­chi­tet­tu­ra di un progetto richieda la gestione di modelli di dati so­fi­sti­ca­ti. Per mappare complesse gerarchie di oggetti o quando l’ere­di­ta­rie­tà è richiesta come com­po­nen­te centrale del modello di dati, l’uso del potente ORDBMS è una buona opzione. In questo modo si può evitare l’uso della mappatura re­la­zio­na­le degli oggetti (ORM).

Per i progetti web di piccole e medie di­men­sio­ni, MySQL è invece la scelta migliore. L’RDBMS è meno esigente in termini di risorse del server ed è più facile trovare un am­mi­ni­stra­to­re MySQL esperto a prezzi ac­ces­si­bi­li. Le ottime pre­sta­zio­ni nella lettura dei dati rendono inoltre MySQL una buona opzione per i siti web e i piccoli negozi online.

Infine, va notato che Post­gre­SQL e MySQL possono essere uti­liz­za­ti anche insieme. Questo è par­ti­co­lar­men­te in­te­res­san­te per le soluzioni di data ware­hou­sing. In genere, in una con­fi­gu­ra­zio­ne di questo tipo si uti­liz­za­no una o più istanze MySQL rivolte verso l’esterno. Queste rac­col­go­no i dati e li tra­smet­to­no a un’in­stal­la­zio­ne Post­gre­SQL centrale che esegue va­lu­ta­zio­ni e analisi.

Consiglio

Leggete il nostro confronto tra MariaDB e MySQL.

Vai al menu prin­ci­pa­le