Obsah | Dal¹à | Pøedchozà |
Databázový stroj poskytuje své slu¾by (práci s daty, které jsou potøebné pro zaji¹tìnà funkcionality celého dokumentografického informaènÃho systému) pro svou nadvrstvu, na kterou se v dal¹Ãm textu budeme odkazovat jako na rozhranà databázového stroje. Toto rozhranà implementuje znaènou èást logiky práce s daty poskytovanými databázovým strojem.
Po¾adavky kladené na databázový stroj vycházejà pøedev¹Ãm z potøeb námi navr¾eného modelu dokumentografického informaènÃho systému, pøesnìji z charakteru dat, které je nutné spravovat pro jeho bìh, a z vlastnostà operacà nad danými daty. Jde pøedev¹Ãm o zaji¹tìnà následujÃcÃho:
Pøi návrhu systému jsme uva¾ovali dvì následujÃcà mo¾nosti, jak zajistit vý¹e uvedené po¾adavky a tÃm nabÃdnout vy¹¹à vrstvì (pro rozhranà databázového stroje) odpovÃdajÃcà slu¾by:
S ohledem na specifické vyu¾ità navrhovaného databázového stroje se jevilo pou¾ità vlastnÃch prostøedkù pro zaji¹tìnà databázových slu¾eb efektivnìj¹Ã, jak na rychlost pøÃstupu k datùm, tak velikost s ohledem na vyu¾ità mÃsta ve vnìj¹à pamìti. Na druhou stranu, pro pou¾ità ji¾ existujÃcÃho relaènÃho databázového stroje, zde mluvila mo¾nost vyu¾ità transakènÃch a bezpeènostnÃch slu¾eb, které má ji¾ vìt¹ina produktù v sobì zahrnuta. V koneèné fázi bylo rozhodnuto o implementaci vlastnÃho nástroje pro zaji¹tìnà databázových (znaènì speciálnÃch) slu¾eb pro vy¹¹à vrstvu. Systém Agent si v¹ak, dÃky svému modulárnÃmu rozdìlenÃ, zároveò uchovává mo¾nost nahrazenà námi implementovaného databázového stroje strojem relaènÃm èi jiným databázovým strojem. Jeho zaèlenìnà do systému se zajistà úpravou implementace rozhranà databázového stroje, pomocà kterého komunikujà vy¹¹à vrstvy. Vy¹¹à vrstvy jsou tedy na pou¾itém databázovém stroji nezávislé.
Obrázek 5.2.1-1 - zobrazenà vztahu
mezi databázovým strojem a rozhranÃm databázového
stroje
Databázový stroj je implementován pomocà následujÃcÃch základnÃch tøÃd:
Úkolem objektù typu StopList je správa termù obsa¾ených ve stoplistu jednotlivých databázÃ. Jde pøedev¹Ãm o zaji¹tìnà následujÃcÃch základnÃch operacÃ:
Dal¹à po¾adavky kladené na objekty typu StopList vycházejà ze zpùsobu jejich pou¾itÃ. Ten klade dùraz pøedev¹Ãm na rychlost jednotlivých operacÃ, které budou postupnì provádìny na datech (termech) tìchto objektù. Po provedenà analýzy èetnostà výskytù jednotlivých operacÃ, byl vznesen po¾adavek na rychlost pøedev¹Ãm u operace member a následnì také u operacà insertTerm a deleteTerm. U operace getTerms nenà rychlost vy¾adována, nebo» se nejedná o operaci èastou v porovnánà s ostatnÃmi operacemi.
Základnà otázka, která se musela vyøe¹it pøed vlastnà implementaci tøÃdy StopList, byla volba reprezentace dat. S ohledem na po¾adavky uvedené v pøedchozÃm odstavci, zde byly v zásadì dvì mo¾nosti. Prvnà z nich nabÃzela reprezentaci termù v podobì nìkteré ze stromových struktur. Druhou mo¾nostà bylo pou¾ità he¹ovánà a he¹ovacà tabulky. HlavnÃm kritériem pøi výbìru mezi tìmito mo¾nostmi, byla èasová nároènost po¾adovaných operacÃ, pøedev¹Ãm v¹ak rychlost operace member . Z tohoto pohledu byla nakonec vybrána mo¾nost druhá, která nabÃzà konstantnà èas operace member, oproti èasu logaritmickému poskytnutého prvnà mo¾nostÃ.
Vzhledem k pou¾ità he¹ovánÃ, bylo v poèáteènà fázi implementace nutné nalézt he¹ovacà funkci, která by rovnomìrnì vkládala termy do he¹ovacà tabulky. Za he¹ovacà funkci byla zvolena funkce podobná funkci pou¾ité pro poèÃtanà kontrolnÃch souètù (napø. v TCP/IP). Z dosavadnÃch testù lze konstatovat, ¾e takto zvolená funkce splòuje po¾adavky co se týèe rovnomìrného rozprostøenà he¹ovacÃch klÃèù.
Co se týèe vlastnà metody he¹ovánÃ, do¹lo v prùbìhu implementace tøÃdy StopList k jejà výmìnì. V prvnÃm "kole", bylo pou¾ito he¹ovánà dle konstantnÃho poètu bitù he¹ovacÃho klÃèe he¹ovaného záznamu. Kolize (pøeteèenà blokù slou¾ÃcÃch pro ukládanà záznamu stejných klÃèù) byly øe¹eny pomocà vytváøenà spojových seznamù nových blokù. Nevýhodou této metody bylo, ¾e ji¾ pøi vytváøenà he¹ovacà tabulky bylo nutné urèit jejà velikost (poèet platných bitù he¹ovacÃho klÃèe). To v¹ak vedlo dle stavu naplnìnà tabulky daty, buï k plýtvánà mÃstem (pøi malém mno¾stvà ulo¾ených dat) nebo v hor¹Ãm pøÃpadì k vytváøenà pøÃli¹ dlouhých seznamù koliznÃch blokù a následné ztrátì rychlosti (pøi nadmìrném mno¾stvà dat). Tento problém byl èásteènì odstranìn, poskytnutÃm mo¾nosti reorganizace celé he¹ovacà tabulky. Reorganizace ve své podstatì pøehe¹ovávala celou he¹ovacà tabulku do tabulky nové, která ji¾ mìla "pøimìøený" rozmìr vzhledem k mno¾stvà ulo¾ených záznamù. Zde v¹ak vyvstala nová otázka: "Kdy provádìt danou reorganizaci ?". Jednou z mo¾nostà bylo provést ji automaticky, v prùbìhu nìkteré z operacÃ. To by v¹ak vzhledem k èasové nároènosti celé reorganizace vedlo k neúmìrné dobì odezvy. Druhou mo¾nostà bylo nechat spu¹tìnà reorganizace na vy¹¹à vrstvì, která by danou reorganizaci provedla "na pozadÃ", tudþ bez pøÃmých konfliktù s ostatnÃmi operacemi. To by v¹ak znamenalo zbyteèné pøenesenà urèitých implementaènÃch prvkù tøÃdy StopList do vy¹¹à vrstvy.
Dùvody popsané v pøedchozÃm odstavci vedly k tomu, ¾e v druhém "kole" bylo vý¹e popsaná metoda nahrazena he¹ovánÃm dynamickým. To ji¾ samo ze své podstaty vyøe¹ilo øadu problémù. Nedocházà k nepøimìøenému hospodaøenà s pamìtÃ. Pøi pøeplnìnà jednoho bloku docházà k roz¹tìpenà daného bloku, tzn. nevytváøejà se zde spojové seznamy koliznÃch blokù. Pøi pøeplnìnà celé he¹ovacà tabulky docházà "pouze" ke zdvojnásobenà he¹ovacÃho adresáøe, co¾ je operace mnohem ménì èasovì nároèná, ne¾li provedenà reorganizace pøà pou¾ità pøedchozà metody.
Obrázek 5.2.1.1-1 - struktura
he¹ovacÃho adresáøe pou¾itého v metodì dynamického
he¹ovánÃ
Obrázek 5.2.1.1-2 - struktura stránky
v datovém souboru tøÃdy StopList
Úkolem objektù typu Books je evidence logických knih dané databáze, vedenà informacà o knihách a poskytovánà slu¾eb pro práci s knihami ostatnÃm objektùm databázového stroje. Jde o zaji¹tìnà následujÃcÃch základnÃch operacÃ:
Pøà návrhu reprezentace tøÃdy Books se vycházelo z pøedpokladu relativnì malého poètu logických knih v rámci jedné databáze. Tento poèet byl odhadnut øádovì na desÃtky logických knih, z èeho¾ vy¹la mo¾nost umÃstit v¹echny data do operaènà pamìti. Na tomto pøedpokladu byly do jisté mÃry navr¾eny datové struktury reprezentujÃcà logické knihy v operaènà pamìti a také velice jednoduchá struktura souboru pro jejich ulo¾enÃ. To, ¾e se pøi návrhu urèitým zpùsobem odhadl pøedpokládaný poèet logických knih, nemá ze následek ¾ádné striktnà omezenà jejich poètu.
Z charakteru a pøedev¹Ãm ze znalostà èetnostà operacà bylo mo¾né vznést nároky na datové struktury, které by mìly reprezentovat logické knihy v operaènà pamìti. HlavnÃm po¾adavkem byl rychlý pøÃstup k záznamu o knize pøes jejà jméno a internà identifikaènà èÃslo. Vzhledem k pøedpokládanému poètu logických knih, zde byly pou¾ity pro urychlenà vyhledánà dvì "pole" ukazatelù na jejich záznamy. Ukazatele v tìchto polÃch jsou setøÃdìny podle názvu nebo identifikaènÃho èÃsla logické knihy, na jejþ záznam ukazujÃ. Po¾adované záznamy jsou poté vyhledávány pomocà tìchto polà binárnÃm zpùsobem.
Obrázek 5.2.1.2-1 - datové struktury
reprezentujÃcà logické knihy v operaènà pamìti
Úkolem objektù typu Terms je evidence termù dané databáze, vedenà statistických informacà o termech a poskytovánà slu¾eb ostatnÃm objektùm databázového stroje. Jde pøedev¹Ãm o zaji¹tìnà následujÃcÃch základnÃch operacÃ:
Analýzou zpùsobù a èetnostà pou¾Ãvánà operacà s daty objektù typu Terms byl nastolen po¾adavek, na co mo¾ná maximálnà optimalizaci tìchto operacà s ohledem na jejich èasovou nároènost.
Z po¾adavkù kladených na objekty tøÃdy Terms bylo mo¾no vyèÃst urèitou analogii s objekty tøÃdy StopList. Jednalo se pøedev¹Ãm o potøebu navrhnout datovou strukturu pro relativnì velké mno¾stvà termù, která by dovolovala jejich rychlé vyhledávánà a tÃm umo¾òovala rychlý pøevod termu na jeho internà identifikaènà èÃslo. Tato èást byla øe¹ena velice obdobnì jako implementace tøÃdy StopList. Do¹lo ke stejnému rozhodnutà o pou¾ità he¹ovánà oproti stromovým reprezentacÃm. Také zde nastala výmìna "statického" he¹ovánà za he¹ovánà dynamické. Jediný rozdÃl je v tom, ¾e se do he¹ovacà tabulky navÃc ukládá vedle termu i jeho internà identifikaènà èÃslo, nutné pro vý¹e po¾adovaný pøevod.
Pøà implementaci druhé èásti tøÃdy Terms bylo vyu¾ito jedné ze základnÃch vlastnostà termù. A sice, je-li term jednou vlo¾en do databáze, tak je v nà evidován a¾ do konce jejà existence. To má jeden pøÃjemný dùsledek, jsou-li internà identifikaènà èÃsla pøÃøazována vzestupnì, lze jich velice jednodu¹e pou¾it jako indexu do souboru... TÃmto byl jemnì naznaèen zpùsob, kterým byla implementována druhá èást tøÃdy Terms zabývajÃcà se vedenÃm statistických informacà o termech. Internà identifikaènà èÃslo ka¾dého termu slou¾à zároveò jako index do souboru, kde jsou ulo¾eny dal¹à informace o konkrétnÃm termu.
Obrázek 5.2.1.3-1 - struktura stránky
v datovém souboru tøÃdy Terms
Úkolem objektù typu Indexes je vlastnà správa a manipulace s daty dokumentù, které jsou ulo¾eny v databázi. To zahrnuje ulo¾enà jak vlastnÃch dokumentù (ne v¹ak ve zdrojové formì) tak i vedlej¹Ãch informacà o dokumentech (url, název, jméno autora...), jejich opìtovné zpøÃstupnìnà a mo¾nost dal¹à manipulace s ulo¾enými daty. Jde o zaji¹tìnà následujÃcÃch základnÃch operacÃ:
V prvnÃm kroku pøi implementaci tøÃdy Indexes bylo nutné specifikovat, jaká data a v jaké tvaru budou touto tøÃdou spravována. S ohledem na po¾adavky, které kladl zvolený vyhledávacà model, byly navr¾eny a dále upøesnìny tyto tøi základnà druhy dat, které je nutné evidovat pro jednotlivé dokumenty v databázi:
V dal¹à fázi bylo nutné navrhnout optimálnà zpùsoby reprezentace jednotlivých druhù dat a také metody pro jejÃch manipulaci. Vzhledem k po¾adovaným operacÃm a k vlastnostem ukládaných dat a ji¾ se znalostà zpùsobù jejÃch pou¾itÃ, byly navr¾eny datové struktury a upøesnìny metody pøÃstupù k ulo¾eným datùm. Dále bylo navr¾eno následujÃcà rozdìlenà dat do datových souborù. Nynà si naznaèÃme struktury tìchto souborù a tÃm nastÃnÃme zpùsoby práce s danými daty.
Obrázek 5.2.1.4-1 - struktura
he¹ovacà stránky v datovém souboru indurl.dat
Obrázek 5.2.1.4-2 - struktura
jednotlivých záznamù v souboru indmain.dat
Obrázek 5.2.1.4-3 - popis
reprezentace jednotlivých vektorù dokumentù v souboru indind.dat
Obrázek 5.2.1.4-4 - struktura
datových blokù v souboru indbooks.dat
Úkolem tøÃdy Clusters je poskytnout mo¾nost prohledávánà ulo¾ených dokumentù a tÃm nalezenà relevantnÃch dokumentù k polo¾enému dotazu. HlavnÃmi po¾adavky jsou pøedev¹Ãm:
Dále byla po objektech tøÃdy Clusters po¾adována mo¾nost dynamické práce s dokumenty (neboli zaèleòovánà nových dokumentù a na druhou stranu i odebÃranà dokumentù ru¹ených). Celkovì byly tedy po¾adovány tyto základnà operace:
Pro urychlenà prohledávánà databáze dokumentu, bylo pou¾ito vyhledávánà pomocà shlukù. Byly pou¾ity shluky hierarchické, které vedou obecnì k lep¹Ãm výsledkùm, jak po stránce rychlosti tak i pøesnosti, ne¾li shluky nehierarchické. Ve své podstatì shluky reprezentujà urèité uspoøádánà dokumentù, které odrá¾à jejich vzájemou podobnost. Jedná se o stromovou strukturu (obecnì n-árnà strom), ve které vrcholy pøedstavujà jednotlivé dokumenty (pøÃpadnì seznamy dokumentù). Hrany reprezentujà propojenà dokumentù dle podobnostà jejich obsahù (ka¾dý dokument je spojen s dokumentem, který je mu nejpodobnìj¹Ã). Konkrétnìj¹à popis je uveden na následujÃcÃch dvou obrázcÃch.
Obrázek 5.2.1.5-1 - logický pohled na
strukturu shlukù ve tøÃdì Clusters
Obrázek 5.2.1.5-2 - reprezentace
shlukù ve tøÃdì Clusters
1999-03-02 | Tomá¹ Foltýnek |