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

MySQL versus MariaDB

MySQL versus MariaDB

Baghistorien om MySQL og MariaDB

MySQL og MariaDB deler en fælles historie, begge er opkaldt efter udvikler Michael Widenius' døtre, My og Maria. MySQL blev skabt i 1995 af et svensk softwarefirma, MySQL AB . Det voksede i popularitet i årenes løb og blev standarden for open source relationsdatabasestyringssystemet. I 2008 købte Sun MySQL AB (og i sidste ende MySQL) for 1 mia. Ikke længe efter, at Sun blev købt af Oracle i april 2009. På dette tidspunkt blev Oracle, et konkurrerende databasesystem, ejere af MySQL. Dette generede de oprindelige udviklere ved at se, hvordan de følte, at MySQL's fremtid var i fare. Efter reglerne for open source besluttede de at "fork" MySQL og oprette MariaDB. Og der har du det, MySQL og MariaDB deler en historie!

Vi har en god tutorial om, hvordan man installerer MariaDB for at erstatte MySQL i WHM.

MySQL- og MariaDB-replikeringsversionering

Slave↓ Master→ 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 Nej Nej Nej Nej Nej Nej
MariaDB-10.0 Ok Ok Ok
MariaDB-10.1 Ok Ok Ok Ok
MariaDB-10.2 Ok Ok Ok Ok Ok Ok

Funktionssammenligning af MySQL og MariaDB

Flere lagermotorer

MariaDB indeholder standardlagringsmotorerne MyISAM, BLACKHOLE, CSV, MEMORY, ARCHIVE og MERGE. Det inkluderer også nogle af de mindre almindelige lagermotorer såsom;

  • Cassandra (MariaDB 10.0)
  • Edderkop (MariaDB 10.0+)
  • SEKVENS (MariaDB 10.0+)
  • CONNECT (MariaDB 10.0+)
  • TokuDB (MariaDB 5.5+)
  • SphinxSE (MariaDB 5.2+)
  • OQGRAPH (Ikke tilgængelig i MariaDB 5.5)
  • FederatedX (Drop in erstatning for Federated)
  • Aria (MyISAM-erstatning med forbedret caching)
  • MyRocks (MariaDB 10.2-lagringsmotor med forbedret komprimering)
  • ColumnStore (en kolonneorienteret lagermaskine optimeret til data warehousing)

Hastighedsforbedringer

MariaDB har mange forbedrede forbedringer i forhold til MySQL, når man sammenligner Optimizer-funktionen:

Funktion MariaDB 5.3/5.5 MariaDB 10.0 MySQL 5.5 MySQL 5.6
Optimeringer af diskadgang
Index Condition Pushdown (ICP) JA JA JA
Disk-sweep multi-range read (DS-MRR) JA JA JA
DS-MRR med nøgleordret hentning JA JA
Index_merge / Sort_intersection JA JA
Omkostningsbaseret valg af interval kontra index_merge JA JA
BEstil efter … LIMIT JA JA
Brug udvidede (skjulte) primærnøgler til innodb/xtradb JA (5.5) JA
Deltag optimeringer
Batched nøgleadgang (BKA) JA JA JA
Bloker hash-tilmelding JA JA
Brugerindstillede hukommelsesgrænser på alle joinbuffere JA JA
Anvend tidlige ydre tabel ON-betingelser JA JA
Null-afvisende tilstande testet tidligt for NULL'er JA JA
Underforespørgselsoptimeringer
In-to-exists JA JA JA JA
Semi-join JA JA JA
Materialisering JA JA JA
NULL-bevidst materialisering JA JA
Omkostningsvalg af materialisering vs. in-to-exists JA JA JA
Underforespørgselscache JA JA
Hurtig forklaring med underforespørgsler JA JA
EKSISTERER-til-IN JA
Optimering til afledte tabeller/visninger
Forsinket materialisering af afledte tabeller / materialiserede visninger JA JA JA
Øjeblikkelig EXPLAIN for afledte tabeller JA JA JA
Afledt tabel med nøgleoptimering JA JA JA
Felter med visninger, der kan sammenflettes, og afledte tabeller, der bruges i ligestillingsoptimeringer JA JA
Udførelseskontrol
LIMIT RÆKKER UNDERSØGET rows_limit JA (5.5) JA
Optimeringskontrol (optimeringskontakt)
Systematisk kontrol af alle optimeringsstrategier JA JA delvis
FORKLÆR forbedringer
Forklar for DELETE, INSERT, REPLACE og UPDATE Delvis JA
EXPLAIN i JSON-format JA
Mere detaljeret og konsekvent FORKLARING til underforespørgsler JA JA
Optimeringssporing
Optimeringssporing JA

  • Parallel replikering — ny i 10.0; foregår i tre dele:replikeringshændelser læses af IO-tråden og sættes i kø i relæloggen, hentes individuelt af SQL-tråden fra relæloggen, og hver hændelse anvendes på slaven og replikerer ændringerne på masteren.
  • Ydeevneforbedringer omfatter et bedre InnoDB asynkront IO-undersystem på Windows.
  • Indekser for MEMORY(HEAP)-motoren er hurtigere. De seneste rettelser blev anvendt i MariaDB 5.5 og MySQL 5.7.
  • Segmenteret nøglecache til MyISAM blev tilføjet i MariaDB 5.2. Dette har forbedret ydeevnen i MyISAM-tabeller op til 4x.
  • Fra og med version 10.0.13 forbedrer den justerbare hashstørrelse for MyISAM og Aria nedlukningstiden, hvis du bruger mange MyISAM/Aria-tabeller med forsinkede nøgler.
  • Med KONTROLSUMTABELLEN ved at bruge indstillingen HURTIG forbedres hastigheden.
  • Ydeevnen blev forbedret med konverteringer af tegnsæt og fjernelse af konverteringer (når de ikke var nødvendige). Samlet hastighedsforbedringer er omkring 1-5 %, men kan være hurtigere med store resultatsæt.
  • Pool of Threads i MariaDB 5.1/MariaDB 5.5 tillader MariaDB at køre med 200.000+ forbindelser, hvilket fører til hastighedsforbedring, når der bruges mange forbindelser.
  • Forbedringer af klientforbindelse tilføjet fra MariaDB 10.1 og MariaDB 10.2.
  • Nogle forbedringer af DBUG-koden i MariaDB hjælper med at få koden til at køre hurtigere med fejlretningen kompileret i, men ikke brugt.
  • Brug af Aria-lagermotoren ved hjælp af interne midlertidige tabeller giver mulighed for forbedret ydeevne.
  • Testpakken kører hurtigere selv med den udvidede testliste.

Nye funktioner og udvidelser

Bedre test

MariaDB indeholder flere test i testpakken end MySQL. Ugyldige og eventuelle unødvendige test er blevet fjernet. Problemer med testpakken er blevet rettet.

Færre fejl

I øjeblikket er MariaDB-fællesskabet opmærksomt og arbejder på at rette fejl så hurtigt og så grundigt som muligt. Derudover er compiler-advarsler også blevet reduceret som følge af reduktionen af ​​fejl.

Open Source

Al kildekoden til MariaDB udgives under GPL, LGPL eller BSD. Mens MySQL har lukkede kildemoduler i deres Enterprise Edition, har MariaDB ingen lukkede kildemoduler. MariaDB inkluderede alle de lukkede kildefunktioner indeholdt i MySQL 5.5 Enterprise Edition i deres open source-version. MariaDB inkluderer testcases for alle nye rettede fejl. MySQL leverer ikke testcases for fejl rettet i MySQL 5.5. MariaDB offentliggør alle fremtidige udviklingsplaner, inklusive fejl og deres rettelser. MariaDB har et stort fællesskab, og det fællesskab af udviklere inkluderer en bred vifte af bidragydere, mens alle forpligtelser til MySQL ser ud til at være fra Oracle-ansatte. MySQL-klientbiblioteker frigives under GPL-licensen, som forbyder links til lukkede kildeprogrammer. Tværtimod licenserer MariaDB klientbiblioteker under LGPL-licensen, der tillader linkning til lukket kildesoftware.

Kompatibilitetsproblemer mellem MariaDB og MySQL

MariaDB blev designet til at være en drop-in-erstatning for MySQL og var en forgrening af den originale MySQL-kodebase. Det betyder, at når du skifter fra MySQL til MariaDB, er det en forholdsvis ligetil proces. Du skal blot afinstallere MySQL og installere MariaDB. Da det er en drop-in erstatning, er der ingen grund til at konvertere nogen data. MariaDBs udviklere udfører en månedlig fletning af MySQL-koden for at sikre, at de forbliver kompatible. Der er forskellige inkompatibiliteter mellem versioner af MySQL og MariaDB, selvom versioner er designet til at være kompatible med deres respektive versionsnumre (for eksempel MySQL 5.1 -> MariaDB 5.1 &MySQL 5.5 -> MariaDB 5.5).

Inkompatibilitet mellem MariaDB 10.0 og MariaDB 5.5 / MySQL 5.5

  • SET OPTION-syntaks er forældet i MariaDB 10.0 og MySQL 5.6. Brug kun SET.

Inkompatibilitet mellem MariaDB 10.0 og MySQL 5.6

  • Alle MySQL-binære filer (MySQLd, myisamchk osv.) giver en advarsel, hvis man bruger et præfiks for en mulighed (såsom –big-table i stedet for –big-tables). MariaDB-binære filer fungerer på samme måde som de fleste andre Unix-kommandoer og giver ikke advarsler, når du bruger unikke præfikser.
  • MariaDB GTID er ikke kompatibel med MySQL 5.6. Det betyder, at man ikke kan have MySQL 5.6 som slave for MariaDB 10.0. MariaDB 10.0 kan dog være en slave af MySQL 5.6 eller en hvilken som helst tidligere MySQL/MariaDB-version.
  • MariaDB 10.0 multi-source replikering er ikke understøttet i MySQL 5.6.
  • MariaDB 10.0 dynamiske kolonner understøttes ikke af MySQL 5.6.
  • For at få CREATE TABLE … SELECT til at fungere på samme måde i sætningsbaseret og rækkebaseret replikering, udføres det som standard som CREATE OR REPLACE TABLE på slaven. En fordel ved dette er, at hvis slaven dør midt i CREATE … SELECT vil den kunne fortsætte.
  • Man kan bruge slave-ddl-exec-mode-variablen til at specificere, hvordan CREATE TABLE og DROP TABLE replikeres.
  • Se også en detaljeret oversigt over systemvariable forskelle mellem MariaDB 10.0 og MySQL 5.6.
  • MySQL 5.6 har ydeevneskema aktiveret som standard. Af præstationsmæssige årsager har MariaDB 10.0 det deaktiveret som standard. Du kan aktivere det ved at starte MySQLd med muligheden –performance-schema.
  • MariaDB 10.0 understøtter ikke MySQL Memcached plugin.
  • Brugere oprettet med MySQL's SHA256-adgangskodealgoritme kan ikke bruges i MariaDB 10.0.
  • MariaDB 10.0 understøtter ikke forsinket replikering – MDEV-7145.

Inkompatibilitet mellem MariaDB 10.1 og MySQL 5.7

  • MariaDB 10.1 understøtter ikke MySQL 5.7's JSON.
  • MariaDB 10.1's InnoDB-kryptering er implementeret anderledes end MySQL 5.7's InnoDB-kryptering.
  • MariaDB 10.1 understøtter ikke ngram og MeCab fuldtekstparser-plugins – MDEV-10267, MDEV-10268.
  • MariaDB 10.1 understøtter ikke flere triggere for en tabel – MDEV-6112.
  • MariaDB 10.1 understøtter ikke CREATE TABLESPACE til InnoDB.

Inkompatibilitet mellem MariaDB 10.2 og MySQL 5.7

  • Systemvariable forskelle mellem MariaDB 10.2 og MySQL 5.7.
  • Funktionsforskelle mellem MariaDB 10.2 og MySQL 5.7.
  • Flere udløsere pr. tabel blev tilføjet i 10.2
  • MariaDB InnoDB-kryptering er implementeret anderledes end MySQL 5.7's InnoDB-kryptering.
  • MariaDB gemmer JSON som ægte tekst, ikke i binært format som MySQL. Årsagen er, at vores JSON-funktioner er meget hurtigere end MySQL's, så vi behøvede ikke at se et behov for at gemme ting i binært format, da det tilføjer en masse kompleksitet, når man manipulerer JSON-objekter.
  • MariaDB 10.2 understøtter ikke ngram og MeCab fuldtekstparser-plugins – MDEV-10267, MDEV-10268.
  • MariaDB 10.2 understøtter ikke MySQL X-plugin.
  • MariaDB 10.2 understøtter ikke MySQL generelle tablespaces.
  • Se også Inkompatibiliteter mellem MariaDB 10.1 og MySQL 5.7.

  1. Parse parameter standardværdier ved hjælp af PowerShell – Del 2

  2. Sådan eksporteres tomme tabeller i Oracle

  3. Forskellen mellem sys.views, sys.system_views og sys.all_views i SQL Server

  4. Konfiguration af ScaleGrid-tilladelser på AWS ved hjælp af en IAM-politikskabelon