Alternativní databázová úložiště v MySQL

Alternativní databázová úložiště v MySQL

K napsání tohoto článku mě inspiroval příklad z praxe. Smutnou pravdou dneška je, že uživatelé využívající databázi MySQL dnes většinou netuší, co to je, ani jak to funguje. Díky tomu, že WordPress běží na 40% všech webů a co se týká CMS, tak jeho podíl na trhu je téměř 65%, tak se ani není čemu divit.

Celé to začalo jednoduchým požadavkem zákazníka. Zněl zhruba takto: „Provedl jsem veškeré optimalizace databází, ale počet příspěvků na mém webu je tak velký, že se s tím již nedá pracovat. Prosím, můžete mi nějak pomoci?“. Rychlý pohled na databázi mi ukázal, že má pravdu. Databáze o velikosti přes 2GB, počet příspěvků přes 450 tisíc. Co s tím?

MySQL od doby svého vzniku používalo jako databázové úložiště (database engine) MyISAM. Bylo rychlé na čtení, podporovalo fulltextové vyhledávání, prostě v době před desítkami let ideální pro web. To je již pár let překonané a postupně ho nahradilo ho úložiště InnoDB, především díky podpoře transakcí, cizích klíčů a v neposlední řadě uzamykání na úrovni řádků.

Jak šel čas, do odnoží původního MySQL (vlastněného Oracle) se postupně dostala alternativní databázová úložiště. Nehodlám je probírat všechna, ale pojďme se podívat na dvě z nich.

TokuDB
TokuDB je databázové úložiště na kterém je nejzajímavější to, že pro klíče využívá Fractal tree indexy. Tím dosahuje až 20x většího výkonu oproti InnoDB (využívá B-tree indexy) při mnohem menší náročnosti na paměť. Takže pokud máte obrovská data na poměrně zatížené databázi, toto úložiště dokáže výrazně zrychlit odezvu vašich aplikací. Umí všechno co InnoDB, včetně podpory cizích klíčů.

RocksDB
RocksDB si vyvinul Facebook, když mu přestávalo stačit InnoDB. Klíčové vlastnosti jsou rychlost a minimální diskové nároky. Podporuje transakce, ale neumí cizí klíče.

Jak zjistím, jestli mám na serveru RocksDB nebo TokuDB? Stačí k tomu příkaz SHOW ENGINES; v mysql konzoli nebo v phpMyAdmin záložka Úložiště. Pokud tam daný typ úložiště není, tak je potřeba jej doinstalovat. V případě, že používáte MariaDB, tak postup instalace hledejte na
https://mariadb.com/kb/en/getting-started-with-myrocks/
https://mariadb.com/kb/en/installing-tokudb/
Pokud používáte Percona Server for MySQL, tak postup instalace najdete na
https://www.percona.com/doc/percona-server/LATEST/myrocks/install.html
https://www.percona.com/doc/percona-server/LATEST/tokudb/tokudb_installation.html

Teď už nám zbývá jediné. Změnit úložiště. Takže v případě našeho WordPress s obrovskými tabulkami wp_posts a wp_postmeta stačí v příkazy:
ALTER TABLE `wp_posts` ENGINE = TokuDB;
ALTER TABLE `wp_postmeta` ENGINE = TokuDB;

Varování!!!
Zatím co příkaz ALTER TABLE `wp_postmeta` ENGINE = TokuDB; mi bez problémů fungoval na 1,5GB tabulce, tak příkaz ALTER TABLE `wp_postmeta` ENGINE = ROCKSDB; způsobil pád serveru (5GB volného místa na tuto operaci nestačilo).
Takže doporučuji vyexportovat tabulku (nebo celou databázi) a v sql souboru nahradit ENGINE=InnoDB (příp.ENGINE=MyISAM) za ENGINE=TokuDB (příp. ENGINE=ROCKSDB).

Pro informaci doplním, že náš Trialhosting.cz podporuje jak RocksDB tak i TokuDB.

2 Příspěvků v diskuzi

  1. Asi systém odstranil odkazy a URL.
    Možná by stálo za to v článku zmínit, že TokuDB je deprecated a její tvůrci doporučují migracy na RocksDB.
    TokuDB has been deprecated by its upstream maintainer. It is disabled from MariaDB 10.5 and has been been removed in MariaDB 10.6 – MDEV-19780. We recommend MyRocks as a long-term migration path.

  2. Linky opraveny, děkujeme.
    TokuDB a celá historie kolem, to by bylo na samostatný článek. Před lety, přesněji duben 2015, společnost Tokutek koupila Percona a jaké s ní má další záměry, to ví snad jen pan Peter Zaitsev.

Odpovědět