Databáze v Linuxu

Sdílet

Vraťme se ale k Linuxu. Důvod, proč jsme si udělali rychlou procházku do nitra databázové hantýrky byl jediný, a to abyste získali alespoň letmou představu o používaných pojmech – i na Linuxu se totiž provozují moderní technologie a se vším zmiňovaným se tam (pokud budete chtít) setkáte.

Vraťme se ale k Linuxu. Důvod, proč jsme si udělali rychlou procházku do nitra databázové hantýrky byl jediný, a to abyste získali alespoň letmou představu o používaných pojmech – i na Linuxu se totiž provozují moderní technologie a se vším zmiňovaným se tam (pokud budete chtít) setkáte.

Nejznámějšími databázovými systémy, které se na Linuxu používají a navíc, které patří mezi tzv. „svobodný software“ s otevřenými zdrojovými kódy, jsou MySQL a PostgreSQL. MySQL je šířeno pod licencí GNU GPL, která vás mimo jiné opravňuje systém zdarma používat, číst jeho zdrojáky a modifikovat. Licence PostgreSQL je ještě volnější.

Oba systémy jsou relačními (přesněji: PostgreSQL je objektově-relační), komunikují vSQL a oba jsou postaveny na architektuře klient/server. Jak pro MySQL tak i pro PostgreSQL platí, že to jsou systémy multi-threadové (více vláknové), takže jsou schopny v jednom okamžiku obsluhovat několik klientů najednou. Obecně mohou server i klienti běžet na různých počítačích a přes síť se spolu dorozumívat, ale samozřejmě nic vám nebrání spustit všechny programy na jednom jediném stroji.

MySQL

Kořeny MySQL sahají na sever Evropy. Systém vznikl v dílně švédské firmy MySQL AB, která se v současnosti živí především tím, že poskytuje profesionální řešení na bázi MySQL, konzultacemi, reklamou a já nevím čím ještě. To, že se rozhodli SŘBD MySQL šířit jako „free“ software, je vneslo do světového povědomí.

MySQL je multiplatformní s API pro mnoho programovacích jazyků. Pro platformy Windows disponuje také rozhraním ODBC 2.5, takže můžete dělat i takové psí kusy jako přistupovat k MySQL zMS Accessu.

Systém MySQL se snaží vyhovovat standardu ANSI SQL92 – v něčem ho rozšiřuje, ale v určitých ohledech ho ještě nenaplňuje. Má stejně jako jiná SŘBD pěkný repertoár datových typů a funkcí, které lze použít v příkazech SELECT. Umí seřazovat, seskupovat a spojovat tabulky ( INNER/LEFT/RIGHT JOIN). Samozřejmostí je indexování sloupců pomocí B-stromů. Na druhou stranu, MySQL dodnes podporuje tzv. vnořený SELECT pouze u příkazů INSERT a REPLACE. Dotaz typu

SELECT * FROM tabulka1 WHERE id IN (SELECT id FROM tabulka2)

v MySQL nevykonáte. Lze pomoci různými berličkami typu LEFT JOIN nebo celou věc oprogramovat ručně, ale je to samozřejmě pro programátora složitější.

V současnosti začalo MySQL podporovat i transakce a zamykání tabulek. Tzv. uložené procedury a možnost použití triggerů od něj ale nečekejte. (Uložených procedur se možná někdy v budoucnu dočkáme, podpora triggerů v MySQL však není ani plánována.)

Pro zajištění bezpečnosti má v sobě MySQL zabudovaný systém uživatelů a práv. Přístup k databázi je chráněn hesly, přičemž každý uživatel může mít definovánu množinu operací, které je oprávněn vykonat. Tj. někdo může jen číst, jiný i zapisovat či měnit strukturu tabulek. Pro zvýšení ochrany se hesla přenášejí výhradně v kryptovaném tvaru.

Limity co do velikosti tabulky byly u MySQL nastaveny na 4 GB. Od verze 3.23 však díky MyISAMtento teoretický limit posunuli až na hranici 8 miliónů terabajtů (263 bajtů)! V praxi to znamená, že MySQL je co do objemu dat omezováno pouze operačním systémem, protože právě on se stává tím nejužžím místem při práci s tak obrovskými kvanty dat. (Linux-Intel: 2 GB, 4 GB nebo víc, Linux-Alpha: 8 TB.) Tvůrci uvádějí, že sami používají MySQL pro správu databáze o 50 miliónech záznamů a že znají uživatele, který do MySQL nacpal na 60 tisíc tabulek s více než pěti miliardami záznamů!

Nevýhodou MySQL je takřka nulová kontrola složitějších integritních omezení. Vazby mezi tabulkami si musíte pamatovat sami a hlídat se, abyste vztahy neporušili. Při definici nové tabulky sice MySQL přečte konstrukci FOREIGN KEY, ta je však mrtvá a systém ji nikdy nezohlední.

Nejsilnější zbraní MySQL je rychlost. Oproti později zmiňovanému PostgreSQL je několikrát rychlejší. Autoři se netají, že právě rychlost je jejich hlavní prioritou a že se kvůli ní ani nechystají implementovat některé funkce (třeba triggery).

PostgreSQL

PostgreSQL je objektově-relačním systémem řízení báze dat, založený na projektu POSTGRES verze 4.2 Berkeleyské katedry počítačových věd Kalifornské univerzity v USA. Projekt sponzorovaly mnohé státní organizace Spojených států a výsledkem byla řada nově objevených objektově-relačních konceptů, které se nyní začínají vyskytovat i v komerčních produktech velkých firem. PostgreSQL je přímý open-source následník původního kódu z Berkeley.

PostgreSQL je asi nejpropracovanějším SŘBD mezi databázovými systémy s otevřeným zdrojovým kódem. Také on je multiplatformní a poskytuje API rozličným programovacím jazykům.

Jeho podpora SQL konstrukcí je takřka kompletní. V PostgreSQL si vychutnáte i transakce a vnořené SELECT y, máte možnost si definovat vlastní funkce a triggery. K zajištění integrity dat si můžete vytvořit houf všelijakých integritních omezení včetně cizích klíčů atd.

PostgreSQL je už tak daleko, že zamykání tabulek nahradil systémem spravujícím více verzí dat. V praxi to znamená, že zatímco jedno vlákno nějaké záznamy přepisuje, jiné může bez přerušení ze stejné tabulky číst konzistentní data. Mezi opravdové lahůdky, jež z PostgreSQL dělají objektově-relační databázi, je možnost dědit definice tabulek. Také vytváření si vlastních datových typů není k zahození.

Bezpečnostní politika PostgreSQL je na mnohem vyšší úrovni než u MySQL. Kromě klasického přístupu chráněným heslem umožňuje PostgreSQL použití autentikace pomocí Kerberosu nebo tzv. „Identifikačního protokolu“ (ident-based authentication). Samozřejmostí je vytváření různých uživatelů s různými právy a jejich sdružování do skupin.

Národní specifika (locales) jsou v PostgreSQL dobře podporována. Systém umí přečíst různá kódování včetně multi-bajtového Unicode. Pokud server i klienti používají různá kódování, PostgreSQL je dokáže automaticky převádět.