V části mého času, vedle mého hlavního povolání vývojáře ve firmě C.A.C spol. s r. o., se věnuji vývoji webových stránek a malých aplikací pro malé zákazníky, kteří se rekrutovali z řad mých kamarádů a na základě jejich doporučení. Většina mého vývoje má oporu v používání SQL databází a protože jsem příznivce svobodných řešení mám na výběr tři rozumné varianty – MySQL, FirebirdSQL a PostgreSQL. Zamozřejmě, že jsem opomenul verze zdarma od Oracle, či IBM, ale to nejsou zcela svobodná řešení, a stejně tak jsem opomenul fantastickou SQLite, která se nehodí pro všechny účely (není to plný server, ale pouze knihovna, byť existuje wrapper, který z SQLite plnohodnotný server udělá).
Začnu u FirebirdSQL. FbSQL je úžasná ukázka toho, jak by se měl software psát, je malý a extrémně rychlý, ale mám pocit, že nejlépe funguje jen v prostředí MS Windows a ve spojení s vývojovými prostředími Borland/Codegear. Pravděpodobně nechápu, jako dost vývojářů v mém okolí, jejich pojetí dokumentace, která je naprosto tristní, člověk neustále něco vyhledává v obrovském množství nejrůznějších fór a stránek, uceleně dokumentace nikde pořádně není.
Pokud si mohu vybrat, je mou jednoznačnou volbou PostgreSQL, protože svého známějšího konkurenta předstihuje snad ve všech možných směrech, možná občas nestačí rychlostně, ale tento odskok se mi projevil především při provozu s málo současně připojenými uživateli.
MySQL je jednoznačně populárnější, weboví vývojáři jednoznačně preferují MySQL, mimo jiné i proto, že je ve standardní nabídce těch nejlevnějších webhostingů. A drtivá většina takovýchto „vývojářů“ umí jen ty absolutně nejzákladnější operace (SELECT, INSERT, UPDATE a DELETE), nic dalšího. MySQL využívají jen jako dost rychlé úložiště na texty, pro kteréžto použití by stačily jen obyčejné textové soubory, ale optimalizace a vestavěné funkce jsou už (sprostá) cizí slova. Většinou tito programátoři nemají tušení o indexech a že by mohli výhodně využít pohledy, spouště, nebo uložené procedury je pro ně moc vysoká databázová škola (přiznávám se, že jsem spoustu těchto možností zpočátku také neznal, ale postačilo studovat).
Instalace PostgreSQL na vývojový webserver vyžaduje trochu více znalostí, než instalace MySQL, pokud je řeč o vývojovém webserveru na platformě MS Windows. MySQL je zcela obvyklou součástí připravených balíků, jako jsou XAMPP nebo EasyPHP, ale neviděl jsem takovýto samoinstalační balíček připravený se serverem PostgreSQL. V GNU/Linuxu a *BSD je situace o poznání jednodušší, díky promyšlené správě balíků.
Horší situace je kolem tutoriálů. Pokud se budu dívat jen na jazyk/platformu PHP, narážím na to, že drtivá většina tutoriálů seznamuje jen se základy použití s MySQL, další databáze jsou naprosto opomenuty. I samotná MySQL je tématem článků/tutoriálů na mnoha serverech, ale PostgreSQL je naprosto opomíjena a stejné je to i s tištěnou literaturou, pochopitelně nemyslím jen literaturu zabývající se jazykem PHP (obecně řečeno, titulů o všech databázích dohromady je na trhu snad méně, než o MySQL).
Když budu porovnávat obě databáze v jednotlivých směrech, dojdu k následujícím (subjektivním) závěrům:
- Rychlost: Není jednoznačný vítěz, při malém množství dat, nevelké komplikovanosti vazeb v datech a rozumném počtu uživatelů bude MySQL téměř vždy rychlejší, ale výkonostní pád při rostoucí zátěži je podstatně výraznější, než u konkurenční PostgreSQL.
- Jazyk: MySQL i PostgreSQL jsou sice SQL databázové servery, ale mezi verzemi použitého jazyka jsou nemalé odlišnosti, v podstatě nehrozí varianta, že byste odladili aplikaci proti rychlejší MySQL a pak ji bez nejmenších problémů používali s PostgreSQL. PostgreSQL je, ve srovnání s MySQL, podstatně striktnější na správné typy dat, což je nepříjemné zejména pro začínající vývojáře.
- Clustering a replikace: MySQL zvládá clustering a replikaci v podstatě sama o sobě, kdežto PostgreSQL je nutné (trochu) pomoci, třeba pomocí Slony. Podobnost se slovem sloni a logo není náhodná, jde o software ruské provenience a opravdu znamená sloni.
- Stored procedury: MySQL umí stored procedury až od verze 5.0, konečně. PostgreSQL je umělo již v době, jsem se s tímto serverem setkal, tj. někde kolem roku 2003 a verze 6. Jenže PostgreSQL neumí uložené procedury jen ve svém nativním jazyce PL/SQL, ale i mnoha dalších, namátkou vypíchnu Python, který patří mezi mé nejoblíbenější jazyky.
Proti PostgreSQL by mohl hrát ještě jeden argument, donedávna bylo opravdu velmi problematické tento server provozovat pod MS Windows, které jsou preferovaným systémem pro drtivou většinu vývojářů, na Un*xových operačních systémech fungovalo PostgreSQL naprosto fantasticky.
PostgreSQL je díky svým schopnostem občas nazýváno Open Source Oraclem a dlouho byl jeho vývoj podporován firmou SUN Microsystems, bohužel tato podpora už je (nejspíše) ukončena, protože SUN Microsystems koupil společnost MySQL. MySQL s mnoha úpravami používá třeba Google. Osobně mi licenční politika MySQL připadá dost komplikovaná a velmi bych se bránil jejímu komerčnímu nasazení.
Já jsem si PostgreSQL velmi oblíbil i když se moje práce točí kolem 3 open source databázových serverů, při kódování pro mou domovskou firmu využívám FirebirdSQL, pro webařinu obvykle mám MySQL (z velké části díky zděděným projektům a díky použití některých prefabrikovaných řešení) a svou nejoblíbenější PostgreSQL mám spíše na speciality, které nejsou velké četností, ale rozsahem.
Komentáře
8 komentářů: „PostgreSQL vs. MySQL“
MySQL jsem si oblíbil právě pro svoji jednoduchost a snadnou zapamatovatelnost – viděno z pohledu laika – uživatele, který si vyrobil svůj vlastní méně rozsáhlý projekt a může si jej průběžně upravovat podle svých potřeb. V kombinaci s PHP nebo Pythonem dobrá volba. Navíc dnešní verze mají již řadu pokročilých funkcí. Na Postrgres jsem se díval také, ale zatím potřebu měnit systém nemám.
Tak já používám na web aplikace MySQL v poslední stable verzi, ale nutno podotknout, že i nové MySQL zvládá to, co konkurence. Triggery, procedury, indexy (to dýl), funkce. Sice ne vše možná na 100% (ó díky za ORACLE), ale zvládá a dá se v tom pracovat.
Já teda volím MySQL, je to dostupné, free, jak na Linux, tak Win a většina služeb je právě na toto.
Tam, kde potřebuji stabilitu, výkon a možnost redundance nebo clusteringu služeb, tak jednoznačně ORACLE.
Lukáš Hakoš: No tak s tím provozem na MS Win se lze právě snadno seknout. Přečti si jejich licenci, dokonce jsme v jedné firmě radši pořídili malý Atomový strojek s GNU/Linuxem a MySQL, než řešit licenci pro Win. Nehledě k tomu, že zajistit ssl komunikaci bylo na GNU/Linuxu nepoměrně triviálnější.
Nechce se mi číst žádná licence, nečtu EULU, nečtu nic podobného slovům: License, Licence, LIS aj. 😀 Škoda promarněného času.
Takže rozumím dobře, že MySQL nelze provozovat na Win i tedy s tím, že ten samý tým, který spravuje MySQL (DEV) pod Linux, tak dělá verzi pod Widle?
Nebo je tam nějaké omezení na to, že to nesmí být provozováno komerčně či se k tomu smí připojovat jen určitý počet lamerů…?
Lukáš Hakoš: Jen si tu licenci přečti. Budeš hodně překvapen, ne pro všechna nasazení je možná svobodná licence.
No jo porád 🙁 Tak já se vrhnu do čtení zítra v práci…
Tak ještě nedávno bylo v PostgreSQL manuálu, že pro migraci na Windows udělali to nejnutnější, a víc nehodlají ani hnout prstem. Toto už z manuálu zmizelo, zřejmě jim někdo poradil, že tím dobrou službu PostgreSQL nedělají.
Věžte, že podpora PostgreSQL pod Windows je taková, že já osobně bych do ostrého provozu toto nenasadil. A pro testovací provoz to sice jde, ale celý manuál se tváří tak, že jim jde pouze o ostrý provoz – proto vlastně PostgreSQL nefunguje pod každými Windows a vyžaduje na Windows nestandardní zásahy, které tam nejsou zvykem.
Nemůžu si pomoci, ale PostgreSQL podle mého (z hlediska rozšíření) podělala co mohla – a nevěřím, že má nějakou žářnou budoucnost. Tím neříkám, že to není kvalitní databáze – ale to, že je kvalitní databáze neznamená, že nezajde časem na úbytě.
Jinak tvrdě souhlasím s FB a dokumentací. Já to s FB zabalil, protože není-li dokumentace, nedá se rozumně pracovat.
Ohledně MySQL – asi jste stejně jako já zvyklý na procedury, triggery, view a bohatý serverový jazyk a nevím kdovíco ještě – tam MySQL kulhá, a to i ve verzi 5, kde tyto věci jsou, ale určitě ne v silné formě. Když ale od toho abstrahuji, MySQL vůbec není špatná. Ze všech možností se asi jako jediná dá označit za skutečně multiplatformní – Postgres je v podstatě unix only, neberu, že Posgreska pracuje na Windows, to je jen aby se neřeklo, FB je možná také multiplarformní, konekonců vzniknul na unixu.
Ono se tu asi srovnává nesrovnatelné – postgreska je zbytečně složitá databáze, více, než na to co umí. Má to být databáze na velké provozy a zátěže, ale to rozhodně není prostor, ve kterém se pohybuje mysql, nebo FB. A hlavně mám pocit, že prostě autor chce velkou databázi. Ale pak měl asi srovnávat PostgreSQL, Oracle, Sybase ASA, DB2 a podobné.
citat: „Vězte, že podpora PostgreSQL pod Windows je taková, že já osobně bych do ostrého provozu toto nenasadil.“ ….
Bych doplnil:
Ja osobne bych do ostreho provozu nenasadil samotne windows. Buh vi ze na tom delam, ale vzdy mam vsechno plne prenosne na unix a taky to na tom provozuju.