Výběr správné databáze

Jedním z největších současných trhů jsou databázová řešení. Jakou z FOSS databází zvolit pro projekt je komplexní otázka.

1.3.2007 06:00 | MaReK Olšavský | přečteno 13571×

Přestože ještě před několika lety (asi tak 8-10) jsem se do práce s databázemi nikterak nehnal, jsou dneska mou hlavní obživou, ať již jako programátora aplikací, které využívají databázový backend, nebo jako člověka, který se snaží jednu velmi zajímavou pokud možno co nejlépe prozkoumat a předat dalším vědomosti o ní. Jsa člověk, který preferuje oss řešení, pozastavím se v tomto článečku u několika rozšířenějších databázových projektů.

MySQL

Pro řadu vývojářu se jedná o první SQL databázi, se kterou se seznámí. Často tomu není pro její kvality a funkce, které jsou v posledních verzích na dobré úrovni, ale pro její snadnost v používání a rozšířenost v učebnicích. Většina učebnic, jednoho z nejrozšířenějších programovacích jazyků, ale i kurzů, PHP se opírá právě o tento databázový backend.

Především z řad webových vývojářů je MySQL vnímáno jako rychlé úložiště textů, ještě v dobách nedávných diskvalifikované téměř nemožností používat kódování UTF-8. Do verze 4.1 jsem měl z této databáze podobný pocit. Verze 4.1 vyřešila problém s ukládáním různých kódových stránek a verze 5.0 přidala funkčnost, která server sice mírně zpomalila, ale zato ji přiblížila k těm velikým databázím. Tou funkčností je míněna podpora transakcí, ano, ty staré verze uměly, ale ne na svých nativních souborech, nýbrž napojením na jiné enginy (BerkeleyDB, InnoDB), kteréžto bridge nebyly nejpovedenější, stored procedur a triggerů.

Výkon této databáze bych velmi nerad hodnotil. Na jedné straně jsem viděl použití, kde byla velmi rychlá a dobře nasaditelná, ale bohužel jsem viděl nemálo nasazení, kde ji FbSQL v rychlosti řádově překonával, již v době, kdy MySQL nemělo nové vlastnosti, které ji zpomalili, ale možná to bylo způsobeno přístupem přes ODBC. I přes veškerou konfiguraci je nepříjemné poměrně znatelné ztrácení rychlosti při vyšším počtu připojených uživatelů a zatížení dotazy. Z jmenovaných, opravdu serverů, je tento pokles u MySQL nejznatelnější.

Kvalitní podpora existuje nejen pro PHP, ale i pro drtivou část ostatních programovacích jazyků. S PgSQL je srovnatelná kvalita dokumentace která je opravdu výborná a je velmi zajímavé a poučné sledovat články, které na stránkách MySQL vycházejí. Když jsem psal o PHP, tak je dobré vědět, že PHP má ze všech databází nejpropracovanější podporu právě pro MySQL, což je znát na výkonu.

Dnes je MySQL vyspělou datábází, kterou lze bez výrazných problémů nasadit téměř na libovolný systém, jen s mírně komplikovanou licencí. Nový engine Falcon, který píše Jim Starkey, dřívější vývojář Interbase/FirebirdSQL, slibuje výrazný pokrok ve všech směrech.

FirebirdSQL

FbSQL je velmi zajímavým kusem software. Pro spoustu lidí se jedná o databázi, která skvěle funguje pod MS Windows, nicméně, mám ji, k plné spokojenosti, otestovánu i na Linuxu. FbSQL vznikl forkováním Borlandí Interbase, o níž se jedovatě tvrdí, že je nejlépe ukrytým pokladem Borlandu, jelikož tento server Borland nikdy příliž nepropagoval, jejíž zdroové kódy byly otevřeny, nicméně Interbase je i nadále nabízena jako komerční produkt. Druhým forkem Interbase byl Yafill, který se vyznačoval větší rychlostí, než FbSQL, ale podstatně horší podporou a dokumentací. Ve verzi 1 byla FbSQL sice kvalitní databází, nicméně ne úplně nejoptimálnější pro větší projekty, ve verzi 1.5 nastalo značné zlepšení a verze 2.0, ve které jsou přimergeovány i části zdrojových kódů Yafilla, je na vysoké kvalitativní úrovni.

Bohužel pokud budete chtít tento server kompilovat pro jinou platformu, než je x86, budete mít trochu problémy. Silnou zbraní tohoto serveru je existence embedded verze, kdy nepotřebujete mít instalovaný celý server, ale pouze postačuje knihovna v místě, kde o ní Váš program bude vědět, dokonce jsou v této verzi podporovány i stored procedury. Databáze je velmi rychlá a stabilní, ale velká slabina je v dostupnosti a kvalitě dokumentace.

Především vývojáři v produktech Borlandu ocení nástroje, pro vývojová prostředí této firmy, které usnadňují spolupráci s tímto serverem. Existují však knihovny a podpora pro mnoho dalších jazyků, z vlastní zkušenosti mohu potvrdit, že podpora pro .NET a Javu je na slušné úrovni.

PostgreSQL

Rychlý a velmi efektivní databázový server, který sice je při malém zatížení pomalejší než FbSQL, nebo MySQL, ale jeho výkon pro jednotlivé uživatele a dotazy klesá s nárůstem zatížení podstatně pomaleji, než u jmenovaných konkurentů. PgSQL velmi přesně splňuje ANSI SQL normy.

Je šířen pod příjemnou BSD licencí. Od PgSQL existují i komerčně podporované verze, z nichž nejznámější jsou Mammoth PostgreSQL, či EnterpriseDB, z nichž ten druhý se chlubí kompatibilitou s Oraclem 8.x. Dokumentace je kvalitativně nesrovnatelná s FbSQL, prostě dokumentace k PgSQL by mohla sloužit jako inspirace pro mnohé další projekty. Pokud mohu hodnotit podporu knihoven, není problém pracovat s touto databází v mnoha programovacích jazycích. Vývojáři neocení jen dostupnost podpory z mnoha jazyků, ale i možnost psát stored procedury v jiných jazycích, než je nativní PL/SQL, například v perlu, pythonu, tcl, či, v podstatě nově, PHP.

Bohužel tento server není příliž oblíbený u začátečníků, protože první kroky v ní vyžadují větší použití mozku, než v případě MySQL. Obrovská možnostmi i podporou a ze všech databází bych ji preferoval nejvíce pro náročnější projekty. Bohužel, i přes své nesporné kvality, je pro webařinu spíše minoritní a je tak trochu oříškem najít hosting, který tento server nabízí, byť, naštěstí, se situace zlepšuje. Ano přiznávám, že v současnosti bych pro ní, v oss světě, stěží hledal konkurenta. Je to také ta databáze, do které se snažím co nejvíce proniknout a to co vím předat dále.

SQLite

SQLite není úplně opravdovou databází. Nejde o server, ale o malou knihovnu, která plní funkčnost velkých databází, ale na rozdíl od spousty podobných řešení umí SQL. Jedná se o embedded databázi v pravém slova smyslu, umí uložit data, updatovat, vymazat a vybrat, zvládá triggery a pohledy. A to je v podstatě vše :-). Především je malá, rychlá a kvalitní podporou v nejrůznějších programovacích jazycích. Já sám tímto řešením nahrazuji v udržovaných programech, psaných v Borland Delphi, starou a velmi obtížně vyhovující, manipulaci s několika dbf soubory.

SQLite3 má mnoho vylepšení, oproti SQLite2, zejména v lepší práci s Unicode, bohužel třeba PHP5 umí, bez doplnění o PDO, pracovat pouze se starší SQLite2. Díky PHP5, kde je SQLite zaintegrován, se toto databázové řešení dostalo do širšího povědomí a využívá jej stále více vývojářů. Všechny data i definice jsou uloženy v jediném souboru, který je pohodlně přenositelný kamkoliv a to dokonce bez ohledu na procesory, které fungují jako big endian, nebo little endian.

Další databáze

Tak a dalšími se tu zabývat nebudu, byť by to bylo zajímavé téma. Chtěl jsem postihnout jen několik apsektů v těch, které se využívají pro běžný vývoj. BerkeleyDB je prý nejrozšířenější databází na světě, protože se jedná o častý backend mnoha programů, ale neznám moc programátorů. kteří by ji používali v zákaznických řešeních, není „ovládána“ SQL příkazy, ale je vysoce ceněna pro své kvality, bohužel její budoucnost je nejasná kvůli odkoupení Oraclem. Programátoři na Java platformě se zasluhují o vývoj a rozšiřování databází jako je h2, db4o, či Apache Derby, tento výčet ale není ani zdaleka úplný.

Závěr

Tato drobná glosa si nenárokuje úplnost v přehledu, open source, databází, to ani zrealizovat nelze. Spíše jsem chtěl zrealizovat drobné zamyšlení nad některými pro a proti u těch 4 rozšířených databází, které se používají v komerčním i nekomerčním vývoji poměrně široce. Možnost vybrat si, co nasadíte, je neocenitelná, ale podle očekávaného zatížení a očekávané funkčnosti je třeba se zamyslet se nad vhodností výběru, byť za cenu, že se budete muset naučit něco nového.

Nezapomeňte, že každá, zde zmíněná databáze má trochu jinou filozofii a jiné podmínky nasazení. PgSQL, nebo FbSQL asi nebude příliž rozumné nasadit do míst, kde se často pžepisují údaje. MySQL má hlavní problém v uživatelích, kteří se k ní staví poněkudsi podivným způsobem a využívají stěží 5% možností. SQLite by nebylo rozumné nasadit do účetního systému, kde s jedněmi daty pracuje více uživatelů. Než se vybere databáze pro projekt, je důležité zvážit pro a proti, prostudovat dokumentace a netrvat na řešení, které znáte, protože nemusí vyhovovat.

Hledání správné databáze je podobná záležitost, jako hledání správné distribuce, očekávám, že pod tímto článkem bude zajímavá diskuze. Ale prosím diskuzi na úrovni, žádný flamewar!

Online verze článku: http://www.linuxsoft.cz/article.php?id_article=1425