poslední změna 10. července 2020

V této kapitole si povíme něco o úložných strojích MySQL.

Úložný stroj je softwarový modul, který systém pro správu databází používá k vytváření, čtení a aktualizaci dat z databáze. V MySQL existují dva typy úložných strojů: transakční a netransakční.

Pro MySQL 5.5 a novější je výchozím úložným strojem InnoDB, výchozím úložným strojem pro MySQL před verzí 5.5 byl MyISAM. Výběr správného úložného enginu je důležité strategické rozhodnutí, které ovlivní budoucí vývoj. V tomto tutoriálu budeme používat úložné motory MyISAM, InnoDB, Memory aCSV. Pokud jste v MySQL nováčkem a studujete systém správy databází MySQL, pak vás to příliš nezajímá. Pokud plánujete produkční databázi, je to složitější.

Seznam úložných motorů

Úložné motory podporované systémem MySQL:

  • InnoDB
  • MyISAM
  • Memory
  • CSV
  • Merge
  • Archive
  • Federated
  • Blackhole
  • Example

InnoDB je nejrozšířenější úložný engine s podporou transakcí. Jedná se o úložný engine kompatibilní s ACID. Podporuje zamykání na úrovni řádků, obnovu po havárii a souběžné řízení více verzí. Je to jediný engine, který poskytuje omezení referenčníintegrity cizího klíče. Společnost Oracle doporučuje pro tabulky používat InnoDB s výjimkou specializovaných případů použití.

MyISAM je původní úložný engine. Je to rychlý úložný engine, který nepodporuje transakce. MyISAM poskytuje funkci table-levellocking. Používá se hlavně v oblasti webu a datových skladů.

Memory storage engine vytváří tabulky v paměti. Je to nejrychlejší motor. Poskytuje zamykání na úrovni tabulky. Nepodporuje transakce. memory storage engine je ideální pro vytváření dočasných tabulek nebo rychlé vyhledávání. data se ztratí při restartu databáze.

CSV ukládá data do souborů CSV. Poskytuje velkou flexibilitu, protože data v tomto formátu lze snadno integrovat do jiných aplikací.

Merge pracuje s podkladovými tabulkami MyISAM. Slučovací tabulky pomáhají snadněji spravovat velké objemy dat. Logicky seskupuje řadu stejných tabulek MyISAM a odkazuje na ně jako na jeden objekt. vhodné pro prostředí datových skladů.

Archivní úložný engine je optimalizován pro vysokorychlostní vkládání. Při vkládání dat je komprimuje. Nepodporuje transakce. Je ideální pro ukládání a načítání velkého množství zřídka odkazovaných historických, archivovaných dat.

Úložiště Blackhole přijímá, ale neukládá data. Při vyhledávání se vždy vrací prázdná množina. Funkci lze využít při návrhu distribuované databáze, kde se data automaticky replikují, ale neukládají se lokálně. Tento úložný engine lze použít k provádění výkonnostních testů nebo jiného testování.

Federovaný úložný engine nabízí možnost oddělit servery MySQL a vytvořit tak jednu logickou databázi z mnoha fyzických serverů. dotazy na lokálním serveru jsou automaticky prováděny na vzdálených (federovaných) tabulkách. V lokálních tabulkách nejsou uložena žádná data. je vhodný pro distribuovaná prostředí.

mysql> SHOW ENGINES\G*************************** 1. row *************************** Engine: InnoDB Support: DEFAULT Comment: Supports transactions, row-level locking, and foreign keysTransactions: YES XA: YES Savepoints: YES*************************** 2. row *************************** Engine: CSV Support: YES Comment: CSV storage engineTransactions: NO XA: NO Savepoints: NO...

Příkaz SHOW ENGINES zobrazí všechny dostupné enginy, kteréserver podporuje.

Výběr správného enginu

Žádný úložný engine není ideální pro všechny okolnosti. Některé fungují za určitých podmínek nejlépe a v jiných situacích hůře. Existují kompromisy, které je třeba zvážit. Bezpečnější řešení vyžaduje více prostředků; může být pomalejší, zabírat více času procesoru a místa na disku. MySQL je velmi flexibilní v tom, že poskytuje několik různých úložných motorů. Některé z nich, jako například archivační engine, jsou vytvořeny pro použití ve specifických situacích.

V některých případech je odpověď jasná. Kdykoli máme co do činění s některými platebními systémy, jsme povinni použít co nejbezpečnější řešení. Nemůžeme si dovolit ztratit tak citlivá data. InnoDB je správná cesta. Pokud chceme fulltextové vyhledávání, můžeme zvolit buď MyISAM, nebo InnoDB. Pouze InnoDB podporuje omezení referenční integrity cizího klíče, a pokud plánujeme toto omezení použít, pak je volba jasná.

Zadání a změna úložných motorů

Úložný motor se zadává při vytváření tabulky.

mysql> CREATE TABLE Cars(Id INTEGER PRIMARY KEY, Name VARCHAR(50), -> Cost INTEGER) ENGINE='MyISAM';

Klíčové slovo ENGINE určuje úložný motor použitýpro tuto konkrétní tabulku.

Pokud úložný engine výslovně nezadáme, použije se výchozíúložný engine. Před verzí MySQL 5.5 byl výchozím úložným strojem MyISAM. Pro MySQL 5.5 a novější je výchozím úložným strojem InnoDB.

Je možné přejít na jiný úložný engine. Upozorňujeme, že migrace velké tabulky může trvat dlouho. Také můžeme narazit na problémy při migraci tabulek. Některé funkce nemusí být podporovány v obou tabulkách.

mysql> SELECT ENGINE FROM information_schema.TABLES -> WHERE TABLE_SCHEMA='mydb' -> AND TABLE_NAME='Cars';+--------+| ENGINE |+--------+| InnoDB |+--------+1 row in set (0,05 sec)

Tento příkaz SQL zjistí úložný stroj použitý pro tabulku Cars v databázi mydb. Mohli bychom také použít příkaz SQL SELECT CREATE TABLE Cars. Tabulka information_schema je tabulka, která uchovává technické informace o našich tabulkách.

mysql> ALTER TABLE Cars ENGINE='MyISAM';

Tento příkaz SQL změní ukládací engine tabulky Cars na MyISAM.

mysql> SELECT ENGINE FROM information_schema.TABLES -> WHERE TABLE_SCHEMA='mydb' -> AND TABLE_NAME='Cars';+--------+| ENGINE |+--------+| MyISAM |+--------+1 row in set (0,00 sec)

Nyní je úložný engine tabulky MyISAM.

V této části výukového programu MySQL jsme se zabývali úložnými motory.

.

Articles

Napsat komentář

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