sql >> Databáze >  >> RDS >> Mysql

Databázový koutek:Průvodce pro začátečníky k úložišti Mysql

Při vytváření databáze je často přehlíženým, ale kritickým faktorem výkonu úložný modul (zejména když databáze roste). V mnoha případech je pokušení pouze přijmout výchozí nastavení a pokračovat ve vývoji svého projektu. To může vést k neočekávaným negativním dopadům na výkon, zálohování a integritu dat později v životním cyklu aplikace, například když váš tým implementuje analytiku a řídicí panely MySQL.

Abychom se vyhnuli těmto potenciálním nástrahám, podíváme se blíže na některé z nejrozšířenějších úložišť podporovaných MySQL (od verze 5.7).

Podporované moduly úložiště

Jaké mám možnosti?

Ve výchozím nastavení MySQL 5.7 podporuje deset úložišť (InnoDB, MyISAM, Memory, CSV, Archive, Blackhole, NDB, Merge, Federated a Example). Chcete-li zjistit, které z nich jsou dostupné a podporované vaším serverem, použijte tento příkaz:

mysql> ZOBRAZIT ENGINES\G

Tím se zobrazí seznam úložišť a sdělí vám, které jsou dostupné, nedostupné nebo které jsou aktuálně nastaveny jako výchozí. Ve sloupci „Podpora:“ se zobrazí „ANO“, „NE“ nebo „VÝCHOZÍ“.

V některých aplikacích může nastat potřeba mít různé úložné stroje pro různé tabulky ve stejné databázi. Toto je příklad toho, proč musíte pečlivě naplánovat datový model pro vaši aplikaci. Ve většině případů však bude potřeba pouze jeden modul úložiště.

Možnosti úložiště

V čem jsou dobří?

Podívejme se blíže na některé z nejběžněji používaných úložišť. To nám dá představu o tom, k čemu byly jednotlivé motory navrženy a jak je lze nejlépe využít k plnění našich obchodních cílů.

InnoDB: Výchozí možnost v MySQL 5.7, InnoDB je robustní úložiště, které nabízí:

  • Plná kompatibilita s ACID
  • Potvrzení, vrácení zpět a obnovení po havárii
  • Zamykání na úrovni řádků
  • ZAHRANIČNÍ KLÍČOVÉ omezení referenční integrity
  • Zvýšit souběžnost více uživatelů (prostřednictvím neuzamykatelných čtení)

S výše uvedenou funkčností, kterou InnoDB nabízí, je zřejmé, proč je výchozím enginem v MySQL. Je to motor, který funguje dobře a nabízí mnoho požadovaných atributů, které by každá databáze potřebovala. Obsáhlá diskuse o všech jeho možnostech je však mimo rámec tohoto článku. Toto je engine, který bude s největší pravděpodobností použit ve většině aplikací.

MyISAM: Funkce, která odlišuje MyISAM od ostatních, je jeho schopnost:

  • indexy fulltextového vyhledávání
  • uzamykání na úrovni tabulky
  • nedostatečná podpora pro transakce

Přestože se jedná o rychlý úložný modul, nejlépe se hodí pro použití v aplikacích náročných na čtení a většinou čtení, jako jsou datové sklady a webové aplikace, které nepotřebují podporu transakcí nebo shodu s ACID.

NDB (nebo NDBCLUSTER):Pokud bude vaše databáze pracovat v clusterovém prostředí, je NDB vhodným úložištěm. Nejlepší je, když potřebujete:

  • Distribuovaná výpočetní technika
  • Vysoká redundance
  • Vysoká dostupnost
  • Nejvyšší možné doby provozuschopnosti

Pamatujte, že podpora NDB není součástí distribuce standardních binárních souborů MySQL Server 5.7. Budete muset aktualizovat na nejnovější binární verzi MySQL Cluster. Pokud však vyvíjíte v klastrovém prostředí, pravděpodobně máte potřebné zkušenosti, abyste se s těmito úkoly vypořádali.

CSV: Užitečné úložiště, když je třeba sdílet data s jinými aplikacemi, které používají data ve formátu CSV. Tabulky jsou uloženy jako textové soubory s hodnotami oddělenými čárkami. Ačkoli to usnadňuje sdílení dat se skripty a aplikacemi, jednou z nevýhod je, že soubory CSV nejsou indexovány. Data by tedy měla být uložena v tabulce InnoDB až do fáze Import/Export procesu.

Blackhole: Tento stroj přijímá, ale neukládá data. Podobně jako v UNIX /dev/null, dotazy vždy vracejí prázdnou sadu. To může být užitečné v distribuovaném databázovém prostředí, kde nechcete ukládat data lokálně nebo ve výkonnostních či jiných testovacích situacích.

Archivovat: Jak název napovídá, tento engine je vynikající pro zřídka používaná historická data. Tabulky nejsou indexovány a po vložení dojde ke kompresi. Transakce nejsou podporovány. Použijte tento modul úložiště pro archivaci a načítání minulých dat.

Federovaný: Tento úložný stroj slouží k vytvoření jediné, lokální, logické databáze propojením několika různých fyzických serverů MySQL. Na lokálním serveru nejsou uložena žádná data a dotazy jsou automaticky prováděny na příslušném vzdáleném serveru. Je ideální pro prostředí distribuovaných datových trhů a může výrazně zlepšit výkon při používání MySQL pro analytické sestavování.

Určení úložiště

Jak změním používaný modul úložiště?

Úložný stroj, který se používá, je vytvořen při vytvoření tabulky. Jak již bylo uvedeno, InnoDB je výchozím úložištěm v MySQL verze 5.5 a vyšší. Pokud byste chtěli použít jiný, je nejlepší to udělat v příkazu CREATE TABLE. Řekněme například, že jste identifikovali tabulku, která potřebuje použít úložiště CSV. Váš příliš zjednodušený příkaz CREATE TABLE může vypadat takto:

mysql> CREATE TABLE Shared_Data (
    -> Data_ID INTEGER NENÍ NULL,
    -> Název VARCHAR(50) NOT NULL,
    -> Popis VARCHAR(150)
    -> ) ENGINE=’CSV’;
Poté jako obvykle provedeme příkaz INSERT:
mysql> INSERT INTO Shared_Data VALUES
-> (1,'zařízení jedna', 'nejnovější verze nejlepší technologie'),
-> (2,'zařízení dva', 'nejrychlejší na trhu');

Po úspěchu, pokud si prohlédnete adresář databáze, by v něm nyní měl být soubor ‚Shared_Data.CSV‘, který obsahuje záznamy, které jste vložili do tabulky Shared_Data.

Stejnou metodologii lze použít pro kterýkoli z mnoha úložných motorů, které MySQL podporuje. I když je možné změnit modul úložiště po vytvoření tabulky pomocí ALTER TABLE je nejlepší praxí naplánovat a nastavit to na začátku.

Na závěr

MySQL má mnoho možností

Jak můžete vidět, MySQL nabízí podporu pro storage motory navržené tak, aby zvládaly velmi odlišné úkoly v mnoha různých prostředích. Identifikace, které motory použít a kdy je použít, nám může pomoci vyhnout se zbytečným komplikacím a problémům s výkonem při rozšiřování našich aplikací.

Ať už potřebujete 99,999% dostupnost a spolehlivost vašeho distribuovaného výpočetního clusteru nebo potřebujete podporu transakcí kompatibilní s ACID s omezeními FOREIGN KEY, MySQL má úložný modul, který vyhovuje vašim potřebám.

Jako vždy platí, že správné plánování a identifikace cílů a požadavků vašeho projektu je nejlepším způsobem, jak přesně určit, které úložné systémy jsou pro vaši aplikaci nejvhodnější. Doufejme, že tento článek poslouží jako užitečný výchozí bod, který vám v tomto ohledu pomůže.

Tento článek se původně objevil zde. Znovu publikováno se svolením. Své stížnosti na porušení autorských práv odešlete zde.


  1. Vrátit seznam tabulek a pohledů na SQL Server pomocí T-SQL (sp_tables)

  2. Mám použít !=nebo <> pro nerovné v T-SQL?

  3. Jak vybrat sloupce z tabulky, které nemají hodnoty null?

  4. HA pro MySQL a MariaDB - Porovnání Master-Master replikace s Galera Cluster