MySQL è uno dei database più utilizzati al mondo. È gratuito ed è anche open source. Sviluppato in C/C++, è a tutt’oggi una delle scelte di database più popolari.

MySql è stato avviato da una società svedese “MySQL AB” nel 1995, successivamente è stato acquisito da Sun Microsystems nel 2008. La Sun Microsystems è stata acquisita da Oracle nel 2010 e da allora, MySQL è mantenuto e gestito da Oracle.

Durante l’acquisizione di Sun Microsystems da parte di Oracle, alcuni degli ingegneri senior che stavano lavorando allo sviluppo di MySQL hanno ritenuto che vi fosse un conflitto di interessi tra MySQL e il database commerciale di Oracle, Oracle Database Server. Di conseguenza, questi ingegneri hanno creato un fork della base di codice MySQL e hanno avviato la propria organizzazione. Così è nata MariaDB.

Ad oggi, entrambi i database sono molto popolari e sono ampiamente utilizzati dalla comunità degli sviluppatori. 

MariaDB vs MySQL

Confronto prestazioni MariaDB e MySQL

MariaDB ha diverse ottimizzazioni che tendono a migliorare le prestazioni rispetto a MySQL. In effetti, questa era esattamente la visione in mente quando MariaDB è stata avviata da Michael Widenius, il fondatore originale sia di MySQL che di MariaDB.

Viste del database

Le “viste” sono essenzialmente tabelle di database virtuali che possono essere interrogate come normali tabelle del database. In MySQL, quando si esegue una query su una vista, vengono interrogate tutte le tabelle collegate alla vista, indipendentemente dal fatto che la query potrebbe non richiedere alcune delle viste. Questo è stato ottimizzato in MariaDB dove vengono interrogate solo le tabelle richieste dalla query.

ColumnStore

MariaDB fornisce un altro potente miglioramento delle prestazioni sotto forma di “ColumnStore”, che è un’architettura di dati distribuita che consente di scalare notevolmente MariaDB. Può scalare linearmente per archiviare petabyte di dati su vari server in un cluster di database.

Migliori prestazioni nell’archiviazione flash

MariaDB fornisce il motore di archiviazione MyRocks che aggiunge ad esso il database RocksDB, un database che è stato progettato per assicurare prestazioni migliorate nell’archiviazione flash fornendo un livello più elevato di compressione dei dati.

Cache chiavi segmentate

MariaDB introduce un altro miglioramento delle prestazioni sotto forma di Segmented Key Cache. In una cache tipica, vari thread competono per prendere un blocco sulla voce memorizzata nella cache. Questi blocchi sono chiamati mutex. Quando più thread sono in competizione per un mutex, solo uno di loro è in grado di ottenerlo mentre altri devono attendere che il blocco venga liberato prima di eseguire l’operazione. Ciò porta in questi thread a ritardi di esecuzione che rallentano le prestazioni del database.

In caso di Segmented Key Cache, il thread non blocca l’intera pagina, ma può bloccare solo il particolare segmento a cui appartiene la pagina. Ciò consente a più thread di funzionare in parallelo, aumentando così il parallelismo nell’applicazione e migliorando le prestazioni del database.

Colonne virtuali

Una caratteristica interessante che MariaDB supporta è quella delle colonne virtuali. Queste colonne sono in grado di eseguire i calcoli a livello di database. Questo è estremamente utile quando molte applicazioni accedono alla stessa colonna e quindi non è necessario scrivere il calcolo in ciascuna applicazione: il database può farlo per te. Questa funzione non è disponibile in MySQL.

Esecuzione parallela di query

Una delle versioni recenti di MariaDB consente l’esecuzione parallela di diverse query. L’idea è che alcune query del Master possano essere replicate nello slave e possano, quindi, essere eseguite in parallelo. Questo parallelismo nell’esecuzione delle query fornisce sicuramente a MariaDB un vantaggio rispetto a MySQL.

Raggruppamento di thread

MariaDB introduce anche un nuovo concetto chiamato “Thread Pooling”. In precedenza, quando erano necessarie più connessioni a un database, per ogni connessione veniva aperto un thread che portava a un’architettura basata su “un thread per connessione”. Con “Thread Pooling”, ci sarà un pool di thread aperti che una nuova connessione può raccogliere ed interrogare il database. In questo modo, non è necessario aprire un nuovo thread per ogni nuova richiesta di connessione che porta a risultati di query più rapidi. Questa funzione è disponibile nell’edizione Enterprise di MySQL ma purtroppo non è disponibile nell’edizione Community.

Motori di archiviazione

MariaDB fornisce diversi potenti motori di archiviazione pronti all’uso che non sono disponibili in MySQL. Ad esempio, XtraDB, Aria, ecc. Per configurare questi motori di archiviazione per MySQL, è necessario installarli manualmente, il che potrebbe non essere la cosa più conveniente.

Compatibilità

Il team di MariaDB si sta assicurando che MariaDB possa sostituire senza problemi MySQL nelle applicazioni esistenti. Infatti, per ogni versione di MySQL, rilasciano lo stesso numero di versione di MariaDB per indicare che MariaDB è generalmente compatibile con la corrispondente versione di MySQL. Questo apre la possibilità di passare a MariaDB senza soluzione di continuità senza alcuna modifica nel codice dell’applicazione.

Open Source vs Database proprietario

MySQL è un grande progetto ed è gestito da una delle più grandi organizzazioni al mondo: Oracle. Questo ha i suoi pro e contro. Uno dei maggiori svantaggi è che il rilascio di nuove funzionalità in organizzazioni così grandi richiede molto tempo. D’altra parte, MariaDB è completamente open source e sono abbastanza veloci nell’accettare contributi esterni e nel rilasciare nuove funzionalità e miglioramenti. Questo è un altro punto da tenere a mente quando si decide tra MySQL e MariaDB.

Tabella di confronto tra MariaDB e MySQL

La tabella seguente riassume i confronti tra MariaDB e MySQL:

Maria DB MySQL
Le prestazioni di MariaDB sono migliori. Le prestazioni di MySQL non sono eccezionali se confrontate con MariaDB.
MariaDB consente il collegamento con software closed source. MySQL non consente il collegamento con software closed source.
MariaDB è più trasparente. MySQL non è affatto trasparente.
MariaDB fornisce un sostituto drop-in per MySQL. MySQL non fornisce un sostituto per MariaDB.
MariaDB non ha un plugin per la password di convalida per impostazione predefinita. MySQL ha un plug-in di convalida della password per impostazione predefinita.
MariaDB non supporta il tipo JSON nativo ma supporta il tipo di colonna di testo. MySQL supporta il tipo JSON nativo.
Il protocollo MySQL non è seguito in MariaDB. MySQL segue il protocollo MySQL.
MariaDB supporta il tablespace temporaneo e la crittografia binaria. MySQL non supporta log binari o tablespace temporanei.
Il plugin di gestione delle chiavi di MariaDB è AWS. Il plugin per la gestione delle chiavi di MySQL è disponibile solo nell’edizione Enterprise.
MariaDB non ha alcuno schema per l’ottimizzazione e l’interpretazione dei dati. MySQL ha uno schema SYS per l’ottimizzazione e l’interpretazione dei dati.
MariaDB ha la possibilità di creare colonne invisibili. MySQL non ha un’opzione per creare colonne invisibili.
I pool di thread di connessione sono presenti in MariaDB. I pool di thread non sono disponibili in MySQL.
Il formato predefinito del log binario in MariaDB è misto. Il formato predefinito del log binario di MySQL è basato su righe.
Un log binario può essere compresso in MariaDB. Un log binario non può essere compresso in MySQL.
Le correzioni di bug vengono eseguite più frequentemente in MariaDB. In MySQL, le correzioni di bug vengono eseguite meno frequentemente.
Solo le tabelle che vengono interrogate saranno visibili in MariaDB. Tutte le tabelle verranno visualizzate indipendentemente dalla query.
Il ridimensionamento viene eseguito in MariaDB con l’aiuto di Columnstore. Columnstore non è disponibile in MySQL.
A causa della compressione dei dati, MariaDB mostra buone prestazioni di archiviazione. Le prestazioni di archiviazione non sono eccezionali rispetto a MariaDB.
Più thread funzionano in parallelo, offrendo migliori prestazioni del database. I thread non funzionano in parallelo in MySQL.
Nuove funzionalità vengono rilasciate spesso. Il rilascio di nuove funzionalità richiede tempo.
MariaDB è più veloce. MySQL non è veloce come MariaDB.
Il mascheramento dei dati non viene eseguito in MariaDB. Il mascheramento dei dati viene eseguito in MySQL.
I dati di grandi dimensioni possono essere utilizzati facilmente in MariaDB. I dati di grandi dimensioni non possono essere utilizzati facilmente in MySQL.
MariaDB ha compatibilità con le versioni precedenti. MySQL non supporta la retrocompatibilità.
Il collegamento con software closed source viene eseguito in MariaDB. Il collegamento con software closed source non viene eseguito in MySQL.
Sono forniti casi di test per tutti i bug risolti. I casi di test non sono forniti.
Le regole di confronto sono più supportate in MariaDB. Le regole di confronto sono meno supportate in MySQL.
Sono disponibili diverse configurazioni per il test delle funzionalità in MariaDB. Le configurazioni per il test delle funzionalità non sono disponibili in MySQL.
Il test con la suite di test è migliore in MariaDB. Il test non è buono come MariaDB in MySQL.
Le query complesse possono essere risolte più velocemente. Le query complesse non vengono risolte più velocemente.
Il motore di archiviazione della memoria è migliore in MariaDB. In MySQL, i motori di archiviazione della memoria non sono più veloci di MariaDB.
Il codice proprietario non è accessibile in MariaDB. Il codice proprietario è accessibile nell’edizione Enterprise di MySQL.
I modelli di database secondari sono Document store e Graph DBMS. Il modello di database secondario è l’archivio documenti.
OS X non è supportato come server in MariaDB. OS X è supportato come server in MySQL.
Il linguaggio Delphi non è supportato in MariaDB. La lingua Go non è supportata in MySQL.
I controlli dei privilegi vengono eseguiti più velocemente in MariaDB. I controlli dei privilegi non sono così veloci in MySQL.

Conclusione

MariaDB è senza dubbio abbastanza potente e fornisce molte funzionalità estremamente utili e non supportate in MySQL. Tali caratteristiche rendono infatti MariaDB una scelta redditizia da utilizzare come database di backend. In generale, le organizzazioni che hanno già acquistato licenze per Oracle non devono investire in MariaDB. Tuttavia, coloro che stanno ricominciando da capo e vogliono decidere quale database utilizzare, senza dubbio MariaDB è una scelta migliore.