Hlavní navigace

MySQL na konci léta (2)

3. 10. 2002
Doba čtení: 4 minuty

Sdílet

Databázový server MySQL je jedničkou na poli otevřených databázových systémů již řadu let. V poslední době však klepe na dveře nová verze 4.0, která přináší mnoho novinek. Dnes si něco povíme o transakčních tabulkách BDB a InnoDB a popíšeme si také, co bude ve čtverkové řadě nového.
InnoDB

tabulky představují zcela jiný svět. Na stránkách InnoDB se praví: „Transactions, row level locking, hot backup, and foreign keys for MySQL – without compromising the speed of MySQL“. Toto tvrzení vše vystihuje. Vývoj InnoDB tabulek jde mimo MySQL a probíhá pod licencí GPL. Standardní binárky podporu InnoDB tabulek nemají a musíte si je stáhnout nebo překompilovat. Pro Windows se dodává ve standardní distribuci démon mysqld-max, který je s podporou již sestaven.

Nejprve si shrneme, co všechno InnoDB nabízí. Nejžhavější novinkou je určitě plná podpora transakcí a cizích klíčů. Mezi další zajímavé věci patří zamykání na úrovni záznamů (MyISAM umí zamykat pouze tabulky), konzistentní čtení dat (tzv. multiverzování – každý výběr vidí celou databázi ve stejném tvaru, jak na začátku výběru dat, tak na jeho konci), nelimitovaná velikost dat, automatické opravování po havárii a také vysoká rychlost srovnatelná s MyISAM. Při vkládání dat by měl být dle vývojářů InnoDB dokonce rychlejší než MyISAM, což dokazují všemi možnými testy na svých stránkách. Opět ale platí pravidlo „něco za něco“. InnoDB nepodporuje některá rozšíření MySQL, jako například FULLTEXT indexy, indexy na TEXT a BLOB sloupcích a podobně.

Organizace dat a konfigurace serveru je u InnoDB zcela odlišná. InnoDB používá jeden (nebo více) databázových souborů, které je třeba alokovat předem, a samozřejmě transakční logy, které se také musejí někam ukládat. Naštěstí soubor nesoucí data a indexy můžeme nastavit tak, aby rostl automaticky, takže odpadají případné problémy s přibývajícími daty, které je často nutno řešit na jiných databázích. Ovšem toto je krajní řešení, je doporučeno alokovat tolik místa, kolik bude potřeba. Nastavení InnoDB tedy není tak jednoduché a přímočaré jako u standardních tabulek MySQL – MyISAM.

Práce s InnoDB tabulkami je stejná jako s MyISAM tabulkami. Vytvoříte je standardním příkazem a pomocí modifikátoru TYPE určíte jejich typ. Z dokumentace vyplývá, že byste se měli uchýlit k InnoDB tabulkám v případě, když nutně potřebujete transakce (které MyISAM neumí), případně cizí klíče (které zatím neumí). Nasazení InnoDB je také vhodné u často aktualizované databáze s mnoha uživatelskými přístupy a konečně také u databází s obrovskými počty záznamů. Zde MyISAM tabulky často narážejí na problém s maximální velikostí souboru na hostitelském operačním systému.

Druhou možností, pokud potřebujete transakce, je tabulkový typ BDB. BDB je postavený na Berkeley_DB, kterou dobře znají zejména programátoři v Perlu. Jediné, co BDB nabízí, jsou však transakce. Na druhé straně je zde řada nevýhod, BDB neumí mnoho rozšíření MySQL a rychlost není zrovna závratná. Jedná se spíše o nouzové řešení pro ty, kteří by nemohli z nějakého důvodu použít InnoDB.

Do verze 4.x, která je právě ve fázi testování, přibude několik dalších novinek. Základní novinkou bude zbrusu nový formát pro deskriptor tabulek (.frm), který umožní implementaci cizích klíčů. Tato implementace bude v první fázi jednodušší a nebude podporovat všechno to, co konkurenční servery. V první řadě to pravděpodobně bude pouze kaskádové mazání záznamů. Další připravovanou věcí bude možnost zakompilování mysql serveru přímo do aplikace. Vylepšena bude také podpora replikace a zálohování.

Možnost zakompilovat MySQL server do aplikace je nenápadná vlastnost, avšak umožňuje veliké věci. Představte si, že potřebujete svoji aplikaci (dejme tomu jednoduché účetnictví) distribuovat drobným klientům. Představa, že si každý uživatel nainstaluje nejprve MySQL server a pak danou aplikaci, není zrovna nejvhodnější. Toto se bohužel často děje ve Windows u aplikacích psaných v C++ Builderu od firmy Borland, kde se většinou nainstaluje FireBird SQL server. Aplikace jsou tak často dosti objemné. V MySQL však budeme mít možnost přikompilovat si server do aplikace. Jednoduchou změnou funkce, která se připojuje na databázi, úpravy zdrojového kódu končí. Nyní vše funguje tak, jako byste se připojovali na vzdálený server. Aplikace si sama otevírá MYD a MYI soubory a provádí dotazy. Velikost MySQL knihovny je zhruba 2MB, což se dá překousnout. Jinou možnost využití vidím ve www prostředí. Dejme tomu, že můj provider neumožňuje připojení do databáze. Nevadí. Vytvořím si vlastní knihovnu (případně JDBC či DBI ovladač), která bude operovat přímo nad soubory. Tu potom ve svých skriptech (JSP, Perl, PHP…) mohu využívat. Po vydání finální verze 4.0 se určitě objeví tyto „embeded“ knihovny pro mnoho webových prostředí (Perl, PHP a pod.).

V blízké budoucnosti bychom se měli dočkat také kurzorů na straně serveru, podpory UNICODE, plné podpory cizích klíčů a uložených procedur (ty jsou téměř až na samém konci TODO listu, protože autoři zatím čekají, jak se budou uložené procedury vyvíjet). Vývojáři chtějí v budoucnu dosáhnout ANSI SQL 99 a ODBC 3.0.

cyber23

Mnoho novinek bude také u fulltextových indexů. Autoři slibují logické spojování slov (podobně jako v Google), optimalizovat vyhledávací algoritmus, implementovat seznam always-index slov (např. C++, root.cz), podporovat fulltexty i v MERGE tabulkách, stemming slov a podobně. Jak jsem již psal v předchozím dílu, fulltextové indexy jsou již dnes použitelné. Podrobil jsem je navíc výkonostním testům a můj dojem je dobrý. Vytváření indexu je snadné a rychlé (narozdíl od ručního indexování, kde si musíte navíc napsat vlastní program, který toto indexování provede). Rychlost provádění dotazů je velice slušná, a to i při složitějších podmínkách.

MySQL server je u nás (v České Republice) hojně používán a oblíben, a tak doufám, že jsem vás svým článkem potěšil. Root.cz vás samozřejmě bude informovat, až vyjde finální verze 4.0. Pravděpodobně se pak podíváme, co všechno vývojáři stihli do této verze vměstnat. Do té doby – nashledanou!

Byl pro vás článek přínosný?