O všem co potřebuji sdělit světu :)

Je MySQL tak špatné?

Tento týden jsem se na univerzitní přednášce o používání databází v Javě dozvěděl, že MySQL nepodporuje předpřipravené dotazy (Prepared Statements). Ve skutečnosti je podporuje už od roku 2005. A různých fám, které kolují o MySQL je mnoho, proto jsem se rozhodl podělit o své vlastní zkušenosti, které jsem získal během posledních let praxe.

MySQL logo

Historie MySQL

MySQL byla vytvořena jako rychlá databáze, která neměla obsahovat pokročilé vlastnosti, jako jsou cizí klíče a podobně. Tento databázový systém byl vytvořen švédskou firmou MySQL AB, která byla odkoupena Sun Microsystems, který byl nedávno odkoupen Oracle Corporation, který je známý zejména díky vlastní databázi Oracle, která je pokládána obecně za tu nejdokonalejší (a nejdražší).

MySQL AB publikovala svoji databázi pod licencí GNU/GPL a vydala se cestou dvojího licencování (nabídka komerční licence, komerční podpory a komerčních podnikových nástrojů). Svobodná licence umožnila MySQL stát se nejpoužívanější databází na světě jako součást LAMP (Linux, Apache, MySQL, PHP).

Rozmach MySQL s sebou však přinesl tlak na vývojáře, aby do databáze vložili i prvky, s kterými se nepočítalo. Což místy pravda vede k nečekaným vlastnostem a například ke zmateným chybovým hlášením.

Co teda všechno MySQL umí

Současná stabilní verze MySQL 5.1.44 (vývojářská je 5.5.2 m2) zvládá transakce, cizí klíče, pohledy, předpřipravené výrazy, uložené procedury, triggery a konečně i jemnější nastavení práv uživatel. V MySQL mi však stále chybí uživatelské role, což například klasický redakční systém vůbec neohrozí, ale u víceuživatelské aplikace už je to poměrně nepříjemné.

Problém MySQL a Debianu

Na většině webhostingových serverech běží jako linuxová distribuce Debian, který vychází v dlouhých intervalech. Poslední Debian vyšel s MySQL 5.0, která neobsahovala jemnější dělení práv. Na vytvoření triggeru nebo uložené procedury jste potřebovali super práva, která vám váš webhoster obyčejně nedá, takže si triggerů ani uložených procedur v MySQL, až do příchodu nového Debianu pravděpodobně neužijete.

MySQL a PHP a náctiletí vývojáři

MySQL je nejvíce používána ve spojení s programovacím jazykem PHP. V současné době by vývojáři pro přístup k databázi měli využívat objektový přístup z MySQLi, který je přímo doporučovaný vývojáři PHP. Staré procedurální funkce v PHP vám neumožní využít žádné pokročilé vlastnosti MySQL, které přišli s MySQL 4.1 a novější.

PHP a MySQL mají spolu také společné, že jsou neuznáváni "těmi lepšími a profesionálnějšími" programátory. Vývojem webových aplikací s PHP a MySQL se dnes zabývají ve velké míře náctiletí programátoři, kteří se na tom učí základy a moc toho neumí. Začátečníci nikdy neslyšeli nic o transakcích, cizích klíčích nebo triggerech a nedokáží vytvářet indexy. Hrozný databázových návrh, který využívá hrozně napsaný PHP kód vede k hrozné a pomalé serverové aplikaci.

Firemní prostředí také nepovažuji za o tolik lepší. PHP programátorem ve firmě se stanete i pokud máte jen maturitu. Na povolání Java programátora za sebou musíte mít 5 let vysoké školy. Nároky na odborné znalosti PHP programátora jsou tedy většinou podstatně nižší.

Můj verdikt

Oracle 11g, IBM DB2 i MS SQL Server jsou velice pravděpodobně lepší než MySQL v mnoha ohledech. Avšak stojí spoustu peněz, kdežto MySQL se dá pořídit zdarma pod GNU/GPL licencí (i ke komerčnímu užití). Mnoha projektům MySQL stačí a stačit bude i týmům s většími nároky.

Další alternativou k MySQL je svobodná databáze PostgreSQL, která by měla mít lépe řešené pokročilé vlastnosti. My se momentálně nasazením PostgreSQL v našem projektu také zabýváme, ale o tom asi až někdy příště,


Počet komentářů: 1
Mišo Oprendek michal(zav)oprendek.sk 11.3.2010 04:13:28
>klasický redakční systém vůbec neohrozí, ale u víceuživatelské aplikace už je to poměrně nepříjemné.

Ja vidím hranicu problému ešte ďalej - chýbajúce role sú nepríjemné, keď sa k databáze priamo pomocou sql klienta pripája viacero administrátorov systému, ktorí majú na starosti rôzne oblasti, a preto majú mať práva obmedzené na ne. Podpora rolí v aplikácii sa podľa mojich skúseností programuje až v aplikačnej logike a riadi ju aplikačný server. Všetci užívatelia aplikácia tak pristupujú do databázy pod účtom servru.



hash


Share this article: 
  • Sdílet na Facebooku
  • Sdílet na Twitteru
  • Sdílet na linkuj.cz
  • Přidat do záložek Googlu
  • Sdílet na linkedin
  • Sdílet na del.icio.us