Kapitel 16 Alternativa lagringsmotorer

Lagringsmotorer är MySQL-komponenter som hanterar SQL-operationer för olika tabelltyper. InnoDB är standard och den mest generella lagringsmotorn, och Oracle rekommenderar att du använder den för tabeller utom i specialiserade användningsfall. (CREATE TABLE-angivelsen i MySQL 8.0 skapar InnoDB-tabeller som standard.)

MySQL Server använder en pluggable storage engine-arkitektur som gör att lagringsmotorer kan laddas in i och lossas från en körd MySQL-server.

För att avgöra vilka lagringsmotorer som din server stöder använder du SHOW ENGINES-anvisningen. Värdet i kolumnen Support anger om en motor kan användas. Ett värde YES, NO eller DEFAULT anger att en motor är tillgänglig, inte tillgänglig eller tillgänglig och för närvarande inställd som standardlagringsmotor.

mysql> SHOW ENGINES\G*************************** 1. row *************************** Engine: PERFORMANCE_SCHEMA Support: YES Comment: Performance SchemaTransactions: NO XA: NO Savepoints: NO*************************** 2. row *************************** Engine: InnoDB Support: DEFAULT Comment: Supports transactions, row-level locking, and foreign keysTransactions: YES XA: YES Savepoints: YES*************************** 3. row *************************** Engine: MRG_MYISAM Support: YES Comment: Collection of identical MyISAM tablesTransactions: NO XA: NO Savepoints: NO*************************** 4. row *************************** Engine: BLACKHOLE Support: YES Comment: /dev/null storage engine (anything you write to it disappears)Transactions: NO XA: NO Savepoints: NO*************************** 5. row *************************** Engine: MyISAM Support: YES Comment: MyISAM storage engineTransactions: NO XA: NO Savepoints: NO...

Det här kapitlet behandlar användningsfall för speciella MySQL-lagringsmotorer för speciella ändamål. Det täcker inte standardlagringsmotorn InnoDB eller lagringsmotorn NDB som behandlas i kapitel 15, The InnoDB Storage Engine och kapitel 23, MySQL NDB Cluster 8.0. För avancerade användare innehåller den också en beskrivning av arkitekturen för den pluggable lagringsmotorn (se avsnitt 16.11, ”Översikt över MySQL:s lagringsmotorarkitektur”).

För information om funktioner som erbjuds i kommersiella binärer för MySQL Server, se MySQL Editions, på MySQL:s webbplats. De tillgängliga lagringsmotorerna kan bero på vilken utgåva av MySQL du använder.

För svar på vanliga frågor om MySQL-lagringsmotorer, se avsnitt A.2, ”MySQL 8.0 FAQ”: Lagringsmotorer”.

MySQL 8.0 Supported Storage Engines

  • InnoDB: Standardlagringsmotorn i MySQL 8.0. InnoDB är en transaktionssäker (ACID-kompatibel) lagringsmotor för MySQL som har funktioner för commit, rollback och kraschåterställning för att skydda användardata. InnoDB låsning på radnivå (utan eskalering till lås med grövre granularitet) och Oracle-liknande konsekventa läsningar utan låsning ökar samtidighet och prestanda för flera användare. InnoDB lagrar användardata i klustrade index för att minska I/O för vanliga förfrågningar baserade på primära nycklar. För att upprätthålla dataintegriteten har InnoDB också stöd för FOREIGN KEY referential-integritetsbegränsningar. Mer information om InnoDB finns i kapitel 15, InnoDB-lagringsmotorn.

  • MyISAM: Dessa tabeller har ett litet fotavtryck. Låsning på tabellnivå begränsar prestandan i arbetsbelastningar med läsning/skrivning, så den används ofta i arbetsbelastningar med enbart läsning eller mest läsning i webb- och datalagringskonfigurationer.

  • Memory: Lagrar alla data i RAM, för snabb åtkomst i miljöer som kräver snabba sökningar av icke-kritiska data. Den här motorn var tidigare känd som HEAP-motorn. Dess användningsområden minskar; InnoDB med sitt buffertpoolminne ger ett allmänt och hållbart sätt att förvara de flesta eller alla data i minnet, och NDBCLUSTER ger snabba sökningar av nyckelvärden för enorma distribuerade datamängder.

  • CSV: Dess tabeller är egentligen textfiler med kommaseparerade värden. Med CSV-tabeller kan du importera eller dumpa data i CSV-format för att utbyta data med skript och program som läser och skriver i samma format. Eftersom CSV-tabeller inte är indexerade behåller du vanligtvis data i InnoDB-tabeller under normal drift och använder endast CSV-tabeller under import- eller exportfasen.

  • Archive: Dessa kompakta, oindexerade tabeller är avsedda för lagring och hämtning av stora mängder sällan refererad historisk, arkiverad eller säkerhetsrevisionsinformation.

  • Blackhole: Blackhole-lagringsmotorn tar emot men lagrar inte data, i likhet med Unix-enheten /dev/null. Förfrågningar returnerar alltid en tom mängd. Dessa tabeller kan användas i replikeringskonfigurationer där DML-uttalanden skickas till replikaservrar, men där källservern inte har någon egen kopia av uppgifterna.

  • NDB (även känd som NDBCLUSTER): Den här klustrade databasmotorn är särskilt lämpad för tillämpningar som kräver högsta möjliga grad av drifttid och tillgänglighet.

  • Merge: Gör det möjligt för en MySQL DBA eller utvecklare att logiskt gruppera en rad identiska MyISAM tabeller och referera dem som ett objekt. Bra för VLDB-miljöer som datalager.

  • Federated: Erbjuder möjlighet att länka separata MySQL-servrar för att skapa en logisk databas från många fysiska servrar. Mycket bra för distribuerade miljöer eller datamart-miljöer.

  • Example: Den här motorn fungerar som ett exempel i MySQL:s källkod som illustrerar hur man börjar skriva nya lagringsmotorer. Den är främst av intresse för utvecklare. Lagringsmotorn är en ”stub” som inte gör någonting. Du kan skapa tabeller med den här motorn, men inga data kan lagras i dem eller hämtas från dem.

Du är inte begränsad till att använda samma lagringsmotor för en hel server eller ett helt schema. Du kan ange lagringsmotor för alla tabeller. Ett program kan till exempel använda mestadels InnoDB-tabeller, med en CSV-tabell för export av data till ett kalkylblad och några MEMORY-tabeller för tillfälliga arbetsutrymmen.

Att välja lagringsmotor

De olika lagringsmotorerna som tillhandahålls med MySQL är utformade med olika användningsområden i åtanke. Följande tabell ger en översikt över några lagringsmotorer som tillhandahålls med MySQL, med klargörande anmärkningar efter tabellen.

Tabell 16.1 Storage Engines Feature Summary

.

Feature MyISAM Memory InnoDB Archive NDB
B-.trädindex Ja Ja Ja Nej Nej
Backup/point-in-tid (not 1) Ja Ja Ja Ja Ja
Stöd för klusterdatabaser Nej Nej Nej Nej Nej Nej Ja
Klusterade index Nej Nej Ja Nej Nej Nej
Komprimerade data Ja (anm. 2) Nej Ja Ja Nej
Datacacher Nej N/A Ja Nej Ja
Krypterade data Ja (anm. 3) Ja (anm. 3) Ja (not 4) Ja (not 3) Ja (not 3)
Stöd för utländska nycklar Nej Nej Ja Nej Ja (not 5)
Full-text sökindex Ja Nej Ja (not 6) Nej Nej
Geospatial stöd för datatyper Ja Nej Ja Ja Ja
Geospatial indexering stöd Ja Nej Ja (not 7) Nej Nej
Hash-index Nej Ja Nej (not 8) Nej Ja
Index caches Ja N/A Ja Nej Ja
Låsningsgranularitet Tabell Tabell Rad Row Row
MVCC No No Yes No No No
Stöd för replikering (not 1) Ja Begränsad (not 9) Ja Ja Ja Ja
Lagringsbegränsningar 256TB RAM 64TB Ingen 384EB
T-trädindex No No No No Yes
Transaktioner No No No Yes No No Ja
Uppdatera statistik för datalexikon Ja Ja Ja Ja Ja

Noter:

1. Implementeras i servern, snarare än i lagringsmotorn.

2. Komprimerade MyISAM-tabeller stöds endast när det komprimerade radformatet används. Tabeller som använder det komprimerade radformatet med MyISAM är skrivskyddade.

3. Implementeras i servern via krypteringsfunktioner.

4. Implementeras i servern via krypteringsfunktioner; i MySQL 5.7 och senare stöds kryptering av data i vila.

5. Stöd för utländska nycklar finns i MySQL Cluster NDB 7.3 och senare.

6. Stöd för FULLTEXT-index finns i MySQL 5.6 och senare.

7. Stöd för geospatial indexering finns i MySQL 5.7 och senare.

8. InnoDB använder hash-index internt för sin funktion Adaptive Hash Index.

9. Se diskussionen senare i det här avsnittet.

Lämna ett svar

Din e-postadress kommer inte publiceras.