Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

MySQL na konci léta

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. V nádledujících dvou článcích se podíváme na stávající vlastnosti MySQL, dále 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.

Tweetni to Twitter Jaggni to! Jagg Del.icio.us Delicious

MySQL je relační databázový server, který funguje na mnoha operačních systémech (zejména těch UNIXových). Mezi jeho hlavní přednosti patří jednoduchá instalace a obsluha, nízká cena (pokud program postavený na MySQL nebudete prodávat, je zdarma) a vysoký výkon. MySQL se snaží být kompatibilní se standardem ANSI SQL92, což se vývojářům prakticky daří. Některé vlastnosti ale vypouští, jiné zase přidává. K MySQL si samozřejmě můžete stáhnout klientská API pro mnoho jazyků (C/C++, Perl, Python, Java…) nebo ODBC ovladače.

Jak jsem již napsal, MySQL je relační databází. Je proto logické, že v ní můžeme vytvářet tabulky, přidávat záznamy či data vybírat v souladu s normou SQL. Co se týče datových typů, zde nabízí MySQL široké spektrum možností – od jednoduchých číselných a datumových až po boolean, text či blob. Naproti tomu MySQL nenabízí taková rozšíření, jako jsou vnořené selecty (SELECT … FROM SELECT …), uložené procedury a triggery (umožňuje ale vytvořet vlastní funkce např. pro agregaci atp.), cizí klíče (server sice SQL příkazy FOREIGN KEY spolkne kvůli kompatibilitě SQL skriptů, ale cizí klíče nevytváří) a také pohledy (views).

Nadruhou stranu má MySQL spoustu zajímavých rozšíření. Mezi zajímavé drobnosti bych zařadil podmíněné mazání tabulek (DROP TABLE IF EXISTS tabulka), RENAME TABLE, regulární výrazy nebo funkci LAST_INSERT_ID(). MySQL také nabízí dvě zajímavá rozšíření, která stojí za to hlouběji prozkoumat. Je to možnost replikace a fulltextového indexování. Pomocí replikace můžete snadno vytvářet „otroky“ (slaves), servery, jenž budou připojeni na centrální (master) server a budou si obnovovat všechny změny. Díky tomu můžete například distribuovat zátěž na více databázových strojů. Replikace se v MySQL snadno konfiguruje (musíte aktivovat tzv. binární logy) a dá se výhodně využít také pro záložní účely. Nakonec bych ještě rád poznamenal, že replikace je v MySQL pouze jednosměrná.

Druhou zajímavou vlastností MySQL serveru je fulltextový index. Nad poli VARCHAR a TEXT je možno vytvořit fulltextový index, který umožňuje vyhledávání přímo příkazem SELECT … MATCH … AGAINST. Příkaz je schopen vrátit jakýsi index shody pro každý záznam. Aplikace si může výsledek setřídit podle tohoto indexu a zobrazit příslušné záznamy nebo provádět jiné zajímavé věci. Ačkoli je fulltextový index poměrně novou věcí, funguje dobře i s češtinou. Zatím ale neumožňuje jemné nastavování jako například stopwords (zakompilováno), minimální délka slova (zakompilována na 4) atd. Mnoho se toho v této oblasti připravuje, nicméně fulltextový index je již dnes velikým pomocníkem. Implementace vlastního fulltextového vyhledávání s podporou více slov není zase jednoduchou záležitostí (u více slov jsou na MySQL problémy s formulací dotazu a povolávají se dočasné tabulky). Může vám tedy ušetřit mnoho práce.

MySQL nabízí několik druhů tabulek. Jsou to standardní netransakční typy (MyISAM, ISAM, MERGE, HEAP) a transakční typy (BDB, InnoDB). Výhodou netransakčních typů tabulek je jejich vyšší výkon. U kritických aplikací (účetnictví, bankovnictví…) má bezpečnost a spolehlivost přednost před výkonem a právě zde se používají transakční tabulky. Pomocí SQL příkazů BEGIN/COMMIT/ROL­LBACK můžete bezpečně měnit data v tabulkách tak, aniž by se porušila integrita dat. Při výpadku je server schopen nastartovat tak, aby byla tato integrita zajištěna. Rád bych poznamenal, že to, že použijete transakční tabulky, vám samo o sobě na bezpečnosti nepřidá. Musíte efektivně využívat BEGIN/COMMIT/ROL­LBACK ve své aplikaci. Aby vaše snažení mělo smysl, doporučuji vypnout autocommit (např. příkazem SET AUTOCOMMIT=0 nebo v konfiguračním souboru). Jinak by totiž server prováděl všechny změny ihned, což by nebylo žádoucí.

Základní (default) tabulkou, která se vytvoří, když nespecifikujete explicitně jinou, je typ MyISAM. Tento typ tabulky je rozšířením a praktickým nahrazením staršího typu ISAM. Data jsou organizována na disku ve formě souborů (*.MYD pro data, *.MYI pro indexy a *.frm pro deskriptory). Co je zajímavé, je to, že binární data v nich jsou nezávislá na platformě. Migrace databáze ze systému na systém probíhá prakticky obyčejným kopírováním souborů, což je veliká výhoda. Tyto soubory obvykle naleznete v adresáři /var/lib/mysql. MyISAM podporuje tři typy organizování dat: statické, dynamické a komprimované. Toto organizování se týká polí s proměnlivou délkou (VARCHAR, TEXT, BLOB). U statického orgranizování dat bude MySQL rezervovat v souborech místo pro záznamy staticky (tj. všechny mají největší možnou délku) nebo dynamicky (délka záznamů je proměnlivá). Výhody jsou zřejmé. U statického organizování je přístup rychlý a data se po havárii snadno obnoví. Na druhou stranu se plýtvá místem na disku. U dynamického organizování je menší spotřeba místa na disku (pokud tedy používáte v databázi záznamy s proměnlivou délkou samozřejmě), ale pomalejší přístup. Zcela odlišné je komprimované orgranizování. Tyto tabulky můžete vytvořit pouze externí řádkovou utilitou, jsou pouze pro čtení a jsou rafinovaně komprimovány, což je výhodné pro různé prezentace na CD-ROMech apod.

Druhým typem tabulky je HEAP. Jedná se o tabulky uložené pouze v paměti (pozor!), a jsou proto velmi vhodné pro vytváření dočasných (TEMPORARY) tabulek, pomocí kterých se dají obejít některá omezení, která MySQL server má (např. vnořené selekty). Tento typ tabulky využívá velmi rychlých hashovacích algoritmů pro indexy, ovšem má některá omezení (nemůžete vytvořit TEXT/BLOB pole, neumožňuje AUTO_INCREMENT nebo vytvořit jiný index než hashovací – např. FULLTEXT nebo B-TREE a tak dále). Tato omezení přímo vyzývají k tomu, aby se HEAP tabulky používaly pro odkládání mezivýsledků či ke spojování složitých dotazů. Díky tomu aplikace vyladěné pro MySQL vykazují velice zajímavé výkony, které se dají srovnávat s prvoligovými komerčními servery.

davame_internetu_obsah
       

Posledním typem netransakčního typu tabulky je typ MERGE, který má však významné omezení. Nemůžete vkládat nová data (vybírat či mazat však ano). Tento typ je rozšířením MyISAM tabulek. Umožňuje rozdělit data a indexy do více než jednoho souboru. Díky tomu můžete tabulku distribuovat na více disků (případně počítačů, chcete-li), což je vlastnost velice zajímavá zejména pro některé databáze určené pouze pro čtení. Můžete tak výrazně zvýšit výkon své aplikace.

Příště se podíváme na transakční tabulky. Nakonec se dozvíte, co bude nového v nové verzi 4.0.

Školení: Linux – Firewall, Samba, VPN

Na třídenním školení se naučíte nainstalovat a spravovat Firewall a Router, SAMBA Doménový a Souborový server. Dále si zprovozníte vlastní, zabezpečený VPN server.

Podrobnější informace a přihláška

Ohodnoťte jako ve škole:
Průměrná známka 3,16

Přehled názorů

Kopirovani a licence
RWS 26. 9. 2002 07:34
Nový
└ 
Re: Kopirovani a licence
Pavel Palát 26. 9. 2002 08:17
Nový
 
└ 
Re: Kopirovani a licence
Pavel Cvrcek 26. 9. 2002 12:21
Nový
to je co za db
miso 26. 9. 2002 07:52
Nový
└ 
Re: to je co za db
Miloslav Ponkrác 27. 9. 2002 01:17
Nový
MySQL - parodie na transakcni zpracovani
Roman VINCZE 26. 9. 2002 07:56
Nový
├ 
Re: MySQL - parodie na transakcni zpracovani
vlk 26. 9. 2002 09:26
Nový
└ 
Re: MySQL - parodie na transakcni zpracovani
kokot 26. 9. 2002 11:27
Nový
uveďte co si skutečně myslíte o MS
Microsoft 26. 9. 2002 08:42
Nový
├ 
Re: uveďte co si skutečně myslíte o MS
Tomas Krause 26. 9. 2002 09:55
Nový
└ 
RE: uveďte co si skutečně myslíte o MS
Ivan HLAS 26. 9. 2002 17:08
Nový
Licencia (PostgreSQL) - flame
tap 26. 9. 2002 08:45
Nový
└ 
Re: Licencia (PostgreSQL) - flame
Michal Krause 26. 9. 2002 12:02
Nový
bez titulku
pitomek 26. 9. 2002 10:21
Nový
└ 
Re:
martinp 26. 9. 2002 13:44
Nový
 
└ 
Re:
pitomek 26. 9. 2002 14:14
Nový
 
 
├ 
Re:
Roman Daniel 26. 9. 2002 16:09
Nový
 
 
│
└ 
Re:
martin kavalec 26. 9. 2002 16:58
Nový
 
 
│
 
└ 
Re:
cervik 1. 10. 2002 13:40
Nový
 
 
├ 
Re:
Michal Krátký 26. 9. 2002 22:41
Nový
 
 
└ 
Cizi klice
Leos Bitto 27. 9. 2002 01:51
Nový
MySQL relacni neni a nikdy nebyla
binary_runner 26. 9. 2002 14:06
Nový
licence MySQL
Honza k. 26. 9. 2002 14:14
Nový
To jsem se toho dozvedel
Vasek 26. 9. 2002 15:15
Nový
Vnoreny select
Nepto 26. 9. 2002 22:53
Nový
└ 
Re: Vnoreny select
Pavel Cvrcek 27. 9. 2002 12:00
Nový
Nova verze 4.0 ????
Milan Berka 27. 9. 2002 07:58
Nový
└ 
Re: Nova verze 4.0 ????
Pavel Cvrcek 27. 9. 2002 12:07
Nový
 
└ 
Re: Nova verze 4.0 ????
Lukas 1. 10. 2002 17:04
Nový
Štvou mě diskuse o tom, jestli je MySQL relační
Miloslav Ponkrác 30. 9. 2002 15:35
Nový
└ 
Re: Štvou mě diskuse o tom, jestli je MySQL relačn
Cohen 30. 9. 2002 16:17
Nový
 
└ 
Re: Štvou mě diskuse o tom, jestli je MySQL relačn
Miloslav Ponkrác 30. 9. 2002 17:34
Nový
Logy mysql na linuxu
anonymní uživatel 1. 3. 2006 11:24
Nový
Boolean
Jakuje 18. 4. 2007 10:43
Nový
       

Tento text je již více než dva měsíce starý. Chcete-li na něj reagovat v diskusi, pravděpodobně vám již nikdo neodpoví. Pro řešení aktuálních problémů doporučujeme využít naše diskusní fórum.

Zasílat nově přidané příspěvky e-mailem