MySQL contro MariaDB
Il passato di MySQL e MariaDB
MySQL e MariaDB condividono una storia comune, entrambi prendono il nome dalle figlie dello sviluppatore Michael Widenius, My e Maria. MySQL è stato creato nel 1995 da una società di software svedese, MySQL AB . È cresciuto in popolarità nel corso degli anni ed è diventato lo standard per il sistema di gestione di database relazionali open source. Nel 2008, Sun ha acquistato MySQL AB (e infine MySQL) per 1 miliardo di dollari. Non molto tempo dopo che Sun è stata acquistata da Oracle nell'aprile del 2009. A questo punto, Oracle, un sistema di database concorrente, è diventato il proprietario di MySQL. Questo ha infastidito gli sviluppatori originali vedendo come sentivano che il futuro di MySQL fosse in pericolo. Seguendo le regole dell'open source, hanno deciso di "fork" MySQL e creare MariaDB. E il gioco è fatto, MySQL e MariaDB condividono una cronologia!
Abbiamo un ottimo tutorial su come installare MariaDB per sostituire MySQL in WHM.
Versione della replica di MySQL e MariaDB
Schiavo↓ Maestro→ | MariaDB-5.5 | MariaDB-10.0 | MariaDB-10.1 | MariaDB-10.2 | MySQL-5.6 | MySQL-5.7 | MySQL-8.0 |
---|---|---|---|---|---|---|---|
MariaDB-5.5 | Ok | No | No | No | No | No | No |
MariaDB-10.0 | Ok | Ok | Ok | ||||
MariaDB-10.1 | Ok | Ok | Ok | Ok | |||
MariaDB-10.2 | Ok | Ok | Ok | Ok | Ok | Ok |
Confronto delle funzionalità di MySQL e MariaDB
Più motori di archiviazione
MariaDB contiene i motori di archiviazione standard MyISAM, BLACKHOLE, CSV, MEMORY, ARCHIVE e MERGE. Include anche alcuni dei motori di archiviazione meno comuni come;
- Cassandra (MariaDB 10.0)
- Spider (MariaDB 10.0+)
- SEQUENZA (MariaDB 10.0+)
- CONNECT (MariaDB 10.0+)
- TokuDB (MariaDB 5.5+)
- Sfinge SE (MariaDB 5.2+)
- OQGRAPH (non disponibile in MariaDB 5.5)
- FederatedX (drop in sostituzione di Federated)
- Aria (sostituzione MyISAM con cache migliorata)
- MyRocks (motore di archiviazione MariaDB 10.2 con compressione avanzata)
- ColumnStore (un motore di archiviazione orientato alle colonne ottimizzato per il data warehousing)
Miglioramenti alla velocità
MariaDB ha molti miglioramenti migliorati rispetto a MySQL quando si confronta la funzione Optimizer:
Funzione | MariaDB 5.3/5.5 | MariaDB 10.0 | MySQL 5.5 | MySQL 5.6 |
---|---|---|---|---|
Ottimizzazioni dell'accesso al disco | ||||
Index Condition Pushdown (ICP) | SI | SI | – | SI |
Lettura a più intervalli di scansione del disco (DS-MRR) | SI | SI | – | SI |
DS-MRR con recupero ordinato tramite chiave | SI | SI | – | – |
Unisci_indice / Intersezione_ordinamento | SI | SI | – | – |
Scelta dell'intervallo basata sui costi rispetto a index_merge | SI | SI | – | – |
ORDINA PER … LIMITE | – | SI | – | SI |
Usa chiavi primarie estese (nascoste) per innodb/xtradb | SI (5.5) | SI | – | – |
Unisciti alle ottimizzazioni | ||||
Accesso chiave in batch (BKA) | SI | SI | – | SI |
Blocca hash join | SI | SI | – | – |
Limiti di memoria impostati dall'utente su tutti i buffer di join | SI | SI | – | – |
Applica le condizioni iniziali della tabella esterna ON | SI | SI | – | – |
Condizioni di rifiuto dei nulli testate in anticipo per i NULL | SI | SI | – | – |
Ottimizzazioni delle sottoquery | ||||
In-to-exist | SI | SI | SI | SI |
Semi-unita | SI | SI | – | SI |
Materializzazione | SI | SI | – | SI |
Materializzazione sensibile a NULL | SI | SI | – | – |
Scelta del costo della materializzazione rispetto all'in-to-exist | SI | SI | – | SI |
Cache di sottoquery | SI | SI | – | – |
Spiegazione veloce con sottoquery | SI | SI | – | – |
EXISTS-to-IN | – | SI | – | – |
Ottimizzazione per tabelle/viste derivate | ||||
Materializzazione ritardata di tabelle derivate/viste materializzate | SI | SI | – | SI |
SPIEGAZIONE istantanea per tabelle derivate | SI | SI | – | SI |
Tabella derivata con ottimizzazione delle chiavi | SI | SI | – | SI |
Campi di viste unificabili e tabelle derivate utilizzate nelle ottimizzazioni dell'uguaglianza | SI | SI | – | – |
Controllo dell'esecuzione | ||||
LIMITE RIGHE ESAMINATE righe_limit | SI (5.5) | SI | – | – |
Controllo dell'ottimizzatore (interruttore dell'ottimizzatore) | ||||
Controllo sistematico di tutte le strategie di ottimizzazione | SI | SI | – | parziale |
SPIEGAZIONE miglioramenti | ||||
Spiega per DELETE, INSERT, REPLACE e UPDATE | – | Parziale | – | SI |
EXPLAIN in formato JSON | – | – | – | SI |
SPIEGAZIONE più dettagliata e coerente per le sottoquery | SI | SI | – | – |
Traccia dell'ottimizzatore | ||||
Traccia dell'ottimizzatore | – | – | – | SI |
- Replica parallela — nuovo in 10.0; avviene in tre parti:gli eventi di replica vengono letti dal thread IO e accodati nel registro di inoltro, prelevati individualmente dal thread SQL dal registro di inoltro e ogni evento viene applicato sullo slave replicando le modifiche sul master.
- I miglioramenti delle prestazioni includono un sottosistema IO asincrono InnoDB migliore su Windows.
- Gli indici per il motore MEMORY(HEAP) sono più veloci. Le ultime correzioni sono state applicate in MariaDB 5.5 e MySQL 5.7.
- La cache delle chiavi segmentata per MyISAM è stata aggiunta in MariaDB 5.2. Ciò ha migliorato le prestazioni nelle tabelle MyISAM fino a 4 volte.
- A partire dalla versione 10.0.13, la dimensione dell'hash regolabile per MyISAM e Aria migliora i tempi di spegnimento se si utilizzano molte tabelle MyISAM/Aria con chiavi ritardate.
- Con la TABELLA CHECKSUM l'utilizzo dell'opzione RAPIDO migliora la velocità.
- Le prestazioni sono state migliorate con le conversioni del set di caratteri e la rimozione delle conversioni (quando non erano necessarie). Il miglioramento complessivo della velocità è di circa l'1-5%, ma può essere più rapido con grandi set di risultati.
- Il pool di thread in MariaDB 5.1/MariaDB 5.5 consente a MariaDB di funzionare con oltre 200.000 connessioni, migliorando la velocità quando si utilizzano molte connessioni.
- Aggiunti miglioramenti alla connessione client a partire da MariaDB 10.1 e MariaDB 10.2.
- Alcuni miglioramenti al codice DBUG all'interno di MariaDB aiutano a rendere il codice più veloce con il debug compilato, ma non utilizzato.
- L'utilizzo del motore di archiviazione Aria tramite tabelle temporanee interne consente di migliorare le prestazioni.
- La suite di test funziona più velocemente anche con l'elenco di test esteso.
Nuove funzionalità ed estensioni
Test migliori
MariaDB contiene più test nella suite di test rispetto a MySQL. I test non validi e non necessari sono stati rimossi. I problemi con la suite di test sono stati risolti.
Meno bug
Attualmente, la comunità di MariaDB è vigile e lavora per correggere i bug nel modo più rapido e completo possibile. Inoltre, anche gli avvisi del compilatore sono stati ridotti a causa della riduzione dei bug.
Open Source
Tutto il codice sorgente per MariaDB è rilasciato sotto GPL, LGPL o BSD. Sebbene MySQL abbia moduli closed source nella loro Enterprise Edition, MariaDB non ha moduli closed source. MariaDB ha incluso tutte le funzionalità closed source contenute in MySQL 5.5 Enterprise Edition nella loro versione open source. MariaDB include casi di test per tutti i nuovi bug corretti. MySQL non fornisce casi di test per i bug corretti in MySQL 5.5. MariaDB rende pubblici tutti i piani di sviluppo futuri, inclusi i bug e le relative correzioni. MariaDB ha una vasta comunità e quella comunità di sviluppatori include un'ampia varietà di contributori, mentre tutti i commit su MySQL sembrano provenire da dipendenti Oracle. Le librerie client MySQL sono rilasciate sotto la licenza GPL che proibisce il collegamento ad applicazioni closed source. Al contrario, MariaDB concede in licenza le librerie client con la licenza LGPL consentendo il collegamento a software closed source.
Problemi di compatibilità tra MariaDB e MySQL
MariaDB è stato progettato per essere un sostituto drop-in di MySQL ed era un fork della base di codice MySQL originale. Ciò significa che quando si passa da MySQL a MariaDB è un processo relativamente semplice. Devi semplicemente disinstallare MySQL e installare MariaDB. Poiché si tratta di un sostituto drop-in, non è necessario convertire alcun dato. Gli sviluppatori di MariaDB eseguono un'unione mensile del codice MySQL per assicurarsi che rimangano compatibili. Esistono diverse incompatibilità tra le versioni di MySQL e MariaDB anche se le versioni sono progettate per essere compatibili con i rispettivi numeri di versione (ad esempio MySQL 5.1 -> MariaDB 5.1 e MySQL 5.5 -> MariaDB 5.5).
Incompatibilità tra MariaDB 10.0 e MariaDB 5.5 / MySQL 5.5
- La sintassi SET OPTION è deprecata in MariaDB 10.0 e MySQL 5.6. Usa solo SET.
Incompatibilità tra MariaDB 10.0 e MySQL 5.6
- Tutti i binari MySQL (MySQLd, myisamchk ecc.) danno un avviso se si usa un prefisso di un'opzione (come –big-table invece di –big-tables). I binari di MariaDB funzionano allo stesso modo della maggior parte degli altri comandi Unix e non danno avvisi quando si utilizzano prefissi univoci.
- MariaDB GTID non è compatibile con MySQL 5.6. Ciò significa che non è possibile avere MySQL 5.6 come slave per MariaDB 10.0. Tuttavia MariaDB 10.0 può essere uno schiavo di MySQL 5.6 o di qualsiasi versione precedente di MySQL/MariaDB.
- La replica multi-sorgente di MariaDB 10.0 non è supportata in MySQL 5.6.
- Le colonne dinamiche di MariaDB 10.0 non sono supportate da MySQL 5.6.
- Per fare in modo che CREATE TABLE … SELECT funzioni allo stesso modo nella replica basata su istruzioni e basata su riga, per impostazione predefinita viene eseguito come CREATE OR REPLACE TABLE sullo slave. Un vantaggio di questo è che se lo schiavo muore nel mezzo di CREA... SELECT sarà in grado di continuare.
- Si può usare la variabile slave-ddl-exec-mode per specificare come vengono replicati CREATE TABLE e DROP TABLE.
- Vedi anche una ripartizione dettagliata delle differenze delle variabili di sistema tra MariaDB 10.0 e MySQL 5.6.
- MySQL 5.6 ha lo schema delle prestazioni abilitato per impostazione predefinita. Per motivi di prestazioni, MariaDB 10.0 lo ha disabilitato per impostazione predefinita. Puoi abilitarlo avviando MySQLd con l'opzione –performance-schema.
- MariaDB 10.0 non supporta il plugin MySQL Memcached.
- Gli utenti creati con l'algoritmo password SHA256 di MySQL non possono essere utilizzati in MariaDB 10.0.
- MariaDB 10.0 non supporta la replica ritardata – MDEV-7145.
Incompatibilità tra MariaDB 10.1 e MySQL 5.7
- MariaDB 10.1 non supporta JSON di MySQL 5.7.
- La crittografia InnoDB di MariaDB 10.1 è implementata in modo diverso rispetto alla crittografia InnoDB di MySQL 5.7.
- MariaDB 10.1 non supporta i plug-in del parser full-text ngram e MeCab – MDEV-10267, MDEV-10268.
- MariaDB 10.1 non supporta più trigger per una tabella – MDEV-6112.
- MariaDB 10.1 non supporta CREATE TABLESPACE per InnoDB.
Incompatibilità tra MariaDB 10.2 e MySQL 5.7
- Differenze delle variabili di sistema tra MariaDB 10.2 e MySQL 5.7.
- Differenze funzionali tra MariaDB 10.2 e MySQL 5.7.
- Nella versione 10.2 sono stati aggiunti più trigger per tabella
- La crittografia InnoDB di MariaDB è implementata in modo diverso rispetto alla crittografia InnoDB di MySQL 5.7.
- MariaDB memorizza JSON come vero testo, non in formato binario come MySQL. Il motivo è che le nostre funzioni JSON sono molto più veloci di quelle di MySQL, quindi non abbiamo dovuto vedere la necessità di archiviare le cose in formato binario poiché aggiunge molta complessità durante la manipolazione di oggetti JSON.
- MariaDB 10.2 non supporta i plug-in del parser full-text ngram e MeCab – MDEV-10267, MDEV-10268.
- MariaDB 10.2 non supporta il plugin MySQL X.
- MariaDB 10.2 non supporta i tablespace generali MySQL.
- Vedi anche Incompatibilità tra MariaDB 10.1 e MySQL 5.7.