Přeskočit na obsah

MyISAM

Z Wikipedie, otevřené encyklopedie
MyISAM
VývojářOracle Corporation
Vyvíjeno vC
Typ softwarusvobodný software a databázový stroj
LicenceGNU General Public License
Webdev.mysql.com/doc/refman/8.0/en/myisam-storage-engine.html
Některá data mohou pocházet z datové položky.

MyISAM je nejpoužívanější a až do verze 5.1 výchozí formát úložiště dat (storage engine) v databázovém systému MySQL. Je následovníkem formátu ISAM (Indexed Sequential Access Method).

Úložiště

[editovat | editovat zdroj]

MyISAM obvykle ukládá každou tabulku ve dvou souborech:

  • .MYD - datový soubor
  • .MYI - indexový soubor

Formát MyISAM je platformově neutrální, což znamená, že můžete bez jakýchkoliv potíží zkopírovat datové a indexové soubory ze serveru založeného na Intelu na PowerPC nebo na Sun SPARC.
Tabulky MyISAM mohou obsahovat buď dynamické řádky, nebo statické řádky (pevné délky). MySQL se rozhodne o tom, který formát použije na základě definice tabulky. To, kolik řádků celkem může tabulka MyISAM obsahovat, je primárně limitováno velikostí volného místa na disku na databázovém serveru a na tom, jak velký soubor povoluje vytvořit operační systém.
Tabulky MyISAM, které jsou vytvářeny v MySQL 5.0 s proměnlivou délkou řádků, jsou standardně nakonfigurovány tak, aby zvládly 256 TB dat pomocí 6bajtových ukazatelů na datové záznamy. Dřívější verze MySQL měly jako standard 4bajtové ukazatele pro maximálně 4 GB dat. Všechny verze MySQL umějí zpracovávat ukazatele až do velikosti 8 bajtů.

Funkce MyISAM

[editovat | editovat zdroj]

Protože MyISAM je jeden z nejstarších úložných enginů, které byly zařazeny do MySQL, obsahuje velké množství funkcí, které byly vyvinuty během let jeho existence, aby uspokojily potřeby požadované jeho uživateli.

Uzamykání a souběžnost

[editovat | editovat zdroj]

MyISAM uzamyká celé tabulky, ne řádky. Čtenáři obdrží sdílené (čtecí) zámky na všechny tabulky, z nichž potřebují číst. Zapisovatelé obdrží výlučné (zapisovací) zámky. Ovšem i když nad tabulkou běží výběrové dotazy, dají se do tabulky vkládat nové řádky (tzv. souběžné vkládání, concurrent inserts). Je to významná a užitečná funkce.

Automatická oprava

[editovat | editovat zdroj]

MySQL podporuje automatickou kontrolu a opravu tabulek MyISAM.

Ruční oprava

[editovat | editovat zdroj]

Pomocí příkazů CHECK TABLE a REPAIR je možno zkontrolovat, jestli v tabulce nejsou chyby, a poté provést opravu. Pokud je server offline, lze kontrolovat a opravovat tabulky nástrojem příkazového řádku myisamcheck.

Indexové funkce

[editovat | editovat zdroj]

V tabulkách MyISAM můžete vytvářet indexy na prvních 500 znacích sloupců BLOB a TEXT. MyISAM podporuje fulltextové indexy, v nichž se indexují jednotlivá slova pro potřeby složitých vyhledávacích operací.

Pozdržené zápisy klíčů

[editovat | editovat zdroj]

Tabulky MyISAM, pro které byla při vytvoření volba DELAY_KEY_WRITE, nezapisují na konci dotazu změněná data na disk. MyISAM ukládá změny do bufferu klíčů (key buffer), který je umístěn v paměti. Bloky indexu jsou "spláchnuty" (flush) na disk tehdy, když je buffer "pročišťován" (prune; tj. jsou odstraňována stará data) nebo když je uzavírána tabulka. Tím se může rapidně zvýšit výkon u intenzivně používaných tabulek, které se často mění. Jestliže však zhavaruje systém nebo server, budou indexy s velkou pravděpodobností narušené, takže se budou muset opravit.

Komprimované tabulky MyISAM

[editovat | editovat zdroj]

Tabulky, které se po naplnění daty už nikdy nemění a pouze se čtou, se dají zkomprimovat prostřednictvím utility myisampack. Ačkoliv zkomprimované tabulky se nedají modifikovat, zabírají mnohem méně místa na disku. Důsledkem je, že nabízejí lepší výkon, protože jejich menší velikost implikuje méně hledání na disku při vyhledávání záznamů. Zkomprimované tabulky MyISAM mohou mít indexy, jsou ovšem určeny pouze ke čtení. Dodatečné režijní náklady na dekomprimaci dat při jejich čtení jsou u většiny aplikací na moderním hardwaru nepodstatné, protože opravdové zisky plynou z redukce diskových operací I/O. Protože se řádky komprimují jednotlivě, MySQL nemusí dekomprimovat celou tabulku (dokonce ani stránku ne), když potřebuje načíst jediný řádek.

Související články

[editovat | editovat zdroj]

Externí odkazy

[editovat | editovat zdroj]