Kapitel 16 Alternative Storage Engines

Storage engines er MySQL-komponenter, der håndterer SQL-operationer for forskellige tabeltyper. InnoDB er standard og den mest generelle lagringsmotor, og Oracle anbefaler at bruge den til tabeller undtagen i specialiserede tilfælde af brug. (CREATE TABLE-anvisningen i MySQL 8.0 opretter InnoDB-tabeller som standard.)

MySQL Server bruger en arkitektur med indsættelige lagringsmotorer, der gør det muligt at indlæse lagringsmotorer i og udlæse dem fra en kørende MySQL-server.

For at bestemme, hvilke lagringsmotorer din server understøtter, skal du bruge SHOW ENGINES-erklæringen. Værdien i kolonnen Support angiver, om en motor kan bruges. En værdi på YES, NO eller DEFAULT angiver, at en motor er tilgængelig, ikke tilgængelig eller tilgængelig og i øjeblikket er indstillet 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...

Dette kapitel dækker anvendelsestilfælde for MySQL-lagringsmotorer til særlige formål. Det dækker ikke standard InnoDB-lagringsmotoren eller NDB-lagringsmotoren, som er dækket i Kapitel 15, InnoDB-lagringsmotoren og Kapitel 23, MySQL NDB Cluster 8.0. For avancerede brugere indeholder den også en beskrivelse af arkitekturen for den pluggable lagringsmotor (se Afsnit 16.11, “Oversigt over MySQL lagringsmotorarkitektur”).

For oplysninger om funktioner, der tilbydes i kommercielle binære MySQL Server-versioner, se MySQL-udgaver på MySQL-webstedet. De tilgængelige lagringsmotorer kan afhænge af, hvilken udgave af MySQL du bruger.

For svar på ofte stillede spørgsmål om MySQL-lagringsmotorer, se Afsnit A.2, “MySQL 8.0 FAQ”: Lagringsmotorer”.

MySQL 8.0 understøttede lagringsmotorer

  • InnoDB: Standardlagringsmotoren i MySQL 8.0. InnoDB er en transaktionssikker (ACID-kompatibel) lagringsmotor til MySQL, der har commit-, rollback- og crash-recovery-funktioner til at beskytte brugerdata. InnoDB låsning på række-niveau (uden eskalering til låsninger med grovere granularitet) og Oracle-style konsistente ikke-låsende læsninger øger flerbrugerkonkurrence og ydeevne. InnoDB gemmer brugerdata i clusterede indekser for at reducere I/O for almindelige forespørgsler baseret på primære nøgler. For at opretholde dataintegriteten understøtter InnoDB også FOREIGN KEY referential-integritetsbegrænsninger. Du kan finde flere oplysninger om InnoDB i kapitel 15, InnoDB-lagringsmotoren.

  • MyISAM: Disse tabeller har et lille fodaftryk. Låsning på tabelniveau begrænser ydeevnen i læse/skrive-arbejdsbelastninger, så den bruges ofte i skrivebeskyttede eller mest læste arbejdsbelastninger i web- og datawarehousing-konfigurationer.

  • Memory: Gemmer alle data i RAM, så der er hurtig adgang i miljøer, der kræver hurtige opslag af ikke-kritiske data. Denne motor var tidligere kendt som HEAP-motoren. Dens anvendelsesområder er faldende; InnoDB giver med sit bufferpool-hukommelsesområde en generel og holdbar måde at opbevare de fleste eller alle data i hukommelsen på, og NDBCLUSTER giver hurtige nøgle-værdiopslag til store distribuerede datasæt.

  • CSV: Dens tabeller er i virkeligheden tekstfiler med kommaseparerede værdier. CSV-tabeller giver dig mulighed for at importere eller dumpe data i CSV-format, så du kan udveksle data med scripts og programmer, der læser og skriver i det samme format. Da CSV-tabeller ikke er indekseret, beholder du typisk dataene i InnoDB-tabeller under normal drift og bruger kun CSV-tabellerne i import- eller eksportfasen.

  • Archive: Disse kompakte, ikke indekserede tabeller er beregnet til lagring og hentning af store mængder af sjældent refererede historiske, arkiverede eller sikkerhedsrevisionsoplysninger.

  • Blackhole: Blackhole-lagringsmotoren accepterer, men lagrer ikke data, svarende til Unix-enheden /dev/null. Forespørgsler returnerer altid et tomt sæt. Disse tabeller kan bruges i replikeringskonfigurationer, hvor DML-angivelser sendes til replikaservere, men hvor kildeserveren ikke beholder sin egen kopi af dataene.

  • NDB (også kendt som NDBCLUSTER): Denne clusterede databasemotor er særlig velegnet til applikationer, der kræver den højest mulige grad af oppetid og tilgængelighed.

  • Merge: Gør det muligt for en MySQL DBA eller udvikler at gruppere en række identiske MyISAM tabeller logisk og henvise til dem som ét objekt. Godt til VLDB-miljøer som f.eks. datawarehousing.

  • Federated: Giver mulighed for at forbinde separate MySQL-servere for at oprette en logisk database fra mange fysiske servere. Meget god til distribuerede miljøer eller datamart-miljøer.

  • Example: Denne motor tjener som et eksempel i MySQL-kildekoden, der illustrerer, hvordan man begynder at skrive nye lagringsmotorer. Den er primært af interesse for udviklere. Lagringsmotoren er en “stub”, der ikke gør noget. Du kan oprette tabeller med denne motor, men der kan ikke lagres data i dem eller hentes data fra dem.

Du er ikke begrænset til at bruge den samme lagringsmotor til en hel server eller et helt skema. Du kan angive lagringsmotoren for en hvilken som helst tabel. Et program kan f.eks. bruge mest InnoDB-tabeller med et CSV-tabeller til eksport af data til et regneark og et par MEMORY-tabeller til midlertidige arbejdsområder.

Valg af lagringsmotor

De forskellige lagringsmotorer, der leveres med MySQL, er designet med forskellige brugssituationer i tankerne. Den følgende tabel giver en oversigt over nogle af de lagringsmotorer, der leveres med MySQL, med forklarende noter efter tabellen.

Tabel 16.1 Oversigt over funktioner i storage-motorer

Funktioner MyISAM Memory InnoDB Archive NDB
B-tree indexes Ja Ja Ja Nej Nej
Backup/point-in-time recovery (note 1) Ja Ja Ja Ja Ja Ja
Understøttelse af klyngedatabase Nej Nej Nej Nej Nej Ja
Clusterede indekser Nej Nej Ja Nej Nej Nej
Komprimerede data Ja (note 2) Nej Ja Ja Ja Nej
Data caches Nej N/A Ja Nej Ja
Krypterede data Ja (note 3) Ja (note 3) Ja (note 3) Ja (note 4) Ja (note 3) Ja (note 3)
Understøttelse af fremmed nøgle Nej Nej Ja Nej Ja (note 5)
Fuld-tekstsøgningsindekser Ja Nej Ja (note 6) Nej Nej Nej
Geospatial understøttelse af datatyper Ja Nej Ja Ja Ja Ja
Geospatial indeksering understøttelse Ja Nej Ja (note 7) Nej Nej Nej
Hash-indekser Nej Ja Nej (note 8) Nej Ja
Indeks-caches Ja N/A Ja Nej Ja
Låsegranularitet Tabel Tabel Tabel Række Row Row
MVCC No No Yes No No No
Understøttelse af gentagelse (note 1) Ja Begrænset (note 9) Ja Ja Ja Ja
Storagebegrænsninger 256TB RAM 64TB Ingen 384EB
T-tree indexes No No No No No Yes
Transactions No No No Yes No No Ja
opdatere statistik for dataordbog Ja Ja Ja Ja Ja Ja

Noter:

1. Implementeret i serveren i stedet for i lagringsmotoren.

2. Komprimerede MyISAM-tabeller understøttes kun, når der anvendes det komprimerede rækkeformat. Tabeller, der anvender det komprimerede rækkeformat med MyISAM, er skrivebeskyttede.

3. Implementeret i serveren via krypteringsfunktioner.

4. Implementeret i serveren via krypteringsfunktioner; I MySQL 5.7 og nyere understøttes kryptering af data i hvile.

5. Understøttelse af fremmednøgler er tilgængelig i MySQL Cluster NDB 7.3 og senere.

6. Understøttelse af FULLTEXT-indekser er tilgængelig i MySQL 5.6 og senere.

7. Understøttelse af geospatial indeksering er tilgængelig i MySQL 5.7 og senere.

8. InnoDB anvender hash-indekser internt til sin funktion Adaptive Hash Index.

9. Se diskussionen senere i dette afsnit.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.