sql >> Database >  >> RDS >> Mysql

MySQL versus MariaDB

MySQL versus MariaDB

Het achtergrondverhaal van MySQL en MariaDB

MySQL en MariaDB delen een gemeenschappelijke geschiedenis, beide zijn vernoemd naar de dochters van ontwikkelaar Michael Widenius, My en Maria. MySQL is in 1995 gemaakt door een Zweeds softwarebedrijf, MySQL AB . Het groeide in de loop der jaren in populariteit en werd de standaard voor het open-source relationele databasebeheersysteem. In 2008 kocht Sun MySQL AB (en uiteindelijk MySQL) voor $ 1 miljard. Niet lang nadat Sun in april 2009 door Oracle werd gekocht. Op dat moment werd Oracle, een concurrerend databasesysteem, de eigenaren van MySQL. Dit stoorde de oorspronkelijke ontwikkelaars die zagen hoe zij dachten dat de toekomst van MySQL in gevaar was. Volgens de regels van open source besloten ze MySQL te "forken" en MariaDB te creëren. En daar heb je het, MySQL en MariaDB delen een geschiedenis!

We hebben een geweldige tutorial over het installeren van MariaDB om MySQL in WHM te vervangen.

MySQL- en MariaDB-replicatieversies

Slaaf↓ Meester→ 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 Nee Nee Nee Nee Nee Nee
MariaDB-10.0 Ok Ok Ok
MariaDB-10.1 Ok Ok Ok Ok
MariaDB-10.2 Ok Ok Ok Ok Ok Ok

Functievergelijking van MySQL en MariaDB

Meer opslagengines

MariaDB bevat de standaard opslagengines MyISAM, BLACKHOLE, CSV, MEMORY, ARCHIVE en MERGE. Het bevat ook enkele van de minder gebruikelijke opslag-engines zoals;

  • Cassandra (MariaDB 10.0)
  • Spin (MariaDB 10.0+)
  • SEQUENTIE (MariaDB 10.0+)
  • VERBINDEN (MariaDB 10.0+)
  • TokuDB (MariaDB 5.5+)
  • SphinxSE (MariaDB 5.2+)
  • OQGRAPH (niet beschikbaar in MariaDB 5.5)
  • FederatedX (vervanging voor Federated)
  • Aria (MyISAM-vervanging met verbeterde caching)
  • MyRocks (MariaDB 10.2 opslagengine met verbeterde compressie)
  • ColumnStore (een kolomgeoriënteerde opslagengine die is geoptimaliseerd voor datawarehousing)

Snelheidsverbeteringen

MariaDB heeft veel verbeterde verbeteringen ten opzichte van MySQL bij het vergelijken van de Optimizer-functie:

Functie MariaDB 5.3/5.5 MariaDB 10.0 MySQL 5.5 MySQL 5.6
Optimalisaties voor schijftoegang
Index Condition Pushdown (ICP) JA JA JA
Disk-sweep Multi-range lezen (DS-MRR) JA JA JA
DS-MRR met ophalen van sleutels JA JA
Index_merge / Sort_intersection JA JA
Op kosten gebaseerde keuze van bereik vs. index_merge JA JA
BESTEL OP … LIMIET JA JA
Gebruik uitgebreide (verborgen) primaire sleutels voor innodb/xtradb JA (5.5) JA
Deelnemen aan optimalisaties
Batched key access (BKA) JA JA JA
Hash-join blokkeren JA JA
Door de gebruiker ingestelde geheugenlimieten voor alle join-buffers JA JA
Vroege buitenste tabel AAN-voorwaarden toepassen JA JA
Null-afwijzende condities vroeg getest op NULL's JA JA
Subquery-optimalisaties
Bestaat nog JA JA JA JA
Semi-join JA JA JA
Materialisering JA JA JA
NULL-bewuste materialisatie JA JA
Kosten keuze van materialisatie vs. in-to-exists JA JA JA
Subquerycache JA JA
Snel uitleggen met subquery's JA JA
EXISTS-to-IN JA
Optimalisatie voor afgeleide tabellen/weergaven
Vertraagde realisatie van afgeleide tabellen / gerealiseerde weergaven JA JA JA
Direct UITLEG voor afgeleide tabellen JA JA JA
Afgeleide tabel met sleuteloptimalisatie JA JA JA
Velden van samenvoegbare weergaven en afgeleide tabellen die worden gebruikt in gelijkheidsoptimalisaties JA JA
Uitvoeringscontrole
LIMIET RIJEN ONDERZOCHT rows_limit JA (5.5) JA
Optimizer-besturing (optimizer-schakelaar)
Systematische controle van alle optimalisatiestrategieën JA JA gedeeltelijk
LEEG verbeteringen uit
Uitleggen voor DELETE, INSERT, REPLACE en UPDATE Gedeeltelijk JA
UITLEG in JSON-indeling JA
Gedetailleerd en consistent UITLEG voor subquery's JA JA
Optimizer-tracering
Optimizer-tracering JA

  • Parallelle replicatie — nieuw in 10.0; vindt plaats in drie delen:replicatiegebeurtenissen worden gelezen door de IO-thread en in de wachtrij geplaatst in het relaislogboek, afzonderlijk opgehaald door de SQL-thread uit het relaislogboek, en elke gebeurtenis wordt toegepast op de slave en repliceert de wijzigingen op de master.
  • Prestatieverbeteringen omvatten een beter InnoDB asynchrone IO-subsysteem op Windows.
  • Indexen voor de MEMORY(HEAP)-engine zijn sneller. De nieuwste oplossingen zijn toegepast in MariaDB 5.5 en MySQL 5.7.
  • Gesegmenteerde sleutelcache voor MyISAM is toegevoegd in MariaDB 5.2. Dit heeft de prestaties in MyISAM-tabellen tot 4x verbeterd.
  • Vanaf versie 10.0.13 verbetert de instelbare hashgrootte voor MyISAM en Aria de afsluittijd als je veel MyISAM/Aria-tabellen met vertraagde sleutels gebruikt.
  • Met de CHECKSUM TABEL wordt de snelheid verbeterd door de SNELLE optie te gebruiken.
  • De prestaties zijn verbeterd met de tekensetconversies en het verwijderen van conversies (wanneer ze niet nodig waren). De algehele snelheidsverbetering is ongeveer 1-5%, maar kan sneller zijn met grote resultatensets.
  • Pool van threads in MariaDB 5.1/MariaDB 5.5 stelt MariaDB in staat om met 200.000+ verbindingen te werken, wat leidt tot snelheidsverbetering bij het gebruik van veel verbindingen.
  • Verbeteringen in clientverbinding toegevoegd vanaf MariaDB 10.1 en MariaDB 10.2.
  • Sommige verbeteringen aan de DBUG-code binnen MariaDB zorgen ervoor dat de code sneller wordt uitgevoerd als de foutopsporing is gecompileerd, maar niet wordt gebruikt.
  • Het gebruik van de Aria-opslagengine met interne tijdelijke tabellen zorgt voor betere prestaties.
  • De testsuite werkt sneller, zelfs met de uitgebreide testlijst.

Nieuwe functies en uitbreidingen

Beter testen

MariaDB bevat meer tests in de testsuite dan MySQL. Ongeldige en onnodige tests zijn verwijderd. Problemen met de testsuite zijn opgelost.

Minder bugs

Momenteel is de MariaDB-gemeenschap alert en werkt ze om bugs zo snel en grondig mogelijk op te lossen. Bovendien zijn de waarschuwingen van de compiler ook verminderd als gevolg van de vermindering van bugs.

Open source

Alle broncode voor MariaDB wordt vrijgegeven onder GPL, LGPL of BSD. Hoewel MySQL closed source-modules heeft in hun Enterprise Edition, heeft MariaDB geen closed source-modules. MariaDB heeft alle closed source-functies van MySQL 5.5 Enterprise Edition in hun open source-versie opgenomen. MariaDB bevat testcases voor alle nieuwe opgeloste bugs. MySQL biedt geen testcases voor bugs die zijn opgelost in MySQL 5.5. MariaDB maakt alle toekomstige ontwikkelingsplannen openbaar, inclusief bugs en hun oplossingen. MariaDB heeft een grote community en die community van ontwikkelaars omvat een grote verscheidenheid aan bijdragers, terwijl alle commits naar MySQL afkomstig lijken te zijn van Oracle-medewerkers. MySQL-clientbibliotheken worden vrijgegeven onder de GPL-licentie die koppelingen naar closed source-applicaties verbiedt. Integendeel, MariaDB licentieert clientbibliotheken onder de LGPL-licentie, waardoor koppelingen naar closed source-software mogelijk zijn.

Compatibiliteitsproblemen tussen MariaDB en MySQL

MariaDB is ontworpen als een drop-in vervanging voor MySQL en was een afsplitsing van de originele MySQL-codebasis. Dit betekent dat het overstappen van MySQL naar MariaDB een relatief eenvoudig proces is. U verwijdert eenvoudig MySQL en installeert MariaDB. Omdat het een drop-in vervanging is, is het niet nodig om gegevens te converteren. De ontwikkelaars van MariaDB voeren een maandelijkse samenvoeging van de MySQL-code uit om ervoor te zorgen dat ze compatibel blijven. Er zijn verschillende incompatibiliteiten tussen versies van MySQL en MariaDB, ook al zijn versies ontworpen om compatibel te zijn op basis van hun respectievelijke versienummers (bijvoorbeeld MySQL 5.1 -> MariaDB 5.1 &MySQL 5.5 -> MariaDB 5.5).

Incompatibiliteit tussen MariaDB 10.0 en MariaDB 5.5 / MySQL 5.5

  • SET OPTION-syntaxis is verouderd in MariaDB 10.0 en MySQL 5.6. Gebruik gewoon SET.

Incompatibiliteit tussen MariaDB 10.0 en MySQL 5.6

  • Alle MySQL binaries (MySQLd, myisamchk etc.) geven een waarschuwing als men een prefix van een optie gebruikt (zoals –big-table in plaats van –big-tables). MariaDB-binaire bestanden werken op dezelfde manier als de meeste andere Unix-commando's en geven geen waarschuwingen bij het gebruik van unieke voorvoegsels.
  • MariaDB GTID is niet compatibel met MySQL 5.6. Dit betekent dat men MySQL 5.6 niet als slaaf voor MariaDB 10.0 kan hebben. MariaDB 10.0 kan echter een slaaf zijn van MySQL 5.6 of een eerdere MySQL/MariaDB-versie.
  • MariaDB 10.0 multi-source replicatie wordt niet ondersteund in MySQL 5.6.
  • MariaDB 10.0 dynamische kolommen worden niet ondersteund door MySQL 5.6.
  • Om CREATE TABLE … SELECT op dezelfde manier te laten werken in replicatie op basis van instructies en op rijen, wordt het standaard uitgevoerd als CREATE OR REPLACE TABLE op de slave. Een voordeel hiervan is dat als de slaaf sterft in het midden van CREATE ... SELECT, hij kan doorgaan.
  • Men kan de variabele slave-ddl-exec-mode gebruiken om te specificeren hoe CREATE TABLE en DROP TABLE worden gerepliceerd.
  • Zie ook een gedetailleerd overzicht van de verschillen in systeemvariabelen tussen MariaDB 10.0 en MySQL 5.6.
  • MySQL 5.6 heeft standaard prestatieschema ingeschakeld. Om prestatieredenen heeft MariaDB 10.0 het standaard uitgeschakeld. Je kunt het inschakelen door MySQLd te starten met de optie –performance-schema.
  • MariaDB 10.0 ondersteunt de MySQL Memcached-plug-in niet.
  • Gebruikers die zijn gemaakt met het SHA256-wachtwoordalgoritme van MySQL kunnen niet worden gebruikt in MariaDB 10.0.
  • MariaDB 10.0 ondersteunt geen vertraagde replicatie – MDEV-7145.

Incompatibiliteiten tussen MariaDB 10.1 en MySQL 5.7

  • MariaDB 10.1 ondersteunt de JSON van MySQL 5.7 niet.
  • De InnoDB-codering van MariaDB 10.1 is anders geïmplementeerd dan de InnoDB-codering van MySQL 5.7.
  • MariaDB 10.1 ondersteunt de ngram en MeCab full-text parser-plug-ins – MDEV-10267, MDEV-10268, niet.
  • MariaDB 10.1 ondersteunt geen meerdere triggers voor een tabel - MDEV-6112.
  • MariaDB 10.1 ondersteunt CREATE TABLESPACE voor InnoDB niet.

Incompatibiliteiten tussen MariaDB 10.2 en MySQL 5.7

  • Verschillen in systeemvariabelen tussen MariaDB 10.2 en MySQL 5.7.
  • Functieverschillen tussen MariaDB 10.2 en MySQL 5.7.
  • Meerdere triggers per tafel zijn toegevoegd in 10.2
  • MariaDB InnoDB-codering is anders geïmplementeerd dan de InnoDB-codering van MySQL 5.7.
  • MariaDB slaat JSON op als echte tekst, niet in binair formaat als MySQL. De reden is dat onze JSON-functies veel sneller zijn dan die van MySQL, dus we hoefden geen noodzaak in te zien om dingen in binair formaat op te slaan, omdat het veel complexiteit toevoegt bij het manipuleren van JSON-objecten.
  • MariaDB 10.2 biedt geen ondersteuning voor de ngram en MeCab full-text parser-plug-ins - MDEV-10267, MDEV-10268.
  • MariaDB 10.2 ondersteunt de MySQL X-plug-in niet.
  • MariaDB 10.2 ondersteunt de algemene MySQL-tabelruimten niet.
  • Zie ook Incompatibiliteiten tussen MariaDB 10.1 en MySQL 5.7.

  1. Hoe te bepalen of het getal float of integer is

  2. Uw MS SQL-replicatie beheren

  3. Zorg ervoor dat de cursor correct is geïnitialiseerd voordat u er gegevens van opent

  4. Verzamelmethode:LIMIT-functie in Oracle Database