Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL contro MariaDB

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.