Kapitola 16 Alternativní úložné motory

Úložné motory jsou komponenty MySQL, které zpracovávají operace SQL pro různé typy tabulek. InnoDB Je to výchozí a nejobecnější úložný engine a společnost Oracle jej doporučuje používat pro tabulky s výjimkou specializovaných případů použití. (Příkaz CREATE TABLE v MySQL 8.0 vytváří ve výchozím nastavení tabulky InnoDB.)

MySQL Server používá architekturu zásuvných úložných motorů, která umožňuje načítat úložné motory do běžícího serveru MySQL a odpojovat je od něj.

Chcete-li zjistit, které úložné motory váš server podporuje, použijte příkaz SHOW ENGINES. Hodnota ve sloupci Support udává, zda lze daný engine použít. Hodnota YES, NO nebo DEFAULT označuje, že engine je k dispozici, není k dispozici nebo je k dispozici a je aktuálně nastaven jako výchozí úložný engine.

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...

Tato kapitola se zabývá případy použití speciálních úložných motorů MySQL. Nezabývá se výchozím úložným motorem InnoDB ani úložným motorem NDB, které jsou popsány v kapitole 15, Úložný motor InnoDB a kapitole 23, MySQL NDB Cluster 8.0. Pro pokročilé uživatele obsahuje také popis architektury zásuvných úložných motorů (viz kapitola 16.11, „Přehled architektury úložných motorů MySQL“).

Informace o funkcích nabízených v komerčních binárních verzích serveru MySQL naleznete v části MySQL Editions na webových stránkách MySQL. Dostupné úložné motory mohou záviset na tom, jakou edici MySQL používáte.

Odpovědi na často kladené otázky týkající se úložných motorů MySQL naleznete v části A.2, „MySQL 8.0 FAQ:

Podporované úložné motory MySQL 8.0

  • InnoDB: Výchozí úložný motor v MySQL 8.0. InnoDB je transakčně bezpečný (ACID kompatibilní) úložný engine pro MySQL, který má funkce commit, rollback a crash-recovery pro ochranu uživatelských dat. Zamykání na úrovni řádků InnoDB (bez eskalace na zámky s hrubší granularitou) a konzistentní nezamykající čtení ve stylu Oracle zvyšují souběžnost a výkonnost více uživatelů. InnoDB Ukládá uživatelská data do clusterových indexů, aby se snížil počet I/O pro běžné dotazy založené na primárních klíčích. Pro zachování integrity dat podporuje InnoDB také omezení FOREIGN KEY referenční integrity. Další informace o InnoDB najdete v kapitole 15, Úložný engine InnoDB.

  • MyISAM: Tyto tabulky mají malou plochu. Zamykání na úrovni tabulky omezuje výkon v zátěžích čtení/zápis, proto se často používá v zátěžích pouze pro čtení nebo převážně pro čtení v konfiguracích webu a datových skladů.

  • Memory: Ukládá všechna data do paměti RAM pro rychlý přístup v prostředích, která vyžadují rychlé vyhledávání nekritických dat. Tento engine byl dříve znám jako engine HEAP. Případů jeho použití ubývá; InnoDB se svou vyrovnávací paměťovou oblastí buffer pool poskytuje univerzální a trvanlivý způsob uchovávání většiny nebo všech dat v paměti a NDBCLUSTER poskytuje rychlé vyhledávání klíčových hodnot pro obrovské distribuované datové sady.

  • CSV: Jeho tabulky jsou ve skutečnosti textové soubory s hodnotami oddělenými čárkou. Tabulky CSV umožňují importovat nebo vypisovat data ve formátu CSV pro výměnu dat se skripty a aplikacemi, které čtou a zapisují ve stejném formátu. Protože tabulky CSV nejsou indexované, při běžném provozu obvykle uchováváte data v tabulkách InnoDB a tabulky CSV používáte pouze ve fázi importu nebo exportu.

  • Archive: Tyto kompaktní neindexované tabulky jsou určeny k ukládání a vyhledávání velkého množství zřídkakdy odkazovaných historických, archivovaných nebo bezpečnostních auditních informací.

  • Blackhole: Úložiště Blackhole přijímá, ale neukládá data, podobně jako unixové zařízení /dev/null. Dotazy vždy vracejí prázdnou množinu. Tyto tabulky lze použít v konfiguracích replikace, kdy jsou příkazy DML odesílány na servery replik, ale zdrojový server neuchovává vlastní kopii dat.

  • NDB (známé také jako NDBCLUSTER): Tento clusterový databázový stroj je vhodný zejména pro aplikace, které vyžadují nejvyšší možnou míru provozuschopnosti a dostupnosti.

  • Merge: Umožňuje DBA nebo vývojáři MySQL logicky seskupit řadu stejných MyISAM tabulek a odkazovat na ně jako na jeden objekt. Vhodné pro prostředí VLDB, například pro datové sklady.

  • Federated: Nabízí možnost propojit samostatné servery MySQL a vytvořit jednu logickou databázi z mnoha fyzických serverů. Velmi dobré pro distribuovaná prostředí nebo prostředí data mart.

  • Example: Tento stroj slouží jako příklad ve zdrojovém kódu MySQL, který ilustruje, jak začít psát nové úložné stroje. Zajímá především vývojáře. Úložný engine je „stub“, který nic nedělá. Pomocí tohoto enginu můžete vytvářet tabulky, ale nelze do nich ukládat ani z nich načítat žádná data.

Nejste omezeni na použití stejného úložného enginu pro celý server nebo schéma. Mechanismus ukládání můžete určit pro libovolnou tabulku. Například aplikace může používat převážně tabulky InnoDB, s jednou tabulkou CSV pro export dat do tabulkového procesoru a několika tabulkami MEMORY pro dočasné pracovní prostory.

Výběr úložného stroje

Různé úložné stroje dodávané s MySQL jsou navrženy s ohledem na různé případy použití. Následující tabulka poskytuje přehled některých úložných motorů dodávaných s MySQL, přičemž za tabulkou jsou uvedeny vysvětlující poznámky.

Tabulka 16.1 Přehled funkcí úložných motorů

.

Funkce MyISAM Paměť InnoDB Archiv NDB
B-.stromové indexy Ano Ano Ano No No
Zálohování/point-in-time recovery (pozn. 1) Ano Ano Ano Ano Ano
Podpora clusterové databáze Ne Ne Ne Ne Ne Ano
Klastrované indexy Ne Ne Ano Ne Ne
Komprimovaná data Ano (pozn. 2) Ne Ano Ano Ne
Datová mezipaměť Ne N/A Ano Ne Ano
Šifrovaná data Ano (pozn. 3) Ano (pozn. 3) Ano (pozn. 4) Ano (pozn. 3) Ano (pozn. 3)
Podpora cizích klíčů Ne Ne Ano Ne Ano (pozn. 5)
Plná-textové vyhledávací indexy Ano Ne Ano (pozn. 6) Ne Ne
Geoprostorové podpora datových typů Ano Ne Ano Ano Ano
Geoprostorové indexování podpora Ano Ne Ano (pozn. 7) Ne Ne
Hash indexy Ne Ano Ne (pozn. 8) Ne Ano
Indexové mezipaměti Ano N/A Ano No Ano
Granularita zamykání Tabulka Tabulka Řádek Row Row
MVCC No No Yes No No
Podpora replikace (poznámka 1) Ano Omezená (poznámka 9) Ano Ano Ano Ano
Omezení úložiště 256TB RAM 64TB žádné 384EB
T-.stromové indexy No No No No Ano
Transakce No No Ano No No Tak
Aktualizace statistik pro datový slovník Tak Tak Tak Tak Tak

Poznámky:

1. Implementováno na serveru, nikoli v úložném stroji.

2. Komprimované tabulky MyISAM jsou podporovány pouze při použití komprimovaného formátu řádků. Tabulky používající komprimovaný formát řádků s MyISAM jsou určeny pouze pro čtení.

3. Implementováno na serveru prostřednictvím šifrovacích funkcí.

4. Implementováno na serveru prostřednictvím šifrovacích funkcí; V MySQL 5.7 a novějších verzích je podporováno šifrování dat v klidu.

5. Podporováno na serveru prostřednictvím šifrovacích funkcí. Podpora cizích klíčů je k dispozici v MySQL Cluster NDB 7.3 a novější.

6. Podpora indexů FULLTEXT je k dispozici v MySQL 5.6 a novější.

7. Podpora geoprostorového indexování je k dispozici v MySQL 5.7 a novější.

8. InnoDB interně využívá hash indexy pro svou funkci Adaptive Hash Index.

9. InnoDB využívá hash indexy. Viz diskusi dále v této části.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.