PostgreSQL: Intervaly (Range Types)

V PostgreSQL přibylo (v řadě 9.x) několik zajímavých typů. Typ json/jsonb asi zaujal více a našel jsem hodně článků (není se čemu divit při popularitě NoSQL databází pro ukládání různě strukturovaných dokumentů); rozšíření o intervaly (range types) si možná všimlo méně vývojářů. Typ interval umí PgSQL od verze 9.2.

Zobrazit celý článek

PostgreSQL: Common Table Expressions

Při trochu pokročilejších databázových dotazech jsou často využívané korelované dotazy, kde výstup jednoho dotazu poskytuje datovou množinu pro další dotaz. Nejsou velmi efektivní, při požadavku na jejich rychlost je nezřídka nutné mít vytvořený i jinak zcela nelogický index a často je lze nahradit mnohem „čistším“ JOINem. Další možnost nabízí Common Table Expressions (dále jen CTE), které jsou zatím opomíjené.

Zobrazit celý článek

Lepší konzolový nástroj pro PostgreSQL: pgcli

Osobně považuji PostgreSQL (dále jen PgSQL) za nejlepší svobodnou databázi, bohužel je (mírou nasazení) ve stínu populární MySQL. Pro připojení k PgSQL existuje velmi propracovaný nástroj PgAdmin či několik webových aplikací. Pokud potřebujete přístup z konzole tak si můžete vybrat výchozí psql, nebo zvolit mnohem lepší pgcli.

Zobrazit celý článek

Psát dnes vlastní CMS? Docela nesmysl

Doby kdy si vlastní systém pro správu obsahu (neboli CMS) psal kdejaký vývojář, který chtěl uspět na internetu, nejsou tak vzdálenou vzpomínkou. A když pořádně uměl databáze, tak mohla vzniknout i velmi zajímavá díla. Byly to doby, kdy se mi pomalu ani nezastavil proud školení PHP a SQL :-).

Zobrazit celý článek

SQL: podmínka v UPDATE

Každý, kdo pracuje při programování s databázemi, zná příkaz UPDATE a ví, jak se aktualizuje konkrétní řádek/řádky, když si je omezí podmínkami v části WHERE. I měněnou hodnotu lze zapodmínkovat, aby se ušetřil zbytečný dotaz.

Zobrazit celý článek

MariaDB, kde to vázne vážení webhosteři?

MariaDB je na světě téměř 5 let (22. ledna 2009 byla vydána první verze) a ačkoliv si nachází cestu do distribucí GNU/Linuxu, aškoliv ji testují a nasazují provozovatelé nejvíce navštěvovaných webů, tak webhostingy, minimálně v ČR/SR ji zatím přehlíží. Zcela neoprávněně, stejně jako defakto ignorují PostgreSQL o němž lze napsat, že je to „funkčně open source konkurent Oracle“.

Zobrazit celý článek

Úvaha nad rozdělením databázové aplikace (FirebirdSQL + .NET)

Podílím se na vývoji aplikace na platformě .NET v kombinaci s databází FirebirdSQL. Ačkoliv občas utrousím nelichotivá slova především na adresu poměrně slabé dokumentace k FbSQL, tak se mi kombinace líbí. Ne vždy bude potřeba běžící plný server a FirebirdSQL skvěle funguje i v embedded verzi, kde je celá funkčnost zajištěna jedinou .dll knihovnou, včetně podpory stored procedur.

Zobrazit celý článek

SQLite

SQLite je nesporně velmi zajímavým kusem software. Jde o velmi jednoduché a přesto dokonale efektivní řešení databáze. Pro některé uživatele/programátory se nejedná o plnohodné řešení databáze, nicméně, pokud si najdete (třeba na wikipedii) definici databáze, tak zjistíte, že ji SQLite bezezbytku splňuje.

SQLite je databáze, která je primárně beztypová, tj. můžete databázi nadefinovat jak chcete a potřebujete a data můžete uložit naprosto bez ladu a skladu :-D, což ale není zcela rozumný nápad. Tabulky můžete definovat buď jen beztypovým vyjmenováním sloupců, nebo jim udáte i typy. Udáním typů pro jednotlivé sloupce jen udáte prioritu, jak si je má databáze uložit, pokud se jí to nepodaří, bude hodnota uložena jako text. Všiml jsem si, že třeba Borlandí prostředí, pokud se nenatypují sloupce nemá moc příjemné vybírání dat z jednotlivých buněk.

SQLite je, aktuálně, v řadě 3 a jestli nemáte důvody používat starší řadu, například díky tomu, že je zaembedována do PHP5 (od verze 5.1 už není, ale je jako externí modul), použijte ji. Jednako tato aktuální řada pracuje podstatně lépe s Unicode/UTF-8 a je optimalizovanější v nárocích na diskový prostor.

Protože mě plně vyhovuje práce z příkazového zdroje, neprozradím vám mnoho z použití gui nástrojů, nicméně v prostředí MS Windows mě velmi zaujal …. Databázi vytvoříte jednoduše použitím příkazu:

sqlite3 ~/sqlite/prvni.sq3
# pokud potrebujete pouzivat SQLite rady 2
sqlite ~/sqlite/prvni.sq2

Sqlite3, eventuálně sqlite pro verzi 2.x, je cli administrační nástroj. Předchozím příkazem vytvoříte v podadresáři sqlite/ soubor prvni.sq3, do nějž postupně nadefinujete tabulky a kde budou uložená data. Na koncovce nezáleží, ale pokud používáte některý gui nástrojů pro správu, je rozumné používat stejnou koncovku, kterou si naasociujete na oblíbený administrační program. Pokud již databáze existuje, tak výše uvedeným příkazem databázi pouze otevřete, stejně je tomu, například, v PHP5.

Pokud máte databázi otevřenu, můžete vytvořit tabulky, triggery, pohledy, triggery a uložené dotazy. Můžete manipulovat s daty.

Překvapivě je SQLite velmi rychlá databáze, pokud zkusíte porovnání s MySQL, FirebirdSQL, či PostgreSQL, budete velmi příjemně překvapeni. Já sám tuto databázi nasazuji do míst, kde je téměř jisté, že nebudu moci mít spuštěný plnohodnotný databázový server. V současné době jím nahrazuji poměrně nepříjemné, nestabilní a pomalé řešení, kdy můj předchůdce ve vývoji jednoho software ukládal data z Borlandích paměťových tabulek do XML souborů. Znamená to sice poměrně rozsáhlé přepisování aplikace, nicméně výsledky jsou velmi pozitivní.

Pokud hledáte vhodnou databázi, nejen pro malé projekty, doporučuji zaměřit pozornost na SQLite. Jediným limitem v množství uložených dat je omezení souborového systému, kde databáze běží. Pochopitelně se jedná o multiversion databázi a je třeba občas ji vyčistit od neplatných záznamů.

Hledání ideální databáze

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í, pouzastavím se v tomto blogspotu 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, stored procedur a triggerů.

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. 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. Databáze je velmi rychlá a stabilní, ale velká slabina je v dostupnosti a kvalitě dokumentace.

PostgreSQL

O této databázi nemám tady moc co napsat. Rychlá, sice při malém zatížení pomalejší než FbSQL, nebo MySQL, stabilní s kvalitní licencí a velmi přesně splňující ANSI SQL. Mezi začátečníky není příliž oblíbená, protože první kroky v ní vyžadují větší použití mozku, než v případě MySQL. Obrovská možnostmi a podporou. 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í. 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. 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. Tedy BerkleyDB je prý nejrozšířenější databází na světě, ale neznám moc programátorů. kteří by ji používali v zákaznických řešeních.

Poznámka

Tento článek vyšel v delší, upravené, podobě na portále LinuxSoft.cz.