Proč se databáze PostgreSQL nehodí na tvorbu webovky.

Tento článek se nesnaží hanit PostgreSQL za každou cenu. Je to souhrn názorů, které ukazují spíše na to, že na hostingový server se lépe hodí MySQL. Proč tomu tak je, se pokusím vysvětlit. Nejsem však dlouhodobý uživatel PostgreSQL a některých "vad" jsem si všiml teprve nedávno při hlubším sbližování. Věcné připomínky a případné vyvedení z omylu rád uvítám v komentářích.

Srovnávám tedy dvě, ve světě Linuxu velmi známé databáze PostgreSQL (8.3) a MySQL (5.0), které se dnes úspěšně předhánějí, dohánějí a vzájemně si konkurují, na čemž snad zatím stále vydělává uživatel, vývojář či administrátor. Zatím co PostgreSQL je zcela otevřená a svobodná databáze, u MySQL tomu tak úplně není. Navíc její dlouhodobá budoucnost je v této době nejistá, ale existuje tzv. komunitní GPL verze, a případnému uzamčení, jak se tomu stalo u systému Solaris by tedy hrozit nemělo. Tento fakt tedy budu ignorovat, a sem si vědom, že ze strategického hlediska může být zcela zásadní pro výběr databáze.

Nechci ani srovnávat dodržování standardu u obou databází. SQL standard je zcela jistě užitečná a důležitá věc a v každém případě jsem pro, aby obě databáze tento standard dodržovali, nikoli však aby jej vynucovali. Obě databáze mají různá vylepšení, díky kterým jsou sice vzájemně nekompatibilní, nicméně pokud jsou to vylepšení užitečná, jsou rozhodně přínosem, a snad i krůčkem k tomu, aby vznikl další SQL standard, který bude taková vylepšení obsahovat. Konec konců, standardy se neustále obnovují a vznikají nové revize, a to právě proto, že jednotlivé projekty tyto nestandardnosti nasazovali. Ve výsledku tedy budu hodnotit rozdíly tak jak jsou, bez ohledu na to, zda jsou nebo nejsou součástí standardu.

Také bych nerad řešil co bylo. Staré verze jsou již staré a obě databáze měli hodně co dohánět a to mnohem více než dnes. Občasného rýpnutí se sice nevyhnu, ale jelikož MySQL znám poměrně dlouho, sem si vědom toho, kolik toho za poslední léta urazila a kolik se toho naučila.

Administrace

Z hlediska administrátora systému je důležité především to, jak databázový server nainstalovat, konfigurovat, spravovat, zálohovat, prostě provozovat. Instalace je u obou serverů co se Linuxu týče obdobná, konfigurace vesměs také, i když je pravda, že v případě PostgreSQL je často nutné hned po instalaci upravit konfigurační soubory. To je ale v případě kvalitnějšího nastavení nutný zásah u libovolného systému. Správa, no to už je trochu jiné kafe. Správa uživatelů v PostgreSQL mě nikdy moc nevoněla, neříkám že je špatná, ale na můj vkus a o dost krkolomnější než u MySQL. Naopak, MySQL nemá zatím schémata tak jak tomu je v případe PostgreSQL a ty by se zejména na webhostingu hodily. Administrátor by pak nemusel speciálně zakládat zákazníkům další databáze, když je to třeba, klienti by si jen vytvořili další schéma.

Zálohování je samostatná kapitola, přesněji to, co je tak velké ožehavé téma, replikace. V případě MySQL nativní záležitost, hezky konfigurovatelný cluster založený na binárních dumpech, v případě PostgreSQL velké množství nestandardních řešení. Nejprve Slony. Je na tom hodně dobře, i když konfigurace tohoto řešení se rovná IT španělštině řízlé čínštinou. Často se také nasazuje PgPool, což je v podstatě proxy server, jehož nasazení může být velmi nebezpečné. V nové verzi by replikace měla být nativní a velmi podobná MySQL, což tuto nevýhodu vlastně maže. No a na závěr provoz. MySQL je přeci jen méně náročnější pokud řešíme stovky záznamů a tedy pro webové služby vhodnější.

Co má PostgreSQL navíc ?

Co třeba geometrii. Pokud to s geometrií myslíte váže, MySQL je pro Vás pravděpodobně zcela nevhodné, něco málo sice umí a snad brzo bude umět ještě více, ale na konkurenci to nestačí. Na druhou stranu webové stránky jsou plné geometrií že...

A sekvence? Z pohledu uživatele MySQL jsou sekvence vlastně náhrada za auto_increment. Z pohledu PostgreSQListy  je to přesně naopak, a spíš pravda. Nicméně sekvence je něco co lze řešit triggery, ale auto_increment tak jak funguje v MySQL implicitní sekvencí nahradit nelze (jestli při nějaké zvláštní definice ano, to netuším, nicméně definováním sloupečku s typem SERIAL nikoli).

Jenom podle definic indexů se zdá, že PostgreSQL má hodně navrch. Na druhou stranu, to co umí MySQL je v mnoha případech dostatečné, tím spíše, že v případě webových služeb jde často o maximálně desetitisíce záznamů.

Velkým tahákem PostgreSQL byla vždy podpora uživatelských triggerů, procedur a funkcí a to ne jen v jazyku SQL, ale i v jiných jazycích. Podpory uživatelských funkcí se samozřejmě dočkala i MySQL databáze, ale jen v SQL. Jak moc je důležitá podpora dalších jazyků je otázka především na uživatele a vývojáře aplikací, než na vývojáře databází. Osobně mě to přijde spíše jako zanášení nepořádku do databáze, ale každému čeho si žádá.

A co teda je na tom PostgreSQL tak špatně ?

Jako uživatele mě zamrzela definice tabulek. Indexy mima primárních, unikátních a referenčních se musí definovat explicitně. Taktéž komentáře, které mohou velmi pomoci nejdou definovat pro jednotlivé sloupce v rámci create table. Na důslednou optimalizace základních datových typů sloupců lze také zapomenout. Rovnou přiznám barvu s tím, že jen tuším jak moc obě databáze datové typy optimalizují a i tak se to nejspíš verze od verze liší a předpokládám že i lepší. Nicméně definice pouze kladných čísel, omezení na počet číslic, definice znakových sad a další maličkosti jsou zdá se Postgresu spíše cizí.

Takže PostgreSQL není špatná databáze ?

Ne rozhodně není, nikdy sem to netvrdil a ani tento článek neměl něco takového ukázat. PostgreSQL je výborná databáze, která toho umí opravdu hodně, a to co neumí brzo umět bude, nebo to prostě není tak moc potřeba. Celá problematika se točí okolo vhodnosti nasazení takové databáze jako backend webové služby, často nějakého CMS.

Použití databáze samotné, je v případě webových služeb často diskutabilní, a když už je vhodné, nasazuje se jako inteligentní datové úložiště pro stovky, maximálně tisíce záznamů. Z tohoto pohledu je nasazení MySQL daleko vhodnější, někdy by stačila dokonce jen SQLite. PostgreSQL by byl zbytečný kanón na vrabce. A nasazovat velký systém jen proto, že má funkce které možná někdy někdo využije, je přinejmenším prapodivné. Nemyslím si tedy, že by byla databáze PostgreSQL vhodnější než MySQL, spíše naopak, leda by šlo o velmi specializovaný projekt.
Author:

Discussion

IMHO prilis neobjektivni
Myslim si, ze srovnavat produkt, ktery dobre znas, a proto se TI s nim dobre pracuje, s produktem, ktery znas okrajove, nejsi na nej zvykly, a proto se Ti s nim pracuje hur, je znacne neproduktivni a potencialne nebezpene pro ty, kteri by se Tvymi vystupy chteli ridit.

CePal
Re: IMHO prilis neobjektivni
Souhlasil bych s tebou, za predpokladu ze by to byla uplne pravda. Resp. situace je takova, ze MySQL znam mnohem dele, ovsem s PSQL pracuji dene, a posledni rok vice nez s MySQL. Je jasne ze MySQL znam urcite vic nez PSQL. Nicmene to co u MySQL znam navic sou spis tunnig zalezitosti nez cokoli jineho.
Your comment:

© 2019 Ondřej Tůma McBig. Ondřej Tůma | Based on: Morias | Twitter: mcbig_cz | RSS: articles, twitter