% $Id: reseniprostredky.tex,v 1.1 2007/01/18 22:20:30 jarda Exp $
\subsection{Ukládání dat}
Ukládat data je možné v různých formátech. Od primitivních textových souborů nebo
binárních souborů s pevnou délkou záznamu přes jednoduché databázové formáty typu
DBF nebo Berkeley DB až po relační nebo objektové databáze.

\begin{enumerate}

\item Volba jednoduchého formátu souboru je výhodná v tom, že si aplikace vystačí s prostředky 
standardního programovacího jazyka a nemusí spoléhat na dodatečný software a knihovny.
Na druhou stranu ovšem programátor musí řešit jak přístup k jednotlivým záznamům,
jejich vytváření, mazání, případnou indexaci, kontrolu integritních omezení a podobně.
Dále není bez dalšího úsilí možné pracovat nad daty jinými prostředky, než pomocí dané
aplikace. Vytváření vazeb mezi daty jednotlivých souborů je opět plně v režii programátora.

\item Řešení typu Berkeley DB umožňuje poměrně komfortní a rychlou práci se záznamy, přístup k záznamům
pomocí klíčů (asociativní pole), rozhraní je standardizované a relativně snadno dostupné pro
přístup z jiných programů, nicméně problém provázání dat apod. zůstává.

\item Objektová databáze je vhodná pro ukládání komplexně strukturovaných objektových dat. Pro
spoustu účelů však logiku programu zbytečně komplikuje a její nasazení nemá výrazné výhody
proti nasazení relační databáze.

\item Relační databáze jsou v dnešní době zřejmě nejčastějším úložištěm strukturovaných dat. Umožňují
standardním způsobem mapovat data z jednotlivých domén a relace mezi nimi do tabulek. Moderní
relační databázové systémy umožňují definovat tabulky s daty nejpoužívanějších typů, vytvářet
indexy pro rychlý přístup, stanovit automaticky hlídané integritní omezení, zajistit atomicitu
operací apod. Standardním jazykem pro práci s daty v relační databázi je SQL. Relační databáze
byla logickou volbou pro dostupnost, rychlost, komfort práce a možnost administrovat data pomocí
standardních nástrojů včetně možnosti exportu dat z relační databáze a importu do jiné databáze.
\end{enumerate}

Pro menší projekty typu databáze benchmarků existuje několik vhodných databázových systémů,
které jsou platformě nezávislé, dostatečně výkonné a disponují potřebnými funkcemi. Známé
jsou například databáze MySQL, PostgreSQL, SQLite apod. Databáze benchmarků je navržena tak,
že je v zásadě možné ji po zanedbatelných změnách provozovat nad různými databázovými stroji.
Vzhledem k původnímu zadání a potřebám byla zvolena databáze PostgreSQL. Tato databáze je volně
šiřitelná, má dostupné zdrojové kódy, získala si dobrou pověst díky svojí stabilitě a pokročilým
možnostem. Lze ji provozovat pod různými systémy typu Unix i pod MS Windows.

\subsection{Webová aplikace}

Pro provozování webové aplikace potřebujeme server protokolu HTTP, který dokáže komunikovat
s WWW browsery a zpřístupnit jim data uložená na lokálním nebo vzdáleném počítači. Existuje
velké množství HTTP serverů, které nabízejí různé možnosti, jak z hlediska rychlosti, tak
podpory dynamických stránek, bezpečnosti apod. Zvolené webové rozhraní je možné realizovat 
různými prostředky a detailní řešení zahrnuje technologii, programovací jazyk, HTTP server 
i operační systém.

\begin{enumerate}
\item Statické HTML stránky nejsou dostatečné pro vkládání dat ani pro jejich parametrizované 
vyhledávání apod.

\item Klasický CGI přístup. Data jsou zpracovávána programem, který pracuje na klasickém
principu programu pro příkazovou řádku. Čte data ze standardního vstupu a výstupu. Tento přístup
je relativně univerzální a při použití technologií jako FastCGI vykazuje i rozumných rychlostí.
Zvolená abstrakce je ale relativně nízká a tento přístup není v dnešní době příliš oblíběn.

\item Specializovaný jazyk nebo webový framework. Mezi nejpoužívanější technologie patří PHP,
ASP a JSP.
\end{enumerate}

{\odstavec

Zvolen byl jazyk PHP, který je dynamickým jazykem specializovaným na tvorbu dynamických webových
aplikací. Může běžet nad různými HTTP servery a operačními systémy. Má prostředky pro komfortní
práci s daty v relačních databázích s využitím jazyka SQL, mnoho různých knihoven dodávaných
přímo v základní instalaci nebo dostupných pro rozšíření možností. Jazyk je interpretovaný, ale
dosahuje dostatečné rychlosti, kterou je možné dále zvýšit pomocí komerčního nástroje Zend Optimizer.
Výhodou PHP je rychlý vývoj a možnost vkládání dynamických prvků přímo do stránky. Existují i
řešení snažící se o přísné oddělení aplikační logiky a prezentační vrstvy v PHP aplikacích, ale
pro náš projekt toto není příliš zajímavé.

Důležitými argumenty pro volbu PHP bylo využívání jazyka v jiných školních projektech, jeho snadná
zvládnutelnost apod.

PHP může běžet i nad jinými servery, ovšem zvolil jsem kombinaci PHP + Apache + Linux, která se
osvědčila (nejen) při řešení jiných projektů školy. Pilotní instalace ovšem běží pod operačním
systémem FreeBSD a ukázalo se, že z hlediska funkčnosti mojí aplikace jsou oba operační systémy
v zásadě ekvivalentní.

}

\subsection{Práce se zdrojovými soubory benchmarků}

Pro zpracování zdrojových benchmarkových souborů jsem zvolil jazyk Python. Python je
dynamický, silně typový, objektově orientovaný jazyk s funkcionálními prvky. Při jeho návrhu
byl kladen důraz na rychlý vývoj aplikací, dobrou čitelnost programů třetími osobami
a vhodností nasazení i pro řešení konkrétních problémů neprogramátory (např. vědeckými
pracovníky různých oborů). Python je interpretovaný jazyk a jeho interpreter je dnes dostupný
pro všechny moderní serverové i desktopové výpočetní platformy. Existují rovněž interpretery
pracující nad virtuálními stroji JRE a .NET a připravuje se podpora dalších virtuálních strojů,
jako jsou Parrot a LLVM. Svoji životaschopnost prokázal jazyk jakožto základ projektů typu Zope,
jako skriptovací rozšíření mnohých programů i při budování infrastruktury komerčních firem -
Python je masivně nasazen ve firmě Google, která se zabývá vyhledáváním WWW i dalšími internetovými
aktivitami.

{ \odstavec
Python jsem zvolil proto, že umožňuje snadný převod myšlenek do kódu, disponuje slušnou výpočetní
rychlostí, je snadno dostupný a obsahuje mnoho nástrojů pro rychlý vývoj a analýzu a testování 
fungování aplikace.
}

% vim:enc=iso8859-2:fenc=iso8859-2:
