rĪgas tehniskĀ universitĀte · web viewdaudzstūri sauc par vienkāršu, ja tā robeža ir...
Post on 25-Dec-2019
1 Views
Preview:
TRANSCRIPT
RĪGAS TEHNISKĀ UNIVERSITĀTEDatorzinātnes un Informācijas Tehnoloģijas fakultāte
Lietišķo datorsistēmu institūts
Rolands MEKŠS
Lietišķo datorsistēmu bakalaura programmas students
(stud. apl. nr. 001RDB138)
TELPISKO DATU GLABĀŠANA UN INDEKSĒŠANA
Bakalaura darbs
Zinātniskais vadītājs
Dr.sc.ing., prof.
J.EIDUKS
Rīga 2003
Bakalaura darbs izstrādāts Sistēmu teorijas profesora grupā
Darba autors: stud. R. Mekšs……………………………………………(paraksts, datums)
Zinātniskais vadītājs: Dr.sc.ing., doc. J.Eiduks……………………………………………… (paraksts, datums)
Bakalaura darbs ieteikts aizstāvēšanai:
Institūta direktors:
Dr.habil.sc.ing., prof. J.Grundspeņķis ..........………………………………...
(paraksts, datums)
Bakalaura darbs aizstāvēts…………………………………………………..komisijas(komisijas nosaukums ģenitīvā)
……………. gadā……………sēdē un novērtēts ar atzīmi………………………..(…) (gads) (datums, mēnesis) (atzīme vārdos un tai atbilstošais cipars)
……………………………………………………………………………….komisijas
(komisijas nosaukums ģenitīvā)
sekretārs: ……………………………………………….(paraksts)
2
ANOTĀCIJA
Darbā „Telpisko datu glabāšana un indeksēšana” sniegts ieskats telpisko datu un
Ģeogrāfisko Informācijas Sistēmu (GIS) pamatprincipos, kā arī izklāstītas galvenās un plašāk
lietotās telpisko datu fiziskās glabāšanas un pieejas metodes. Apskatītas, ar piemēriem
skaidrotas un salīdzinātas telpisko datu indeksēšanas struktūras, tādas kā režģa fails, lineārais
četrkoks, z-kārtošanas koks, R-koks un tā paveidi, u.c. Darbā izklāstītais teorētiskais
materiāls balstīts uz specializētās lieteratūras par telpisko datu bāzu pielietojumu GIS sfērā
analīzi. Praktiskie piemēri izstrādāti apskatīto metožu īpašību un efektivitātes salīdzināšanai.
Tāpat darbā ietverts ieskats visplašāk izmantoto DBVS telpisko paplašinājumu (Oracle
Spatial, PostgreSQL) darbībā. Darbs sastāv no 82 lappusēm, satur 63 attēlus un 2 tabulas.
3
ABSTRACT
This thesis - „Spatial Storage and Indexing” gives insight into basics of spatial data
and Geographic Information Systems (GIS) and states main and common used physical
storage and spatial access methods. Also examined and with examples compared are such
spatial indexing structures as grid file, linear quadtree, z-ordering tree, R-tree and its variants.
Theoretical material, stated in thesis, is based on analysis of dedicated literature on spatial
databases with application to GIS. Practical examples are developed to compare properties
and efficiency of listed methods. The thesis gives insight into functionality of most popular
DBMS spatial extensions such as Oracle Spatial and PostgreSQL. It consists of 82 pages, 63
figures and 2 tables.
4
АННОТАЦИЯ
В работе даётся обзор основных принципов пространственных данных и
Географических Информационных Систем (GIS), так же изложены главные и чаще
изпользуемые методы доступа физического хранения пространственных данных. На
конкретных примерах дано обяснение и сравнение структур индексирования
пространственных данных, таких как файл решётки, линеарное квадродерево, дерево
Z-сортировки, R-дерево и его разновидности. В работе изложенный теоретический
материал основан на анализе специализированной литературы о применении
пространственных баз данных в сфере GIS. Практические примеры разработаны для
сравнения свойств и еффективности рассмотренных методов. В работе так же даётся
обзор действия чаще изпользуемых пространственных расщирений СУБД (Oracle
Spatial, PostgreSQL). Работа состоит из 82 страниц, 63 рисунков и 2 таблиц.
5
SATURS
1.IEVADS TELPISKAJOS DATOS UN GIS.....................................................................................................8
1.1. ĢEORGĀFISKĀS TELPAS MODELĒŠANA.........................................................................................................9
1.2. TELPISKĀS OPERĀCIJAS..............................................................................................................................11
1.3 TELPISKO OBJEKTU UZDOŠANAS VEIDI.......................................................................................................13
1.3.1. Mozaīkas (rastra) princips.................................................................................................................13
1.3.2. Vektoru princips.................................................................................................................................14
1.4. ABSTRAKTO DATU TIPU OPERĀCIJAS..........................................................................................................15
1.5. TELPISKIE VAICĀJUMI.................................................................................................................................16
2.TELPISKO DATU GLABĀŠANA: DISKI UN FAILI.................................................................................20
2.1. DISKA ĢEOMETRIJA UN PRINCIPI.........................................................................................................20
2.2. LAUKS, IERAKSTS, FAILS.....................................................................................................................21
2.3. FAILU STRUKTŪRAS............................................................................................................................22
3.TELPISKĀ INDEKSĒŠANA UN PIEKĻUVES METODES......................................................................24
4.UZ TELPU ORIENTĒTAS STRUKTŪRAS.................................................................................................27
4.1. REŽĢA FAILS..............................................................................................................................................27
4.1.1. Fiksētais režģis...................................................................................................................................27
4.1.2. Punktu indeksēšana ar režģa failu.....................................................................................................28
4.1.3. Taisnstūru indeksēšana izmantojot režģi...........................................................................................30
4.1.4. Punktu un logu vaicājumi...................................................................................................................32
4.2. LINEĀRAIS ČETRKOKS................................................................................................................................33
4.2.1. Četrkoks..............................................................................................................................................33
4.2.2. Telpu pildošās līknes..........................................................................................................................35
4.2.3. Iezīmju piešķiršana četrkoka virsotnēm.............................................................................................36
4.2.4. Lineārais četrkoks..............................................................................................................................37
4.2.5. Punkta vaicājuma izpilde lineārajā četrkokā.....................................................................................37
4.2.6. Loga vaicājuma izpilde lineārajā četrkokā........................................................................................38
4.2.7. Taisnstūru ievietošana.......................................................................................................................39
4.3. Z-KĀRTOŠANAS KOKS.................................................................................................................................39
4.3.1. Z-kārtošanas rastra variants ar dublēšanos......................................................................................42
4.3.2. Z-kārtošana bez dublēšanās...............................................................................................................43
4.4. UZ TELPU BALSTĪTO STRUKTŪRU SALĪDZINĀJUMS.....................................................................................44
5. UZ DATIEM ORIENTĒTAS STRUKTŪRAS.............................................................................................50
5.1. R-KOKS.......................................................................................................................................................50
5.1.1. Meklēšana R-kokos.............................................................................................................................52
6
5.1.2. Objektu ievietošana un dzēšana R-kokā.............................................................................................54
5.2. R*KOKS......................................................................................................................................................60
5.3. R-KOKA BLĪVĒŠANA...................................................................................................................................64
5.4. R+KOKS......................................................................................................................................................65
5.5. IZMAKSU MODEĻI.......................................................................................................................................67
5.6. UZ DATIEM BALSTĪTO STRUKTŪRU SALĪDZINĀJUMS..................................................................................68
6.POPULĀRĀKO DBVS PAPLAŠINĀJUMU DARBAM AR TELPISKAJIEM DATIEM APSKATS...72
6.1. ORACLE SPATIAL........................................................................................................................................72
6.1.1. Telpiskais datu modelis......................................................................................................................72
6.1.2.Telpiskās operācijas............................................................................................................................73
6.1.3. Telpiskā indeksēšana..........................................................................................................................74
6.2. POSTGRESQL.............................................................................................................................................75
6.2.1. Ģeometriskie tipi un operatori...........................................................................................................75
6.2.2. Datu bāzes veidošana.........................................................................................................................76
6.2.3. Vaicājumu izpilde...............................................................................................................................77
SECINĀJUMI......................................................................................................................................................78
VĀRDNĪCA..........................................................................................................................................................80
BIBLIOGRĀFISKAIS SARAKSTS..................................................................................................................82
7
1.IEVADS TELPISKAJOS DATOS UN GIS
Jau kopš tā laika, kad mūsu senči uz alu sienām zīmēja apvidus kartes un dzīvnieku
migrācijas ceļus, cilvēks ir interesējies par grafiku, kas saistīta ar ģeogrāfisko informāciju.
Šāda – telpiskā informācija cilvēcei ir bijusi svarīga visos laikos, tāpēc nepārtraukti
novērojama tendence meklēt pēc iespējas ērtākus un efektīvākus veidus, kā to glabāt,
izmantot un atspoguļot. Mūsdienās šiem mērķiem kalpo datorizētas ģeogrāfiskās
informācijas sistēmas (GIS), kas ir būvētas uz telpisko datu bāzu pamata. Šīs sistēmas mums
piedāvā apbrīnojami plašas un ērtas iespējas strādāt ar telpiskajiem datiem. Tipisks telpisko
datu piemērs ir pilsētas karte, kas savā būtībā ir divdimensiju objekts, kas satur punktus,
līnijas, daudzstūrus, kuri apzīmē kaut kādus reālās pasaules objektus (ielas, mājas, trolejbusa
līnijas, mežus, ezerus utt.). Telpiskās datu bāzes mums ļauj glabāt šādus reālās pasaules
vienkāršotus modeļus elektroniskā veidā, piekārtojot tiem atribūtus (nosaukumi, platības,
garumi, koordinātes). Tāpat līdzīgi pierastajām relāciju datu bāzēm, arī telpiskās datu bāzes
ļauj izpildīt telpiskus vaicājumus, bez kuriem datu bāzei nebūtu jēgas eksistēt. Veiksmīgs
GIS risinājums var sniegt lielu devumu daudzās nozarēs, kas saistītas ar telpisko datu
izmantošanu. Tā, piemēram, apdrošināšanas birojs var iegūt atbildi uz jautājumu – “Kurš
reģions Daugavas malā visticamāk tiks appludināts ledus iešanas laikā?”, armijas
komandieris – “Vai ir novērota ienaidnieku grupas kustība kopš pagājušās nakts?”,
tirgotājam – “Kur visizdevīgāk būtu izvietot noliktavas un tirdzniecības vietas?”, šoferis –
“Pa kuru ceļu es visātrāk nokļūšu līdz Balviem?” utt. Šādu uzskaitījumu varētu turpināt
bezgalīgi ilgi, taču tas liecina tikai par to, ka šai tehnoloģijai ir vieta cilvēku dzīvēs un ka
tāda ir vajadzīga. Kaut arī, piemēram, naftas atradņu aprakstīšanas un ugunsdzēsēju mašīnas
maršrutēšanas uzdevumi principiāli atšķiras, attiecīgai GIS jebkurā gadījumā jānodrošina
šādas funkcijas:
Datu ievade un pārbaude;
Datu glabāšana un vadība;
Datu izvade un noformēšana;
Datu pārveidošana;
Sadarbība ar gala lietotāju;
Izmantojot tradicionālās – relāciju datu bāzu vadības sistēmas, nevar panākt pietiekamu
efektivitāti darbā ar telpiskajiem datiem. Telpisko uzdevumu risināšanā relāciju modelis ir
pārāk sarežģīts un nepiemērots, turklāt vairākus specifiskus uzdevumus šādā veidā vispār nav
iespējams veikt. Tāpēc, kā tika minēts, jebkuras GIS kodols ir telpisko datubāzu vadības 8
sistēma (TDBVS), kas nodrošina telpisko datu glabāšanu, uzturēšanu, vadību, kā arī saikni ar
lietotāju. Šai datu bāzu vadības sistēmai ir jānodrošina ģeometriskās informācijas attēlošana
un manipulēšana kopā ar tradicionālajiem datiem loģiskajā līmenī un jānodrošina efektīva
glabāšana un piekļuve fiziskajā līmenī. Šo uzdevumu īstenošanai nepieciešamas sekojošas
prasības pret TDBVS:
Loģiskajam datu attēlojumam jābūt papildinātam ar ģeometrisko komponenti,
un, saglabājot datu neatkarības principu, jānodrošina maksimālu vienkāršību
un tuvumu realitātei;
Vaicājumu valodā jābūt integrētām jaunām funkcijām, kas spētu operācijas ar
ģeometriskiem objektiem;
Jābūt efektīvai fiziskajai telpisko datu glabāšanai;
Jānodrošina efektīva piekļuve telpiskajiem datiem. Nepieciešamas jaunas datu
struktūras telpisko datubāzu indeksēšanai;
Jānodrošina jauni vaicājumu izpildes algoritmi;
1 .1 . ĢEOR GĀ FI S KĀ S TELPA S M OD ELĒŠA N A
Telpisko informāciju GIS modelē kā slāņu, karšu un ģeogrāfisko objektu savstarpēju
attiecību. GIS ģeotelpiskā informācija tiek kārtota pa slāņiem. Vienā slānī atrodas telpiskā
informācija par vienu tematiku. Piemēram, vienu
slāni var veidot upes, citu – pilsētas, vēl citu būves
utt. Kad slānis tiek attēlots uz papīra vai ekrāna, tas,
ko lietotājs redz, ir karte (att.1), kas parasti tiek
papildināta ar krāsām, mērogu, objektu aprakstu utt.
Vienā kartē var tikt attēloti vairāki slāņi, jo var rasties
vajadzība redzēt dažādu informāciju vienkopus,
piemēram, valstu kontūras, pilsētu kontūras un
autoceļu izkārtojumu.
Slānis, savukārt, sastāv no ģeogrāfiskiem
objektiem. Katrs ģeogrāfiskais objekts atspoguļo kādu
reālās pasaules objektu un tam ir divas komponentes:
Apraksts – objekts tiek aprakstīts ar aprakstošo atribūtu kopu. Piemēram,
pilsētu apraksta tās nosaukums, iedzīvotāju skaits, utt.
Telpiskā komponente – ietver sevī gan ģeometriju (atrašanās vietu
ģeogrāfiskajā telpā, formu, u.t.t.), gan topoloģiju (telpiskās saites, kas eksistē 9
Attēls 1 – Tipiska karte
starp objektiem, piemēram – robežošanās). Ģeogrāfiskajam objektam – pilsēta
telpiskā komponente var būt daudzstūris 2D telpā, kas apzīmētu tās kontūras.
Norobežotu ģeogrāfiskā objekta telpisko komponenti sauc par telpisko
objektu, kuru var apskatīt arī atsevišķi.
Izšķir atomārus ģeogrāfiskos objektus un saliktus ģeogrāfiskos objektus. Atomāri
ģeogrāfiskie objekti ir nedalāmi, savukārt salikti ģeogrāfiskie objekti sastāv no citiem
ģeogrāfiskiem objektiem, kas var būt gan atomāri, gan salikti. Piemēram, slānī “Eiropa”,
salikts ģeogrāfisks objekts ir “Latvija”, kas sastāv no atomāriem ģeogrāfiskiem objektiem
“Rajoni”.
Katram ģeogrāfiskajam objektam ir arī telpiskie atribūti, kas gan neatbilst nevienam
no standarta datu tipiem (string, integer). Ģeometriju un topoloģiju attēlojumiem
nepieciešama jaudīga modelēšana slāņu no objektu līmenī. To nodrošina telpiskie datu
modeļi. Tajos lieto sekojošus pamata datu tipus, jeb Abstraktos Datu Tipus:
punkts – bezdimensionāls objekts, kuru izmanto realitāšu attēlošanai, kuru forma nav
svarīga vai platība ir salīdzinoši maza salīdzinājumā ar citiem objektiem. Pilsētas, baznīcas,
autobusa pieturas ir piemēri, kuru ģeometrija var tikt reducēta līdz punktam lielmēroga
kartēs.
līnija - viendimensionāls, jeb lineārs objekts. Tiek izmantots tīklu (ceļi, hidrogrāfija,
telekomunikācijas) attēlošanai. Parasti izmanto šo objektu kombināciju– lauztu līniju, kura
sastāv no līniju segmentiem, tā, ka katrs segmenta galapunkts, jeb virsotne, savieno tieši
divus segmentus. Izņēmums ir abi lauztās līnijas galapunkti (ekstrēmi), kas pieder tikai
vienam segmentam. Lauzta līnija ir slēgta, ja abi ekstrēmi ir identiski. Vienkārša lauzta līnija
ir tāda, kurai nav segmentu, kas krustotos savā starpā.
Attēls 2 – Līniju veidi
daudzstūris – 2-dimensiju jeb virsmas objekts, kas parasti tiek izmantots realitāšu ar
lielu laukumu attēlošanai, piemēram - zemes gabali, administratīvais iedalījums, valstu
10
līnija
vienkārša
lauzta līnija
vienkārša slēgta lauzta līnija
ne-vienkārša lauzta līnija
kontūras, mazāku mērogu kartēs – būves, laukumus. Daudzstūris ir plaknes apgabals, kas
ierobežots ar slēgtu lauztu līniju, kas šinī gadījumā tiek saukta par robežu.
Daudzstūri sauc par vienkāršu, ja tā robeža ir vienkārša slēgta lauzta līnija.
Daudzstūris P ir konvekss, ja jebkuru divu punktu A un B, kuri atrodas daudzstūrī P,
veidotais līnijas segments AB pilnībā pieder daudzstūrim P. Apgabals ir daudzstūru kopa,
kuru var izmantot, piemēram, valstu kontūru modelēšanā, jo valstij var būt salas un reģioni,
kas ir nošķirti no kopējās teritorijas.
Attēls 3 – Daudzstūru veidi
1 .2 . TELPI S KĀ S O PER ĀC I JAS
Telpiskās datubāzes ļauj veikt dažādas operācijas ar
slāņiem, kas satur telpisko informāciju. Pieņemsim, ka eksistē
divi slāņi 1) “Valstis” ar aprakstošajiem atribūtiem nosaukums,
iedzīvotāju skaits un telpisko atribūtu ģeometrija, un 2) Valodas
ar aprakstošo atribūtu valoda un telpisko atribūtu ģeometrija.
Kopumā iegūstam sekojošu shēmu:
Valstis (nosaukums, populācija, ģeometrija:
apgabals)
Valodas (valoda, ģeometrija: apgabals)
Ar šiem slāņiem iespējams veikt operācijas, kas
pazīstamas no relāciju algebras: projekcija, selekcija,
savienošana un apvienošana.
11
daudzstūris ar caurumu
vienkāršs daudzstūris
konvekss daudzstūrisne-vienkāršs daudzstūris
apgabals
Attēls 4 - Projekcija
Slāņu projekcija strādā pēc shēmas slānis * {A1,...An} slānis, kur {A1,...An} ir slāņa
aprakstošo atribūtu apakškopa. Projekcija atgriež slāni, kura apraksts sastāv no aprakstošo
atribūtu apakškopas un nemainītas telpiskās komponentes.
Ņemot par piemēru jau minēto shēmu ar valstīm un valodām, katra valsts ir
ģeogrāfisks objekts ar saviem aprakstošajiem atribūtiem. Pielietojot slāņa projekciju uz
populāciju, tiek izslēgti valstu nosaukumi. Līdz ar to rezultējošajam slānim ir shēma
(populācija, ģeometrija) (att.4).
Slāņu selekcija (slānis * pAi slānis), kur pAi ir predikāts aprakstošajiem atribūtiem,
atgriež slāni, kura telpiskie objekti atbilst nosacījumam. Uzdodot vaicājumu - atgriezt valstis,
kurās iedzīvotāju skaits ir lielāks par 50 milj., pēc selekcijas tiek iegūts rezultāts, redzams
attēlā nr. 5.
Slāņu apvienošana (slānis * slānis slānis) apvieno ģeogrāfisku objektu kopas,
kurām ir vienādas shēmas.
Slāņu pārklāšana ir izplatīta operācija telpiskajās datu bāzēs. Šī operācija ģenerē
jaunu slāni no pārklājošajiem slāņiem, kā rezultātā tiek iegūti jauni ģeogrāfiski objekti. Šo
objektu ģeometrija tiek veidota savienojot abu shēmu
ģeogrāfisko objektu ģeometrijas. Arī apraksts tiek kombinēts
no operācijā iesaistīto slāņu ģeogrāfisko objektu aprakstiem.
Eksistē dažādas karšu pārklāšanas operācijas. Tikko minēto
operāciju sauc par telpisko savienošanu (spatial join).
Telpiskās datu bāzes nodrošina arī operācijas, kas ir unikālas
tikai telpiskajiem datiem. To skaitā ir:
Logošana (windowing), kuru izmanto speciālos
logošanas vaicājumos. Tā atgriež slāni, kurš satur tikai tos
ģeogrāfiskos objektus no ieejošā slāņa, kurus nosedz dotais
logs, kas parasti ir taisnstūrveida (skat. att. nr.6)
Punkta vaicājuma operācija, kuru izmanto punkta
vaicājumos (point query). Šī operācija atgriež tos
ģeogrāfiskos objektus, kuru ģeometrijas satur norādīto
punktu.
Tāpat tiek nodrošinātas vēl daudzas citas operācijas – topoloģiskās, virziena, metriskās,
eiklīdiskās, dinamiskās.
12
Attēls 5 - Selekcija
Telpisko objektu uzdošana ar punktiem, līnijām un daudzstūriem notiek tīri abstraktā
līmenī. Ir nepieciešami veidi, kā bezgalīgu punktu kopas
eiklīdiskājā telpā aprakstīt mašīnvalodā un kā šo ģeometrisko
informāciju īstenot praktiski. Eksistē dažādi veidi, kā risināt doto
problēmu – aproksimējot nepārtraukto telpu uz diskrētu ar t.s.
mozaīkas principu (tesselation mode) vai konstruējot attiecīgas,
piemērotas datu struktūras ar vektoru (vector mode) vai
pusplakņu attēlojumu (halfplane mode).
1 .3 TELPI S KO O BJEKTU UZD OŠ A NA S VEI D I
1.3.1. Mozaīkas (rastra) princips
Objekta ģeometrijas attēlošanai tiek izmantota plaknes dekompozīcija šūnās, tādā
veidā iegūstot objekta diskrēto modeli. Šo pieeju var izmantot divos veidos – 1) dalot plakni
fiksēta lieluma regulārās šūnās (att.
nr.7), 2) dalot mainīga lieluma
neregulārās šūnās. Fiksētā lieluma
šūnu modelis izmanto regulāru
daudzstūru (pikseļu) režģi jeb rastru.
Katram pikselim plaknē ir adrese, kas
parasti ir tā koordināte (x,y)
attiecīgajā atskaites sistēmā, tādā
veidā līnijas un daudzstūri tiek aprakstīti ar galīga skaita koordināšu pāriem. Attēlā nr. 8
parādīts princips, kādā veidā ar fiksēta lieluma šūnu mozaīkas principu tiek aprakstīts
daudzstūris. Attēlā, vienkāršības pēc, koordinātes tiek aprakstītas ar veseliem skaitļiem, un
šinī gadījumā daudzstūri P apraksta šāda pikseļu kopa:
<5, 12, 13, 14, 17, 18, 19, 20, 21, 22, 26, 27, 28, 29, 30, 31, 35, 36, 37, 38>;
13
Attēls 7 – Plaknes dalīšana šūnās (mozaīkas princips). a) kvadrātveida šūnas, b) sešstūrveidīgas šūnas
Attēls 6 - Logošana
Šūnu dalīšanu neregulāros daudzstūros izmanto retāk, galvenokārt kaut kādu apgabalu
zonēšanai (tipiska GIS funkcija) pēc sociālajiem, demogrāfiskajiem vai ekonomiskajiem
datiem.
Mozaīkas principa stiprā puse ir spēja telpiskos objektus aprakstīt ar galīgu šūnu skaitu. Jo
lielāka ir šūnu izšķirtspēja (sīkāki pikseļi), jo precīzāk varam
aprakstīt konkrēto telpisko objektu. Tomēr, jo precīzāk
vēlamies uzdot objektu ģeometrijas pēc šī principa, jo lielāks
atmiņas daudzums ir nepieciešams šādas informācijas
glabāšanai. Tāpēc vairumā gadījumu izmanto tā saucamo
vektoru principu.
1.3.2. Vektoru princips
Vektoru attēlojumā objekti tiek konstruēti no punktiem un malām. Punkts tiek uzdots
ar koordinātu pāri un daudzstūris tiek uzdots ar galīgu tā virsotņu skaitu. Atšķirībā no rastra
attēlojuma, vektoru attēlojumam nepieciešams daudz mazāk atmiņas.
Eksistē daudz variantu, kā uzdot līnijas, daudzstūrus un apgabalus.
Vienkāršākais no tiem ir:
lauztu līniju uzdod kā punktu sarakstu <p1, .....pn>,
kur katrs pi ir virsotne. Savukārt katrs pāris (pi, pi+1),
kur i<n uzdod vienu no lauztas līnijas segmentiem,
jeb malām.
daudzstūris tāpat kā lauzta līnija tiek uzdots ar punktu sarakstu, tikai šinī
gadījumā šis punktu saraksts uzdod slēgtu lauztu līniju, kur pāris <pn, pi> arī
ir lauztas līnijas segments, jeb daudzstūra mala.
apgabals ir vienkārši daudzstūru kopa.
Šādā veidā mēs var uzdot to pašu daudzstūri (att. nr.9), kas tika apskatīts pie mozaīkas
principa, ar šādu, daudz kompaktāku sarakstu:
<[4,4], [6,1], [3,0], [0,2], 2, 2]>
Protams, kā jebkurai pieejai, arī šai ir trūkumi. Pirmkārt, daudzstūrim ar n virsotnēm var būt
2n dažādi attēlojumi. Ir n veidi, no kurienes sākt robežas aprakstu. Kad ir izvēlēta sākuma
virsotne ir divi veidi kā lasīt virsotnes (pulksteņrādītāja virzienā un pretēji). Otrkārt, nav
noteikts, kā atšķirt lauztas līnijas struktūru no daudzstūra struktūras. Šo uzdevumu 14
Attēls 8 – Daudzstūra diskrētais attēlojums
Attēls 9 – Daudzstūra vektoriālais attēlojums
interpretācija paliek uz šo datu apstrādājošās programmatūras “pleciem”. Tas viss padara šo
metodi sarežģītāku, tomēr tās stiprākais trumpis joprojām paliek objektu kompaktie izmēri.
1 .4 . ABS TR A KTO D A TU TI PU OP ERĀ C IJA S
Lai būtu iespējams veikt kaut kādas darbības ar šiem telpiskajiem datiem, datu bāzu
vadības sistēmai “jāsaprot” šie te abstraktie datu tipi (punkts, līnija, daudzstūris). Jābūt
definētai ne tikai to struktūrai, bet arī operācijām, kuras varētu pielietot pret šiem datu tipiem.
Piemēram, tipam daudzstūris varētu būt definēta operācija DaudzstūraLaukums, kas varētu
izrēķināt dotā daudzstūra laukumu. Telpiskās datu bāzu vadības sistēmas atbalsta lielu skaitu
šo operāciju.
Piemēram, apgabala (region) abstraktajam datu tipam ir definētas šādas operācijas:
PointInRegion: apgabals * punkts loģ. datu tips (Pārbauda, vai punkts pieder
apgabalam);
Overlaps: apgabals * apgabals loģ. datu tips (Pārbauda, vai apgabals nosedz citu
apgabalu);
OverlapsRect: apgabals * taisnstūris loģ. datu tips (Pārbauda, vai apgabals nosedz
taisnstūri);
Intersection: apgabals * apgabals apgabals (Atgriež divu apgabalu pārklājumu –
apgabalu, kas iespējams ir arī tukšs);
Meets: apgabals * apgabals loģ. datu tips (Pārbauda, vai divi apgabali robežojas);
Area: region real (Atgriež apgabala laukumu);
RegionUnit:{apgabals} apgabals (Atgriež apgabalu, kas ir ieejošo kopas apgabalu
apvienojums)
Līnijas abstraktajam datu tipam paredzētas šādas operācijas.
PointInLine: līnija * punkts loģ. datu tips (Pārbauda punkta un līnijas
pārklāšanos);
Length: līnija real (Aprēķina līnijas garumu);
OverlapsLR: līnija * apgabals loģ. datu tips ( Pārbauda līnijas un apgabala
pārklāšanos);
Savukārt punktam definēta šāda operācija:
15
Distance: apgabals * punkts real (Aprēķina attālumu no punkta līdz apgabala
robežai);
Kaut arī šis operāciju saraksts nav pilns, jo eksistē vēl arī citas operācijas, ar to pietiek,
lai varētu gūt atbildes uz lielu daļu telpisko datu vaicājumiem.
1 .5 . TELPI S KI E VA I CĀ JU MI
Var izdalīt vairāku veidu vaicājumus, kurus var veikt ar telpiskajiem datiem:
vaicājumi ar ciparu/simbolu kritēriju, vaicājumi, kuros iekļauts telpiskais kritērijs un
interaktīvie vaicājumi.
Lai demonstrētu dažus no iespējamajiem telpiskajiem vaicājumiem, par piemēru tiks
izmantota šāda shēma:
Attēls 10 – Izmantojamo tabulu shēma
Vaicājumiem ar ciparu/simbolu kritēriju raksturīgi atgriezt telpisko datu apraksta
datus. Vaicājumos nav iekļautas objektu ģeometrijas, un tie ir identiski parastajiem relāciju
vaicājumiem.
Piemēri: Select Populācija
From Apgabals
Where Apgabala_nosaukums = ‘San Francisko’
Select sum(a.Populācija)
From Valsts v, Pavalsts p, Apgabals a
Where v.valsts_kods = ‘ASV’
and p.pavalsts_kods = a.pavalsts_kods
and v.valsts_kods = p.valsts_kods
Šajos piemēros redzams, ka ar tradicionālajiem SQL valodas līdzekļiem no dotās
shēmas tiek iegūta aprakstošā informācija. Pirmajā gadījumā tas ir apgabala San Francisko
16
Valsts
Valsts_kods
Valsts_nosaukums
Ģeometrija
Pavalsts
Pavalsts_kods
Pavalsts_nosaukums
Ģeometrija
Apgabals
Apgabala_kods
Apgabala_nosaukums
Populācija
Ģeometrija
iedzīvotāju skaits, otrā – visas ASV iedzīvotāju skaitu, kur tiek summēta visu ASV apgabalu
populācija.
Vaicājumi ar telpisko kritēriju strādā ar telpiskajiem abstraktajiem datu tipiem.
Līdzīgi kā relāciju vaicājumos var izmantot agregātfunkcijas, telpiskajos vaicājumos, kuros
iekļauta telpiskā komponente, iespējams izmantot speciālas telpiskās funkcijas ( apvienošana,
laukums utt.).
Tā kā minētā piemēra administratīvās hierarhijas shēmā ģeometrijas atribūts tiek
uzdots katrā līmenī, nav grūti iegūt, piemēram, Kalifornijas pavalsts kontūras, tieši iegūstot
atbilstošo ģeometriju:
Select ģeometrija
From Pavalsts
Where Pavalsts_nosaukums = ‘Kalifornija’
Tomēr, ja ģeometrijas tiktu glabātas tikai hierarhijas apakšējā līmenī – Apgabals, lai
iegūtu šo pašu rezultātu –Kalifornijas kontūru, būtu jāveic visu Kalifornijas apgabalu telpiskā
apvienošana:
Select RegionUnion(a.ģeometrija)
From Apgabals a, Pavalsts p
Where p.pavalsts_kods = a.pavalsts_kods
and p.pavalsts_nosaukums = ‘Kalifornija’
To, ka telpisko vaicājumu būtība ir līdzīga parastajiem – relāciju vaicājumiem,
apliecina arī fakts, ka iespējams veikt arī saliktos vaicājumus. Piemēram, ja nepieciešams
atrast apgabalus, kas ir lielāki par Kalifornijas lielāko apgabalu, tiek veidots sekojošs
vaicājums:
Select apgabala_nosaukums
From Apgabals
Where Area (apgabals.ģeometrija) > Select max(Area(c.geometry))
From Apgabals a, Pavalsts p
Where p.pavalsts_kods = a.pavalsts_kods
and p.pavalsts_nosaukums = ‘Kalifornija’)
17
Iespējams izpildīt arī vaicājumus, kas nosaka ģeometriju robežōšanos. Piemēram, lai
atrastu apgabalus, kas robežojas ar San Francisko apgabalu, jāizpilda šāds vaicājums:
Select a1.apgabala _nosaukums
from Apgabals a1, Apgabals a2
where a2 apgabala_nosaukums = ‘San Francisko’
and a1.pavalsts_kods = a2.pavalsts kods
and Meets (a1.ģeometrija, a2.ģeometrija)
Redzams, ka pie vaicājuma nosacījumiem ir pievienota jau minētā telpiskā operācija Meets,
kas nosaka telpisko robežošanos starp ģeogrāfiskajiem objektiem.
Interaktīvajos vaicājumos nepieciešama gala lietotāja līdzdalība, piemēram, ar peli
ekrānā norādot vēlamo apgabalu.
Select apgabala_nosaukums
from Apgabals
where OverlapsRect(ģeometrija, @rectangle)
Šinī piemērā tiek atgriezti to apgabalu nosaukumi, kurus nosedz lielotāja uzzīmētais
taisnstūris uz ekrāna. Uzzīmētais taisnstūris tiek glabāts tiek saglabāts @rectangle un tiek
izmantots operācijā OverlapsRect.
Pēc šo telpisko vaicājumu apskates var secināt, ka iespējas datu izgūšanā, to apstrādē
un kombinēšanā ir milzīgas, kas neapšaubāmi ļauj veidot efektīvas sistēmas, kas spēj
apstrādāt telpisku informāciju. Taču, lai varētu veiksmīgi strādāt ar visām šīm apskatītajām
struktūrām, ļoti būtiska ir arī šo datu fiziskā glabāšana un pieejas metodes. Ātrai pieejai
datiem bieži vien izmanto indeksus, kuru darbības pamatprincips, līdzīgi kā grāmatas satura
rādītājam, ir norādīt uz attiecīgajiem objektiem. Tie ļauj ātri izpildīt vaicājumus bez visas
datu bāzes pārmeklēšanas. Kā pamata datu struktūra lielākajai daļai indeksu ir dažādu
variantu koki. Koks tiek definēts kā hierarhiski saistītu elementu, sauktu par virsotnēm, kopa,
kur katra no virsotnēm ir vai nu iekšējā virsotne vai lapas virsotne. Katrai iekšējai virsotnei ir
viena vai vairākas pēcteču virsotnes, kurām savukārt šī virsotne ir priekštecis. Kokā ir viena
saknes virsotne, kam nav priekšteču, savukārt lapu virsotnēm nav pēcteču. Pretēji
dabiskajiem kokiem, sakne atrodas koka augšdaļā, bet lapas – apakšdaļā. Ja n1, n2,..., nk ir
18
virsotņu secība kokā tā, ka ni ir ni+1 priekštecis, šī secība tiek saukta par ceļu no virsotnes ni
uz nk. Koks tiek saukts par pilnu, ja visas tā lapas atrodas vienā līmenī. Koka struktūras
piemērs ilustrēts attēlā nr. 11, kur lapu virsotnes ir iekrāsotas melnā krāsā, bet pārējās ir
iekšējās virsotnes. Virsotne, kas ir baltā krāsā ir saknes virsotne.
Attēls 11 – Koks
Lai sasniegtu labus datu bāzes ātrdarbības rezultātus, jābūt labi organizētai arī tās
fiziskajai struktūrai. Nepārdomātas datu fiziskās organizācijas dēļ, pat visvienkāršākie SQL
vaicājumi var tikt izpildīti neapmierinošā ātrumā.
DBVS sistēmas ir paredzētas darbam ar lieliem datu kopumiem, tāpēc neiztikt bez
sekundārajām datu glabāšanas ierīcēm (cietie diski, CD-ROM, magnētiskās lentas u.c.). Tā
kā to ātrdarbība ir vairākas reizes lēnāka par operatīvo atmiņu, darbs ar šīm iekārtām ir visas
sistēmas “šaurā vieta”. Tas ir nopietns iemesls sīkākai pieejas un glabāšanas metožu
pētīšanai.
19
2.TELPISKO DATU GLABĀŠANA: DISKI UN FAILI
Ja salīdzina tradicionālo datu bāzu transakciju un C programmu, tad prasības pret
sistēmu ir dažādas. C programma, kas aprēķina inverso matricu būtībā izvirza prasības
vienīgi pret procesoru, jo parasti šāda matrica būs pietiekami maza, lai ietilptu sistēmas
operatīvajā atmiņā. Un tā kā procesora sadarbība ar primāro atmiņu ir pietiekami ātra,
rezultāti ir tieši atkarīgi no procesora ātruma.
Tradicionāls datu bāzu lietojums strādā ar lieliem datu apjomiem, kuri, neskatoties uz
nepārtraukto atmiņas cenu kritumu, tomēr nevar ietilpt operatīvajā atmiņā. DBVS veido datu
porcijas apmaiņai starp pamatatmiņu un sekundāro (parasti - diskatmiņu). Datu pārraides
ātrumi starp pamatatmiņu un sekundāro atmiņu salīdzinājumā ar pamatatmiņu un procesoru
ir lēni (mērāmi milisekundēs), tāpēc ātrdarbība galvenokārt atkarīga no ievades/izvades
sistēmas organizētības.
Telpiskajās datu bāzēs situācija ir sarežģītāka. Aprēķinu intensivitāte ir salīdzināma ar
jau minētām programmēšanas valodā veidotām matemātisko aprēķinu programmām,
savukārt datu glabāšanas prasības ir daudz augstākas par tām, kuras izvirza tradicionālās
DBVS. Zemas izšķirtspējas ASV satelītuzņēmums vien aizņem 30MB atmiņas. Telpiskās
datu bāzes parasti ir pārāk lielas, lai ietilptu pat uz vidēja izmēra sekundārā datu nesēja.
2 .1 . DI S KA ĢEO METRI JA UN PR I NC I PI
Datora cietais disks sastāv no vairākām magnētiskām platēm, kas novietotas viena
virs otras. Katrai platei ir magnētiskie celiņi, kur tiek glabāti dati. Celiņus var iztēloties kā
koncentriskus apļus, kas sākas no plates centra un vijas līdz plates malai. Tā kā diskam ir
vairākas plates, ir arī paralēli celiņi. Celiņi ar vienādu diametru veidu cilindru.
Katrs celiņš ir sadalīts sektoros, kuru izmēru nosaka ražotājs. Katrs sektors satur diska
blokus, kuru skaitu iespējams noteikt inicializējot jeb formatējot disku. Diska bloku sauc arī
par lappusi, un tā ir mazākā iespējamā datu pārraides vienība starp disku un pamatatmiņu. Ja
ņem vērā to, ka diska bloki ir izkārtoti secībā uz celiņiem, nav grūti saprast, ka disks ir
loģiska viendimensionāla iekārta. Dati tiek nolasīti ar galviņu palīdzību, kur katrai platei ir
sava galviņa. Kad DBVS ”vēlas” piekļūt kādam datu blokam, galviņas mehāniski tiek
novietotas pret attiecīgo celiņu, attiecīgajā sektorā un nolasa attiecīgo bloku. Visu šo procesu
var iedalīt trijās daļās. Pirmkārt, meklēšanas laiks ts ir laiks, kurā diska galviņas nonāk līdz
vajadzīgajam celiņam. Otrkārt, latentums tl ir laiks, kurā plate griežas līdz vajadzīgais bloks
20
ir tieši zem galviņas. Visbeidzot pārraides laiks tt ir laiks, kurā attiecīgais datu bloks tiek
nolasīts vai rakstīts. Līdz ar to kopējais pieejas laiks ta tiek aprēķināts pēc formulas:
ta=ts + tl + tt
un parasti patiesa ir nevienādība ts > tl > tt
2 .2 . LAU KS , I ER AK STS , FA I LS
Ar lappušu principu var labi parādīt datu apmaiņas specifiku starp disku un
pamatatmiņu. Tomēr augstākā abstrakcijas līmenī ērtāk izmantot faila, ieraksta un lauka
hierarhiju. Fails ir ierakstu kopa, kas var aizņemt vairākas lappuses. Lappuse ir slotu kopa,
kur katrs slots satur ierakstu, kas savukārt ir vienādu vai dažādu datu tipu lauku kopa.
Pieņemot, ka eksistē tabula VALSTS ar sekojošiem laukiem: nosaukums(30),
kontinents(30), populācija, IKP, vid_vecums, forma, tad ieraksta izmēru baitos aprēķina
summējot katra lauka izmēru. Tātad izmērs varētu būtu 30+30+4+4+4+8 = 80 baiti, ja
integer tipa lauks aizņem 4 baitus un rādītājs uz telpiskās komponentes glabāšanas vietu – 8
baiti. Vienkāršības labad, tiek pieņemts, ka valsts nosaukums un kontinents vienmēr aizņems
katrs 30 baitus (patiesībā tas var būt arī mazāks). Ja diska sektora apjoms ir 512 baiti un
tabulā ir 6 ieraksti, nepieciešamais atmiņas apjoms ir 480 baiti, līdz ar to šie ieraksti var
ietilpt vienā sektorā. Savukārt tabulā PILSETA tiek ievietoti 9 ieraksti, katrs - 72 baitus liels.
Rezultātā šie ieraksti aizņem 657 baitus, tāpēc šo ierakstu kopa tiek izvietota pa diviem
sektoriem. Katrs sektors satur dažādu informāciju par brīvo vietu, katra ieraksta sākuma
pozīciju, nākamā sektora adresi, utt. Var tikt arī izmantoti īpaši sektori, kas norāda uz citiem
sektoriem, kur atrodas tabulas.
Attēls 12 - Ierakstu kārtošana pa diska lapām
21
Tabulu norāžu bloks
Valsts 6 1
Pilseta - 2
6 ieraksti, katrs 80B
Kanāda
Meksika
Kuba
Brazīlija
ASV
Argentīna7 ieraksti, katrs 73B
Havanna
Mehiko
Otava
Brazilja
Detroita
Čikāga
Toronto
2 ieraksti, katrs 73B
L.A.
Mičigana
2 .3 . FA ILU S TR UK TŪR A S
Failu struktūru nosaka ierakstu sakārtotība failā. Vienkāršākā organizētības forma ir
nesakārtots fails, saukta arī par kaudzi, kur ieraksti nav sakārtoti nekādā secībā. Attēlā nr. 12
fails, kas glabā tabulu VALSTS ir nesakārtots fails. Ja jāveic ieraksta meklēšana šādā failā
pēc kāda kritērija (piemēram - nosaukuma), nepieciešama tabulas pārmeklēšana. Sliktākajā
gadījumā jāpārmeklē visas lappuses, kas satur šī faila informāciju. Vidēji nākas pārmeklēt
pusi no ierakstiem, līdz tiek atrasts rezultāts. Šādas struktūras galvenā priekšrocība slēpjas
INSERT operācijā, kad jauns ieraksts vienkārši tiek pievienots faila beigās.
Sarežģītākas failu struktūras izmato ierakstu hešēšanu un kārtošanu. Hešētā failu
struktūra paredz ierakstu dalīšanu vairākās daļās – bloku saimēs (buckets), izmantojot
hešēšanas funkciju. Katrs ieraksts, pēc izvēlēta atslēgas lauka (piemēram - nosaukuma), tiek
ievietots kādā no bloku saimēm. Attēlā nr.13 parādīta hešēta faila struktūra ar četrām bloku
saimēm, kur katra no šīm saimēm tiek glabātas atsevišķā lappusē. Hešēšanas funkcija atgriež
1 vārdiem, kuriem burtu skaits ir mazāks vai vienāds ar 6, 2 – vārdiem ar burtu skaitu 7 vai 8,
3 – vārdiem ar burtu skaitu 9 vai 10 un 4- vārdiem, kuru garums pārsniedz 11 simbolus.
Attēls nr.13 Hešēta faila struktūra tabulai PILSETA
Ideālā gadījumā hešēšanas rezultātā katrā no bloku saimēm vēlams būt līdzīgam
ierakstu daudzumam. Hešēta faila organizācija ir ļoti efektīva punkta meklēšanā, ievietošanas
un dzēšanas operācijās, kuras iespējams veikt konstantā laikā (piemēram - ar divām diska
pieejām diskam). Tomēr šādā veidā strukturizētu failu izmantošana nav piemērota diapazonu
22
4 saimes, 9 ieraksti
Atslēga <=6 1
Atslēga 7-8 2
Atslēga 9-10 3
Atslēga >=11 4
3 ieraksti
Mičigana
Havanna
Brazilja
4 ieraksti
L.A.
Mehiko
Čikāga
Otava
2 ieraksti
Montereja
Vašingtona
1 ieraksts
Buonosairesa
meklēšanā, piemēram – atgriezt pilsētu aprakstus, kuru nosaukums sākas ar burtu “B”, jo
konkrētie ieraksti var būt dažādās saimēs.
Kārtotajos failos ieraksti ir sakārtoti pēc noteikta atslēgas lauka. Attēlā nr.14 parādīta
kārtota faila piemērs ar jau minēto pilsētu tabulu. Par kārtošanas lauku tiek izmantots pilsētas
nosaukuma lauks, pēc kura alfabēta secībā tiek kārtoti visi ieraksti.
Attēls nr. 14 – Kārtota faila struktūra tabulai PILSETA
Šādi kārtotos failos efektīvi ir binārās meklēšanas algoritmi ar uzdotu atslēgas
vērtību. Binārās meklēšanas izmaksas (procesora noslodze, ievades/izvades laiks) būtiski
pieaug, ja ierakstu skaits ir liels. Failā ar 1 miljonu ierakstu pilsētas meklēšana pēc
nosaukuma prasa aptuveni log2(106) = 20 pieejas diskam. Šīs izmaksas var tikt samazinātas,
ja lappuses satur vairākus ierakstus.
23
7 ieraksti, katrs 73B
Brazilja
Buonosairesa
Čikāga
Havanna
L.A.
Mehiko
Mičigana
3 ieraksti, katrs 73B
Montereja
Otava
Vašingtona
3.TELPISKĀ INDEKSĒŠANA UN PIEKĻUVES METODES
Telpisko vaicājumu apstrāde balstās uz sarežģītiem un prasīgiem pēc liela daudzuma
resursu ģeometriskiem aprēķiniem. Pat parasta telpiska operācija kā punkta vaicājums, kas
secīgi pārbauda, vai kopas objekti satur doto punktu, noved pie liela skaita diska piekļuvēm.
Lai varētu veiksmīgi strādāt ar telpiskajiem vaicājumiem, ir nepieciešamas īpašas datu
piekļuves metodes, kas tiek balstītas uz datu struktūru – indekss. Šīs metodes paātrina
piekļuvi datiem, samazinot objektu kopu, kurā jāmeklē nepieciešamie dati. Izpildot klasiskos
vaicājumus, kuri balstīti uz aprakstošiem datiem, bieži tiek izmantots klasiskais indekss - B-
koks, taču telpiskajos vaicājumos, kur objekti tiek meklēti atkarībā no to atrašanās vietas
telpā, jāizmanto citas, speciālas metodes. Parasti šīs metodes balstās uz struktūru, sauktu par
telpisko indeksu. Savukārt objektu kopu, kurai šis indekss ir izveidots, uzskata par indeksētu.
Indeksi ir speciāli faili, kas parasti sastāv no atslēgas lauka un datu faila lapas adreses lauka.
Ieraksti indeksos bieži ir sakārtoti un var tikt organizēti ar speciālām meklēšanas datu
struktūrām, piemēram, B+koks, R-koks, režģa fails utt.
Telpisko datu īpatnība ir tāda, ka jāindeksē līnijas un daudzstūri (2D telpā) parasto
datu tipu vietā. Tā kā objektu ģeometrijas var būt diezgan sarežģītas, parasti to indeksēšanai
izmanto to aproksimizācijas jeb tuvinājumus - mazāko robežtaisnstūri mbb (minimal
bounding box). Tādā veidā sarežģītā ģeometrija tiek reducēta uz taisnstūri, stipri ietaupot
resursus datu meklēšanā. Līdz ar to telpiskais indekss sastāv no ierakstiem [mbb, oid], kur
oid identificē objektu, kura mazākais robežtaisnstūris ir mbb, nosakot tā fizisko atrašanās
vietu datu failā. Reāla telpiskā vaicājuma operācijas izpilde tiek sadalīta 2 soļos. Pirmajā solī
(filtra solī) tiek atgriezti objekti, kuru mazākie robežtaisnstūri apmierina telpisko predikātu,
iekļautu vaicājumā. Ir situācijas, kad mbb apmierina telpisko predikātu, taču reālā ģeometrija
neapmierina, tāpēc objekti, kas „tiek cauri” šim filtram veido tikai atrisinājuma virskopu.
Savukārt otrajā solī, sauktā arī par attīrīšanas soli, tiek veikts telpiskais tests uz šiem atrasto
objektu patiesajām ģeometrijām, kā rezultātā tiek atgriezta rezultējošā objektu identifikatoru
(oid) kopa. Šī ģeometriskā operācija, kas tiek veikta otrajā solī ir dārga, taču tiek veikta ar
ierobežotu skaitu objektu.
Kopumā no labas telpiskās pieejas metodes tiek gaidīts meklēšanas laiks, kas ir
mazāks par lineāru un meklēšanas struktūras izmērs ir salīdzināms ar pašu indeksējamo
struktūru. Tāpat būtisks aspekts ir dinamika. Pieejas metodēm jāpieļauj jaunu objektu
24
ievietošanu, esošo objektu dzēšanu un jāspēj adaptēties jebkurām objektu kopas lieluma
izmaiņām, nezaudējot efektivitāti.
Klasisks piemērs ir B+ koks, kurš atbilst šīm prasībām. B+ koka, attēlota attēlā nr.
14., indekss ir veidots no atslēgu kopas {2,3,7,9,10,13,15}. Tas ir balansēts koks, kurā katra
virsotne ir diska lapa un glabā ierakstus [atslēga, rādītājs], kur rādītājs norāda vai nu uz
objektu, kura atslēgas atribūts ir šī norādītā atslēga (lapu virsotnēs), vai arī uz pēcteča
virsotni (iekšējās virsotnes). Šeit pieņemts, ka katra datu lapa glabā lielākais – 4 ierakstus.
Visi ieraksti virsotnē ir sakārtoti tā, ka katrs ieraksts e, norāda uz apakškokiem pa kreisi, kur
atrodas objekti o, kur o.atslēga<=e.atslēga, un apakškokiem pa labi, kur o.atslēga >
e.atslēgu.
Attēls 14 – B-koki: B+ koks pirms un pēc objekta [23, oid] ievietošanas
Meklējot objektu, pie ievadītas atslēgas vērtības, koks tiek pārmeklēts no augšas uz
leju, katrā virsotnē izvēloties apakškoku pa kreisi no mazākās e vērtības tā, lai
vērtība<=e.atslēga. Ja vērtība ir lielāka par lielāko ierakstu virsotnē, jāizvēlas apakškoks,
kas ir labajā pusē. Šādā kokā visas koka lapas ir vienā dziļumā (koks ir balansēts). Tādā
veidā nolasāmo datu lapu skaits ir vienāds ar koka dziļumu, kas ir logaritmisks indeksētajai
datu kopai.
Ievietojot jaunu vērtību, koks tiek pārveidots, vajadzības gadījumā dalot
nepieciešamās virsotnes divās daļās. Pēc tā var secināt, ka B+ koks lieliski parāda īpašības,
kuras tiek prasītas no pieejas metodēm: ievad/izvades operāciju skaits ir logaritmisks pret
kopas izmēru, un vismaz puse no indeksam atvēlētās vietas ir izmantota, kas nosaka, ka
indeksa izmērs ir salīdzināms ar indeksētās kopas izmēru (parasti tas ir mazāks, jo atslēga,
kura tiek izmantota konstruējot koku ir daudz mazāka par visu ierakstu datu kopā).
Visbeidzot struktūra saglabā savas īpašības veicot gan ierakstu ievietošanu, gan dzēšanu.
Visas B-koka īpašības, kas ļauj veikt efektīvu indeksēšanu, balstās uz atslēgu vērtību
kārtošanu. Tomēr ar telpiskajiem datiem šādu struktūru izmantot nevar - nepieciešami citi
principi, kuri būtu piemēroti šiem datiem. Eksistē daudzas telpisko datu pieejas metodes, taču
tās visas tiek balstītas uz vienu no diviem sekojošiem principiem:
25
Uz telpu orientētas struktūras: Tās dala 2D telpu taisnstūrveida šūnās,
neatkarīgi no objektu (punktu vai mbb) izvietojuma divdimensionālajā plaknē.
Objekti tiek kartēti (mapped) šūnās atkarībā no kāda ģeogrāfiska kritērija.
Uz datiem orientētas struktūras: Tās dala objektu kopu, pielāgojoties to
izvietojumam telpā.
Šinī darbā apskatīto struktūru klasifikāciju ilustrē attēls nr.15.
Attēls 15 – Telpisko datu indeksēšanas struktūru klasifikācija
26
4.UZ TELPU ORIENTĒTAS STRUKTŪRAS
4 .1 . REŽĢ A F AI LS
4.1.1. Fiksētais režģis
Fiksētais režģis ir režģa faila struktūras vienkāršots variants. Pielietojot fiksēto režģi,
telpa ir sadalīta taisnstūrveida šūnās. Iegūtais režģis ir nx*ny vienāda izmēra šūnu masīvs.
Katra šūna ir saistīta ar diska lapu. Punkts P pieder šūnai c, ja taisnstūris c.taisnstūris, kas
saistīts ar šūnu c satur punktu P. Objekti, kas kartēti šūnā c, tiek secīgi glabāti diska lapā,
kura saistīta ar šo šūnu.
Attēlā nr.16 redzama 18 punktu indeksēšana, izmantojot fiksēto režģi. Telpā par
atskaites punktu tiek izvēlēts punkts ar koordinātēm (x0, y0). Indeksam nepieciešams 2D
masīvs DIR[1..nx, 1..ny] - direktorijs. Katrs direktorija elements DIR[i, j] satur tās diska lapas
adresi PageID, kura glabā punktus, kas pieder šūnai ci, j. Ja [Sx, Sy] ir 2D telpas izmērs, tad
katras šūnas taisnstūra izmērs ir [Sx/nx, Sy/ny].
Attēls 16 – Fiksētais režģis
Izpildāmo vaicājumu būtība fiksētajā režģī ir sekojoša:
Punkta P(a,b) ievietošana: i = (a-x0)/(Sx/nx) +1 un j=(b-y0)/Sy/ny) + 1. Tiek nolasīta
diska lapas adrese no DIR[i,j].PageID un tiek ievietots P.
Punkta vaicājums: Dots punkta arguments P(a,b). Diska lapa tiek nolasīta līdzīgi kā
pie ievietošanas, tiek pārmeklēti ieraksti, pārbaudot, vai kāds no tiem nav P.
Loga vaicājums: tiek izskaitļota šūnu c kopa S tā, ka vaicājuma loga arguments W
nosedz c.taisnstūris. Katrai šūnai ci,j no kopas S tiek nolasīta DIR[i,j].PageID diska
lapas adrese un atgriezti punkti no lapas, kurus nosedz logs W.
27
Šinī gadījumā efektīvs ir punkta vaicājums, jo, pieņemot, ka direktorijs atrodas operatīvajā
atmiņā, izpildei nepieciešama viena ievad/izvades operācija. Operāciju skaits loga vaicājumā
ir atkarīgs no tā, cik šūnas logs nosedz, t.i. tas ir proporcionāls loga laukumam.
Režģa izšķirtspēja ir atkarīga no indeksējamo punktu skaita N. Ja diska lapas ietilpība,
piemēram, ir M punkti, jāveido režģis ar izmēru vismaz N/M šūnas. Vidēji rēķinot, katra
šūna satur mazāk nekā M objektus un, ja kādai šūnai pieder vairāk kā M punkti, notiek šūnas
pārpilde (overflow). Šiem gadījumiem ir paredzētas pārpildes lapas, kas tiek piesaistītas
tiešajai šūnas lapai. Piemēram, pieņemot to, ka katra lapa varēs glabāt ne vairāk kā 4
punktus, 5 punktu, esošu vienā šūnā, indeksēšana notiks tā, kā parādīts attēlā nr.17. Punkti k,
l, m, n tiks glabāti lapā p, savukārt punkts o tiks saglabāts pārpildes lapā, kas piesaistīta lapai
p. Šādos gadījumos punkta vaicājums prasīs q I/O operācijas, ja punkts ir saglabāts q-tajā
lapā pārpildes ķēdītē.
Attēls 17 – Lapas pārpilde fiksētajā režģī
Tomēr, ja punkti telpā ir izvietoti vienmērīgi, iepriekš aprakstītā parādība notiek reti
un pārpildes ķēdītes nav garas. Sliktākais gadījums varētu būt tad, ja visi punkti izrādās vienā
šūnā un struktūra ir lineārs, saistīts lapu saraksts. Punkta meklēšana prasa lineāru laiku un
struktūra neapmierina galveno prasību pret laiku – lai tas būtu mazāks par lineāru. Pārpildes
notiek arī kad ievērojami mainās datu kopas izmērs. Pat, ja punktu izvietojums ir vienmērīgs,
atkārtotas jaunu punktu ievades var izraisīt lielu pārpildes lapu daudzuma parādīšanos. Tāpat
arī dzēšana var novest pie gandrīz tukšām lapām. Kopumā var secināt, ka pie dažāda punktu
izvietojuma, fiksētais režģis nevar apmierināt prasības, kuras ir uzstādītas pret indeksu
sekundārajā atmiņā.
4.1.2. Punktu indeksēšana ar režģa failu
Līdzīgi kā fiksētajā režģī, arī režģa failā šūna ir saistīta ar kādu no diska lapām.
Tomēr, kad notiek šūnas pārpilde režģa failā, tā tiek sadalīta divās šūnās un punkti attiecīgi
28
tiek sadalīti pa abām jaunajām šūnām. Līdz ar to šūnas ir dažāda izmēra un to sadalījums
piemērojas punktu izvietojumam. Lai realizētu šo struktūru nepieciešamas trīs datu
struktūras:
Direktorijs DIR ir 2D masīvs, kas saista šūnas ar diska lapām. Šī struktūra ir līdzīga
iepriekš apskatītajai pie fiksētā režģa, tomēr galvenā atšķirība ir tāda, ka divas blakus
esošās šūnas var attiekties uz vienu un to pašu datu lapu.
Divas skalas (scales) Sx un Sy – lineāri masīvi, kas apraksta koordinātu asu dalījumu
intervālos. Katra vērtība kādā no skalām attēlo robežu telpas dalījumā izvēlētajā
dimensijā (x vai y).
Vislabāk struktūru apraksta piemērs. Attēlā nr. 18 parādīti režģa faila veidošanas punktu
glabāšanai 4 soļi. Tāpat kā iepriekšējos piemēros, tiek pieņemts, ka diska lapas ietilpība M ir
4 punkti.
Attēls 18 – Objektu ievietošana režģa failā.
Solī A, struktūra satur 4 objektus. Direktorijs ir viena šūna, kas saistīta ar diska lapu
p1. Solī B telpā tiek ievietoti 3 jauni punkti – a, b, c. Brīdī, kad tiek ievietots punkts a, notiek
p1 pārpilde. Tā rezultātā tiek veikts vertikālais dalījums, piesaistīta jauna diska lapa p2 un
pieci punkti tiek sadalīti starp p1 un p2. Vertikālais dalījums tiek atspoguļots skalā Sx kā
vērtība x1. Punkti a un b tiek ievietoti lapā p1, savukārt punkts c – lapā p2.
29
Solī C tiek ievietots punkts d, kuru vajadzētu ievietot lapā p1, taču šī lapa jau ir pilna.
Tāpēc tiek veikts horizontālais dalījums, atspoguļots skalā Sy kā vērtība y1 un atkal punkti
tiek sadalīti pa lapām p1 un p3.
Jāpiezīmē, ka dalījums tiek veikts visām šūnām Sy intervālā, un sadalītas tiek arī tās
šūnas, kurām nav konstatēta pārpilde, tomēr šīs šūnas turpina attiekties uz vienu un to pašu
diska lapu. Mainās vienīgi tas, ka šūna c2 tiek aizstāta ar divām jaunām šūnām c2,1 un c2,2,
kuras abas norāda uz p2.
Visbeidzot solī D tiek ievietoti punkti e un f. Notiek pārpilde lapā p2, līdz ar to
jāpiesaista jauna lapa p4. Šinī gadījumā nav nepieciešams intervāla dalījums. Punkti no šūnas
c2,1 tiek saglabāti lapā p2, savukārt punkti no c2,2 tiek glabāti jaunajā lapā p4. Kopumā,
ievietojot telpā punktu P jāizšķir 3 gadījumi:
Šūnas netiek dalītas;
Šūna tiek dalīta, taču netiek dalīts direktorijs;
Tiek dalīta gan šūna, gan direktorijs;
Režģa fails pārvar lielākās problēmas, kuras nespēja risināt fiksētais režģis. Punkta
vaicājums vienmēr var tikt izpildīts ar divām pieejām diskam. Turklāt struktūra ir dinamiska
un parāda labus rezultātus, neatkarīgi no telpas izmantošanas blīvuma. Tomēr, kā visām
metodēm, arī režģa failam ir vājās vietas. Pie lielām datu kopām, šūnu daudzums direktorijā
var būt tik liels, ka tas var neietilpt pamatatmiņā.
4.1.3. Taisnstūru indeksēšana izmantojot režģi
Taisnstūru indeksēšana, protams, ir sarežģītāka par punkta indeksēšanu un ir ļoti
nozīmīga telpisko datu indeksēšanā, jo kā tika minēts iepriekšējās nodaļās, indeksējot
telpiskos objektus, visas sarežģītās ģeometrijas tiek reducētas uz mazāko robežtaisnstūri mbb.
Līdz ar to taisnstūru indeksēšana ir fundamentāla lieta telpisko datu indeksēšanā.
Vienkāršākais veids, kā var kartēt taisnstūrus, ir tos piesaistīt šūnām, kuras nosedz šos
taisnstūrus. Iespējami trīs gadījumi: taisnstūris satur šūnu, šķērso to vai arī šūna to pilnībā
ietver. Pirmajos divos gadījumos taisnstūris ir piesaistīts vairākām kaimiņu šūnām, līdz ar to
pieaug indeksa izmērs un zūd efektivitāte.
Piemēram izmantošu 15 taisnstūru kopu. Attēlā nr. 19 parādīta fiksētā režģa
izmantošana, savukārt attēlā nr. 20 – režģa faila izmantošana. Abos gadījumos lapas ietilpība
ir 4 objekti.
30
Attēls 19 – Fiksētā režģa izmantošana taisnstūru indeksēšanai
Attēls 20 – Režģa faila izmantošana taisnstūru indeksēšanai
Objektu ievietošana un dzēšana ir līdzīga analoģiskām operācijām ar punktiem. Tā kā
bieži novērojama objekta dubultošanās kaimiņu šūnās, šūnu dalīšana notiek biežāk. Attēlā nr.
21 parādīts gadījums, kad dalītas tiek gan šūnas, gan direktorijs. Sākuma stāvoklis šai
darbībai ir redzams attēlā nr. 20, kad telpā ir 13 objekti. Telpā tiek ievietots 14. objekts. Tā
kā tas ir jāievieto lapā, uz kuru norāda DIR[1, 3], notiek lapas p5 pārpilde. Tā rezultātā tiek
veikts vertikālais dalījums punktā x3. x3 tiek ievietots skalā Sx un direktorijs tagad sastāv no
3*(2+1) = 9 šūnām. Šūnas DIR[2,1] un DIR[2,2] attiecas uz jau eksistējošām lapām (p1 un
p3), kuras katra satur divu šūnu objektus. Lapas p5 objekti tagad ir izvietoti pa lapām p5 un
p6, uz kurām attiecīgi norāda DIR[1,3] un DIR[2,3]. Turklāt var novērot, ka objekti 5 un 6
dublējas abās lapās.
31
Attēls 21 – Objekta nr.14 ievietošana telpā
Šūnu dalījums bez direktorija dalījuma parādīts attēlā nr. 22. Kad tiek ievietots
objekts 15, diska lapā p4 notiek pārpilde. Tiek iedalīta jauna lapa p7, un direktorijā tiek
atjauninātas šūnas DIR[3,2] un DIR[3,3].
Attēls 22 – 15. objekta ievietošana telpā
4.1.4. Punktu un logu vaicājumi
Punktu vaicājumi tiek pildīti sekojoši. Tiek nodotas punkta koordinātes P(a ,b), un
tiek meklēta šūna, kas satur punktu ar šādām koordinātēm. Fiksētā režģa gadījumā uzdevums
prasa konstantu centrālā procesora darba laiku, savukārt režģa faila gadījumā logaritmisku
laiku. Vienu pieeju diskam prasa lapas nolasīšana, uz kuru norāda direktorija šūna, un vienu
– ierakstu kopas E iegūšana. Atliek katram ierakstam e veikt pārbaudi, vai e.mbb satur
punktu P. Attīrīšanas stadijā atbilstošajiem objektiem ar identifikatoru e.oid tiek pārbaudīts,
vai to patiesā ģeometrija satur doto punktu.
Loga vaicājumā vispirms tiek noskaidrots, kuras šūnas nosedz uzdotais logs
(taisnstūris). Katrs no tiem tiek pārbaudīts līdzīgi punktu vaicājumam. Tā kā rezultāti var
dubultoties vairākās šūnās, jāparūpējas par to, lai tiktu atgriezts tikai viens objekta
eksemplārs
32
Režģa struktūra taisnstūru indeksēšanā atbilst uzstādītajām laika un izmēra prasībām,
taču ir novērojamas vairākas nopietnas problēmas, kuru dēļ bieži nākas atteikties no šī
indeksēšanas veida. Vispirms objektu dubultošanās kaimiņu šūnās palielina ierakstu skaitu
indeksā, līdz ar to palielinot tā izmēru. Šis efekts kļūst arvien vairāk pamanāms, kad datu
kopa palielinās un šūnas izmērs samazinās līdz mbb izmēriem. Dublikātu likvidēšana no
vaicājumu rezultātiem ir dārga, ja rezultāti ir lieli. Šīs datu piekļuves metodes efektivitāte
balstās uz direktorija atrašanos pamatatmiņā. Pētījumi un eksperimenti rāda, ka lielām datu
kopām šāds darba veids ir neiespējams. Savukārt, ja daļu direktorija glabā uz sekundārās
atmiņas, struktūras vadība kļūst sarežģīta un meklēšanai nepieciešamais laiks vēl tiek patērēts
uz direktorija vadību diskā un atmiņā. Ir bijuši vairāki priekšlikumi, kā uzlabot šo situāciju,
taču tie padara struktūru pārāk sarežģītu, tādā veidā zaudējot vienu no galvenajām tās
īpašībām – vienkāršību.
4 .2 . LIN EĀ RA I S ČETR KO KS
Piekļuves metodes, kas aprakstītas šinī un nākamajā apakšnodaļā ļauj paplašināt datu
bāzu vadības sistēmas izmantojot B-koku kā indeksu. Taisnstūri, kuri jāindeksē, tiek kartēti
šūnās, kuras tiek iegūtas rekursīvi dekomponējot telpu kvadrantos (četrkoka dekompozīcija –
quadtree decomposition). Metode, kas tiks aprakstīta šinī apakšnodaļā tiek saukta par lineāro
četrkoku (linear quadtree) un strādā ar telpisko objektu mbb. Savukārt struktūra – Z-
kārtošanas koks (z-ordering tree), kas aprakstīta nākamajā apakšnodaļā aproksimē objektu
ģeometrijas nevis ar mbb, bet gan ar tā četrkoka dekompozīcijas šūnām.
4.2.1. Četrkoks
Telpa tiek rekursīvi dekomponēta kvadrantos, kamēr katrs kvadrants pārsedz mazāku
skaitu taisnstūru par M – diska lapas ietilpība. Kvadranti tiek saukti pēc debespusēm –
Ziemeļrietumu (ZR), Ziemeļaustrumu (ZA), Dienvidrietumu (DR), Dienvidaustrumu (DA).
Indekss tiek attēlots kā četrdaļīgs koks (katrai iekšējai virsotnei ir četri pēcteči – katrs –
vienam kvadrantam). Savukārt katra koka lapas ir saistītas ar kādu diska lapu, kas glabā
indeksa ierakstus. Līdzīgi kā režģa failā, taisnstūris tiek fiksēts tajos kvadrantos, kuri to
nosedz. Attēlā nr. 23 parādīts jau iepriekš izmantotās telpas dalījums kvadrantos un
atbilstošais četrkoks. Koka lapas satur atbilstošo taisnstūru ierakstus. Tāpat kā iepriekš,
33
pieņemu, ka diska lapas ietilpība ir četri objekti, tāpēc arī koka lapa nevar saturēt vairāk par
četriem objektiem.
Attēls 23 – Četrkoks
Punkta vaicājumu izpilde četrkokā ir vienkārša. Objekta atrašanās vieta tiek atrasta,
pārmeklējot koku no sākuma virsotnes līdz lapām, katrā līmenī izvēloties zaru, kas apzīmē
kvadrantu, kurā atrodas punkta arguments. Koka lapa tiek lasīta un pārbaudīta līdzīgi tam, kā
tas tika darīts režģa faila gadījumā, lasot diska lapu. Attēlā nr. 24 parādīts, punkta vaicājuma
izpildes ceļš, kā rezultātā tiek atgriezts objekts, kura mbb numurs ir 5. Loga vaicājuma
gadījumā jāatrod visi kvadranti, kurus pārsedz uzdotais logs.
Attēls 24 – Punkta vaicājuma izpilde četrkokam
Arī šī struktūra ir dinamiska, tātad spēj adaptēties jauniem apstākļiem (objektu
ievietošana un dzēšana).
Ievietojot jaunu taisnstūri, kokā tiek iziets pa ceļiem, kas ved uz lapām, kas atbilst
kvadrantiem, kuri pārsedz taisnstūri. Katra diska lapa p, kas saistīta ar koka lapu tiek nolasīta,
un ir iespējami divi gadījumi: vai nu p nav pilna un jaunais ieraksts tiek ievietots lapā, vai arī
p ir pilna. Otrajā gadījumā kvadrants tiek dalīts četros sīkākos kvadrantos, un tiek iedalītas
trīs jaunas diska lapas. Vecās lapas ieraksti kopā ar jauno ierakstu tiek sadalītas pa četrām
lapām. Ieraksts e tiek pievienots tām lapām, kuru atbilstošie kvadranti pārsedz e.mbb. Attēlā
nr. 25 parādīts, kā tiek veidots indekss pēc jauna taisnstūru 15 un 16 ievietošanas. 15.
taisnstūra ievietošana prasa b kvadranta dalīšanu kvadrantos m, n, p un q. Lapām n un q tiek
34
pievienots objekts 15. Savukārt, ievietojot objektu 16, nav vajadzīga dalīšana, jo lapas nav
pilnas. 16 tiek pievienots lapām c un t.
Attēls 25 – Objektu ievietošana četrkokā
Šis četrkoka variants neatbilst dažām telpiskās pieejas metožu prasībām. Galvenais
iemesls metodes nepilnībai ir mazais virsotņu pēcteču skaits (mazs zarošanās koeficients),
kas ir ierobežots līdz 4, kas realitātē aizņem tikai mazu diska lapas daļu. Koku struktūras ar
relatīvi lielu virsotņu zarošanās koeficientu (B-koks vai R-koks) ļauj efektīvāk saistīt koka
virsotnes ar diska lapām un ir daudz piemērotākas kā pieejas metodes sekundārajai atmiņai.
Savukārt četrkoka vaicājumu izpildes laiks ir atkarīgs no koka dziļuma, kas varbūt
liels. Sliktākajā gadījumā katra iekšējā virsotne ir atsevišķā diska lapā un I/O operāciju skaits
ir vienāds ar koka līmeņu skaitu. Turklāt, līdzīgi kā ar režģa failu, arī četrkokā problēma ar
objektu dublēšanos vairākās lapās paliek aktuāla. Kad indeksējamo objektu kopums ir tik
liels, ka kvadranta izmērs līdzinās mbb izmēriem, dublikātu skaits eksponenciāli palielinās,
un metode vairs nav efektīva.
4.2.2. Telpu pildošās līknes
Telpu pildošās līknes nosaka 2D režģa šūnu secību. Šī secības noteikšana ļauj daļēji
saglabāt objektu patieso tuvumu telpā, t.i. pastāv liela iespēja, ka divas šūnas, kas ir tuvu
viena otrai telpā atradīsies tuvu arī šūnu secīgajā rindā. Līknēm jānodrošina šī īpašība
neatkarīgi no režģa izšķirtspējas.
Populārākās telpu pildošās līknes ir Z-kārtošana (saukta arī par Peano līnijām) un
Džilberta līkne. Kā pamata režģi tās izmanto N *N šūnu masīvu, kur N = 2d. Šo režģi var
attēlot kā pilnu četrkoku ar dziļumu d.
Z-kārtošanas līkne tiek ģenerēta sekojoši: pilnā četrkoka katrai virsotnei tiek piešķirta
iezīme. Turpmākajos piemēros iezīmes tiks veidotas, izmantojot zīmes no alfabēta (0,1,2,3).
Saknes virsotnei tiek piešķirta tukša iezīme. Iekšējās virsotnes ar iezīmi k Z-Rietumu
pēctecim tiek piešķirta iezīme k.0 (attiecīgi ZA – k.1, DR – k.2, DA – k.3), kur „.” nozīmē
35
virkņu savienojumu. Izmantojot šo iezīmju piešķiršanas sistēmu, katras iezīmes garums būs
d. Leksikogrāfiski šķirojot šūnas pēc to nosaukumiem, tiek arī iegūta šī te Z-veida secība
(attēls 26.a).
Attēls 26 – Telpu pildošās līknes: z-kārtošana (a) un Džilberta līkne (b).
Džilberta līkne, tāpat kā Z-kārtošana, ir viendimensionāla līkne, kas apmeklē katru
šūnu 2D režģī. Ja Z-kārtošana paredz Z-veida līkni, tad Džilberta līknes forma ir . Atšķirībā
no z-kārtošanas, visi Džilberta līknes segmenti ir vienāda garuma, t.i. šinī gadījumā nav
“jālec” pāri lielākiem attālumiem starp šūnām (attēls 26.b). Tomēr acīmredzams ir fakts, ka
abos gadījumos eksistē situācijas, kad objekti, kuri ir tuvu viens otram telpā, ir tālu viens no
otra telpu pildošajā līknē.
4.2.3. Iezīmju piešķiršana četrkoka virsotnēm.
Kā jau tika minēts, četrkoks ar dziļumu d var tikt attēlots arī kā režģis ar N = 2d. Ja
katram režģa kvadrantam tiek piešķirta iezīme, kā tas tika darīts iepriekš ar z-kārtošanu, tiek
iegūts četrkoks, kāds redzams attēlā 27. Jāpiezīmē, ka koka virsotņu kārtība organizēta
lasīšanas virzienā – no kreisās puses uz labo, kā arī tas, ka visas iezīmes nav viena garuma.
Tāpat virsotnes iezīme norāda ceļu no sākuma virsotnes līdz dotajai.
Attēls 27 – Četrkoka iezīmju piešķiršana, izmantojot z-kārtošanu.
36
Ja lapa L satur režģa šūnu C, tad virsotnes L iezīme l ir šūnas C iezīmes c prefikss,
līdz ar to l<c. Turklāt noteiktā kārtība „<” nozīmē šo iezīmju leksikogrāfisku kārtību augošā
secībā. Piemēram, 3<31<312.
4.2.4. Lineārais četrkoks
Pieņemot, ka ieraksti [mbb, oid] ir piesaistīti četrkoka lapai ar iezīmi l un glabāti
diska lapā ar adresi p, ar B+koka palīdzību tiek indeksēta pāru (l, p) kopa (attēls 28).
Attēls 28 – Četrkoka lapu indeksēšana
Šāda struktūra nodrošina labu četrkoka iezīmju blīvēšanu (packing) B+koka
virsotnēs. Blīvēšana ir dinamiska, t.i., tā ļauj veikt jaunu objektu ievietošanu un vairs
nevajadzīgu objektu dzēšanu, saglabājot struktūru. Piemēram, ieraksti, kas atbilst četrkoka
lapām ar iezīmēm 13, 2, 300 un 301 ir vienā diska lapā. Tomēr šādam risinājumam
saglabājas tā pati dublikātu problēma, kāda tika novērota iepriekšējā četrkoka variantā: mbb,
kurus nosedz vairākas četrkoka lapas, tiek dublēti diska lapās, kas ir saistītas ar šīm koka
lapām. Tā, piemēram, objekts e tiek glabāts četrās diska lapās.
4.2.5. Punkta vaicājuma izpilde lineārajā četrkokā
Objekta, kura mbb satur punktu P, identifikatora oid iegūšana prasa 3 soļus:
Punkta iezīmes aprēķins – Tiek aprēķināta režģa šūnas, kura satur punktu P, iezīme l
(rakstzīmju virkne ar garumu d);
Četrkoka lapas atrašana B+kokā – Ja četrkoka virsotnes, kas satur P, iezīme ir L, tad
vai nu L=l un četrkoka virsotne ir dziļumā d, vai L ir punkta iezīmes l prefikss, līdz ar
to šīs virsotnes iezīmes garums ir mazāks par d un virsotnes kvadrants satur režģa
sūnu, kurā atrodas punkts P. Citiem vārdiem sakot, šis kvadrants attiecas uz ierakstu
B+kokā, kura atslēga L ir lielākais skaitlis, kas ir mazāks par l, vai ar to ir vienāds.
Šāda ieraksta meklēšana nav standarta procedūra darbā ar B+kokiem, tāpēc tāda ir
jāimplementē pašiem.
37
piekļuve lapai un objekta atrašana – Kad B+koka ieraksts [L, p] ir atrasts, jāpiekļūst
diska lapai ar adresi p, jāpārbauda visi tajā glabātie [mbb, oid] pāri un jānoskaidro,
kuri mbb satur punktu P. Procedūras rezultāts ir objektu identifikatoru saraksts.
Šī algoritma darbības praktisko risinājumu var redzēt attēlā nr. 27 un 28. Pēc punkta P
koordinātēm tiek noskaidrots, ka tas atrodas šūnā, kuras iezīme ir 320 (pirmais solis). Tad
B+kokā tiek atrasta lielākā iezīme, kas ir mazāka vai vienāda ar 320. Šinī gadījumā tā ir
virsotne ar iezīmi 32 (otrais solis). Visbeidzot trešajā solī tiek realizēta piekļuve pie diska
lapas un ierakstu caurskatīšana, meklējot tos, kuru mbb satur P. Tā rezultātā tiek atrasts
objekts c.
Punkta vaicājumam nepieciešamo ievad/izvades operāciju skaitu veido divas
komponentes: 1) I/O operāciju skaits piekļuvei pie vajadzīgās B+koka virsotnes; 2) I/O
operāciju skaits piekļuvei pie kvadranta diska lapas. Tādā veidā šis nepieciešamais I/O skaits
tiek izteikts kā d+1, kur d ir B+koka dziļums. Šī izteiksme ir patiesa neatkarīgi no objektu
izvietojuma telpā, jo B+koka struktūras ātrdarbība ir tieši atkarīga no tās izmēra.
4.2.6. Loga vaicājuma izpilde lineārajā četrkokā
Vaicājuma mērķis ir atrast kvadrantu, kurus pārsedz logs W, iezīmju intervālu I un
realizēt diapazona vaicājumu B+kokā. Tas tiek veikts trijos soļos.
Vispirms tiek aprēķināts vaicājuma loga ZR virsotnes iezīme, līdzīgi tam, kā tas tika
darīts punkta vaicājuma izpildes pirmajā solī. Tad līdzīgi punkta vaicājuma izpildes
otrajam solim tiek atrasta atbilstošā kvadranta iezīme, kā rezultātā tiek iegūts [L, p],
kur iezīme L ir intervāla apakšējā robeža. Tad analoģiskā veidā tiek atrasts [L’, p’]
loga DA virsotnei, kur iegūtais L’ ir intervāla augšējā robeža.
Tiek pielietots diapazona vaicājums intervālā [L, L’] B+kokā, kas atgriež visus
ierakstus [l, p], kuru iezīmes l atrodas dotajā intervālā.
Katram B+koka ierakstam e = [l, p] tiek aprēķināts kvadrants e.l. Ja logs nosedz šo
kvadrantu, tiek realizēta piekļuve pie diska lapas e.p un tiek pārbaudīts katram no
ierakstiem, vai W nenosedz [mbb, oid].
Atgriežoties pie iepriekš apskatītā piemēra, kas redzams 27. un 28. attēlā, var novērot, ka
loga W ZR virsotnes iezīme ir 012, savukārt DA virsotnei – 121. Pārmeklējot B+koku, kas
aplūkojams attēlā nr. 28, tiek noskaidroti atbilstošie kvadranti – attiecīgi 01 un 12.
Pielietojot diapazona vaicājumu B+kokā intervālā [01, 12], katram atrastajam ierakstam e
tiek pārbaudīta attiecīgā diska lapa, ja logs W nosedz šo kvadrantu. Tādā veidā ieraksti ar
iezīmēm no 020 līdz 023 un 11 nemaz netiek pārbaudīti.38
Negatīvā puse 2D kvadrantu pārveidošanai viendimensionālā sakārtotu šūnu sarakstā ir
koka zaru izvēles nepilnība. Intervālā [L, L’] var būt daudz kvadrantu, kurus logs W nemaz
nenosedz, tāpēc diapazona vaicājums varētu prasīt vairāk ievades/izvades operāciju nekā
nepieciešams. Tomēr lapas, kuras saistītas ar kvadrantiem, kurus W nenosedz, pielietojot šo
metodi, netiek pārbaudītas.
Nepieciešamo I/O operāciju skaitu aprēķināt ir grūtāk nekā punkta vaicājumam.
Vaicājuma izpildes pirmajā solī nepieciešamas 2d piekļuves B+kokam, jo tiek meklētas 2
punktu iezīmes. Otrajā solī, lai sasniegtu intervāla apakšējās robežas virsotni, nepieciešamas
d piekļuves diskam, plus vēl tik daudz I/O operāciju, cik ir B-koka virsotnes ir jāpārmeklē. Šī
otrā soļa I/O operāciju skaits ir atkarīgs no intervāla lieluma - tātad no loga lieluma. Eksistē
arī citi efektīvāki algoritmi, kuri nepārmeklē kvadrantus, kurus nenosedz dotais logs, taču tie
ir daudz sarežģītāki pēc darbības principiem.
4.2.7. Taisnstūru ievietošana
Ievietojot telpā jaunus taisnstūrus, iespējams saskarties ar divām situācijām: 1)
ievietojot taisnstūri nav nepieciešama četrkoka dalīšana, un tiek nodrošināta pieeja
kvadrantam atbilstošajās lapas atjaunināšanai; 2) nepieciešama četrkoka virsotnes dalīšana.
Otrajā gadījumā B+koka atbilstošais ieraksts jādzēš, un jāveido četri jauni ieraksti (katram
jaunajam kvadrantam).
4 .3 . Z -KĀ RTO Š AN A S K OKS
Atšķirībā no visām citām telpisko datu pieejas metodēm, kas tika aprakstītas iepriekš,
struktūra - Z-kārtošanas koks par objektu aproksimizāciju neizmanto to mazākos
robežtaisnstūrus mbb. Tā vietā katrs objekts tiek dekomponēts līdz četrkokam ar dziļumu d,
un tiek indeksēta četrkoka virsotņu kopa, kas aproksimē šī objekta ģeometriju. Virsotņu
iezīmes, kuru izmērs ir mazāks vai vienāds ar d, tiek ievietotas B+kokā.
Algoritma pamatā ir sekojošas darbības: pie dotas objekta ģeometrijas o un kvadranta
q tiek pārbaudīts, vai o pārklāj visas pilna četrkoka ar sakni q lapas. Ja tas tā ir, q tiek
atgriezts kā rezultējošā kopa. Pretējā gadījumā o tiek dekomponēts tik daudzos gabalos (≤4),
cik apakškvadranti pārklāj o, un šis pats process rekursīvi tiek pielietots katram gabalam.
Rekursija tiek apturēta, kad ir sasniegts maksimālais dziļums d. Šinī situācijā tiek uzskatīts,
ka kvadrants ir minimāls.
Attēls nr. 29 parāda objekta dekompozīciju un aproksimizāciju. Objekts ir kvadrantu
{023, 03, 103, 12, 201, 210, 211, 300, 301, 302} kopa.
39
Attēls 29 – Objekta dekompozīcija
Visi kvadranti, izņemot kvadrantus 03 un 12, ir minimāli ar dziļumu d=3. Kvadranti 03 un 12
ir ar dziļumu d=2.
Savukārt attēlā nr. 30 parādīta 8 objektu kopas dekompozīcija. Četrkoka maksimālais
dziļums noteikts d=3. Tiek iegūta ierakstu [l, oid] kopa, kur l ir šūnas (kvadranta) iezīme un
oid ir objekta identifikators, kura aproksimizācija vai nu ietver, vai pārklāj šūnu ar iezīmi l.
Attēls 30 – Objektu kopa, dekomponēta ar z-kārtošanas algoritmu
Tādā veidā objekts a tiek uzdots ar sekojošiem ierakstiem: {[201, a], [203, a], [21, a], [230,
a], [231, a]}
Acīmredzami arī šinī struktūrā, līdzīgi kā iepriekš aplūkotajā lineārajā četrkokā tiek
ģenerēti dublikāti. Objektu oid ir atspoguļoti tik daudzos ierakstos, cik šūnu satur tā
aproksimizācija. Tāpat var būt arī situācijas, kad vienu šūnu pārklāj vairāki objekti. Tādā
gadījumā ir vairāki ieraksti ar vienādiem l, bet dažādiem oid. Piemēram kalpo objekti e un h
40
30. attēlā, kuri aizņem vienu un to pašu šūnu – 303. Tāpat jāpiemin, ka daži objekti var
pārklāt vienu un to pašu šūnu, taču dažādos dekompozīcijas līmeņos (objekti a un g).
Ieraksti tiek ievietoti B+kokā, par atslēgu izmantojot savu l. Attēlā nr. 31 parādīs
B+koks, kas iegūts no attēlā nr.30 redzamās datu kopas. Objektu oid ir tiek glabāti B+koka
lapu līmenī.
Attēls 31 – z-kārtošanas koks
Punkta un loga algoritmi ir ļoti līdzīgi tiem, kas tika izmantoti lineārajā četrkokā.
Pēdējā solī nepieciešams vienīgi saglabāt to ierakstu oid, kurus pārklāj loga arguments. Ja
apskata loga W, attēlota attēlā nr. 30, vaicājuma izpildi, tad minimālie kvadranti, kas satur
W.zr un W.da punktus, ir attiecīgi 012 un 121. Līdz ar to tiek iegūti ieraksti [01, c] un [121,
f]. Diapazona vaicājums B+kokā pārskata pirmās trīs koka lapas, tomēr tiek lasīti arī ieraksti,
kas nemaz neatbilst vaicājumam, taču atrodas norādītajā diapazonā, piemēram, [02, d].
Ievades/izvades operāciju skaits ir atkarīgs no loga lieluma. Pirmajā solī pie B+koka
nepieciešams griezties divas reizes (2d I/O operācijas, kur d – B+koka dziļums). Solī 2, lai
piekļūtu vaicājuma intervāla apakšējās robežas koka lapai, nepieciešamas 2d griešanās pie
diska plus vēl tik daudz I/O operāciju, cik B+koka lapu jāpārskata.
Salīdzinot lineāro četrkoku ar z-kārtošanas koku, pēdējā B-koka dziļums, un līdz ar to
arī nepieciešamo I/O operāciju skaits, ir lielāks, jo ierakstu ir tik daudz, cik ir šūnu visu
objektu dekompozīcijā. Jo smalkāks ir režģis, jo precīzāka ir objektu aproksimizācija, taču
līdz ar to B+kokā ir jāindeksē vairāk ierakstu. Lineārajā četrkokā, savukārt, B+koka ierakstu
skaits ir daudz mazāks, jo ir vienāds ar četrkoka kvadrantu skaitu, tomēr nepieciešamas
papildus griešanās pie diska loga vaicājumu izpildē.
41
4.3.1. Z-kārtošanas rastra variants ar dublēšanos
Z-kārtošanas rastra, jeb mozaīkas variants paredz objekta dekomponēšanu
elementāršūnās. Objekta aproksimizācija ir minimālu šūnu, kas pārklāj vai satur objektu,
kopa. Citiem vārdiem sakot, šo šūnu kopa ir objekta rastra attēlojums, kā parādīts attēlā nr.
32.
Attēls 32 – Objektu kopa ar rastra dekompozīciju
Objekts d šeit tiek aprakstīts ar 4 šūnām, kamēr klasiskajā z-kārtošanā (att.nr.30) to var
izdarīt ar vienu. Visu šūnu iezīmes ir viena izmēra, vienādas ar d (šinī gadījumā d = 3). Šinī
gadījumā dublēšanās ir vēl lielāka, un ierakstu skaits B+kokā ir vēl lielāks nekā klasiskajā
Attēls 33 – Z-rastra koks
z-kārtošanas kokā, tomēr punktu un logu vaicājumu algoritmu izpilde ir daudz vienkāršāka.
Tā kā visas šūnas ir minimālas, nav nepieciešams manuāli veidot funkciju, kas nosaka šūnas
iezīmi. Šim nolūkam var pielietot jau eksistējošo B+koka kodu, kas ir ietverts katrā DBVS.
Z-kārtošanas rastra varianta B+koks redzams attēlā nr. 33.
42
4.3.2. Z-kārtošana bez dublēšanās
Šis ir vēl viens z-kārtošanas variants, taču šeit netiek pieļauta objektu dublēšanās
vairākos ierakstos. Objekts netiek piesaistīts visiem kvadrantiem, kuri to pārklāj, bet gan
mazākajam kvadrantam, kas to ietver.
Attēlā nr.34 objekts b tiek piesaistīts visai telpai ar iezīmi (_), jo nav cita tāda
kvadranta, kas pilnībā ietvertu šo objektu. Objekti c, d un g ir attiecīgi piesaistīti kvadrantiem
0, 02 un 211. Pati struktūra ir vienkāršs z-kārtošanas koka variants. Ar katru četrkoka
virsotni, neatkarīgi no tā, vai tā ir iekšēja, vai lapu līmeņa, tiek saistīts objektu, kurus ietver
dotais kvadrants, saraksts. Līdzīgi kā iepriekš z-kārtošanas kokā, katru indeksēto objektu
apraksta ieraksts [l, oid], kur l – kvadranta, kas ietver objektu, iezīme, bet oid – objekta
unikāls identifikācijas numurs. Tāpat šie ieraksti tiek glabāti B+kokā, izmantojot kvadrantu
iezīmes par atslēgu (skat. attēlu nr.34).
Attēls 34 – Z-kārtošana bez atkārtojumiem
Pretēji tradicionālajam z-kārtošanas kokam, šeit katru objektu apraksta tikai viens ieraksts,
līdz ar to rezultējošais B+koks veidojas ievērojami seklāks un mazāks.
Loga vaicājuma izpildē tiek pārmeklēti visi kvadranti, kuru prefikss ir tā kvadranta
iezīme, kurš ietver loga argumentu. Atsaucoties uz 34. attēlu, tanī redzamais logs W tiek
piesaistīts kvadrantam 0. Vispirms tiek apmeklēta B+koka virsotne, kura satur ierakstu [_, b].
Tā kā kvadrants ‘_’ (visa telpa) satur objektu b, tas tiek pievienots rezultējošajai kopai. Tāpat
tiek atrasts ieraksts [0, c]. Meklēšana B+kokā tiek veikta tik ilgi, kamēr tiek atrasts ieraksts,
kura iezīmes prefikss vairs nav 0. Tādā veidā meklēšana tiek pārtraukta pie iezīmes 1. Līdz
šim tika atrasts arī d objekta ieraksts, kas arī tiek pievienots rezultējošajai kopai, kas
meklēšanas beigās ir sekojoša: {b, c, d}. Tālāk šī kopa attīrīšanas solī tiek apstrādāta,
43
pārbaudot patieso ģeometriju atbilstību loga argumentam. Jāpiemin, ka šinī solī tiks
pārbaudīta arī objekta b ģeometrija, kaut arī tas ir pilnīgi lieki.
Šīs metodes neapšaubāma priekšrocība ir tā, ka netiek ģenerēti objektu dublikāti, kas
ļauj būtiski samazināt ierakstu skaitu un līdz ar to arī indeksa izmēru, taču tās trūkums ir
objekta un tam piesaistītā kvadranta izmēra attiecība, kas var būt maza. Kā tika rādīts
gadījumā ar objektu b, kura kvadrants ir tuvu koka saknei, tas tiek atgriezts kā lieks rezultāts
visos vaicājumos, neatkarīgi no punkta vai loga argumentiem. Šī iemesla dēļ attīrīšanas solī
nepieciešams lieki tērēt resursus šādu objektu atfiltrēšanai.
B+koka izmantošana divdimensionālas telpas pārveidošanā par viendimensionālu ļauj
efektīvi izmantot atmiņu pat sliktākajos objektu izvietojuma apstākļos. Šo struktūru izmanto
jebkura daudzmaz nopietna DBVS, un šādā situācijā nav pārāk grūti šādu sistēmu pārveidot
tā, lai tā var strādāt ar telpiskajiem datiem.
4 .4 . UZ TELP U BA LS TĪ TO S TRU KTŪ R U S A LĪD ZI NĀ JU MS
Lai salīdzinātu šo visu pieminēto telpisko datu pieejas metožu, uzbūvi, darbību un
rezultātus, tika izstrādāta speciāla 2D objektu telpa, kurā tiks pielietotas apskatītās metodes.
Telpa satur 11 objektus ar dažādām ģeometrijām un izvietojumu telpā (attēls nr. 35).
Piemēros tiks uzskatīts, ka viena diska lapa spēj saturēt 4 ierakstus.
Attēls 35 – 2D telpa ar 11 objektiem
Lielākā daļa telpisko datu pieejas metožu paredzētas darbam ar objektu aproksimizācijām –
mazākajiem robežtaisnstūriem mbb, tāpēc arī šai objektu kopai tika atrasti mbb (att. 36).
44
Attēls 36 – Objektu aproksimizācija uz mbb
Indeksējot iegūtos taisnstūrus ar fiksētā režģa palīdzību, telpa tiek sadalīta 4×4
vienāda izmēra šūnās. Režģa direktorija šūnas satur rādītājus uz attiecīgajām diska lapām,
kur glabājas šūnā esošo objektu ieraksti. Struktūra ar telpas dalījumu, direktoriju un
atbilstošajām diska lapām simboliski parādīta attēlā nr.37, kur attēla labajā pusē un apakšdaļā
attēlota direktorija un izmantoto diska lapu struktūra.
p1 p2 p3 p4p5 p6 p7 p8p9 p10 p11 p12p13 p14 p15 p16
p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15 p161 5,6 6 1,2 3 4,5,8 7,8 3,9 3,9,10 4,5,8 8 9 9,10 11 8
Attēls 37 – Objektu indeksēšana ar fiksēto režģi
Šinī gadījumā nevienā no diska lapām nenotiek pārpilde, jo maksimālā lapas ietilpība M=4
nav pārsniegta, taču pat šādā vienkāršā piemērā skaidri saskatāms šīs struktūras viens no
galvenajiem trūkumiem – objektu ierakstu dublēšanās vairākās diska lapās. Tāpat
novērojams, ka, piemēram, diska lapa p2 ir piesaistīta šūnai, kura nemaz nesatur objektus, un
vairākas diska lapas satur tikai pa vienam ierakstam, līdz ar to no resursu saimniecības
viedokļa šī struktūra ir neracionāla.
45
Kā jau tika minēts režģa fails labo dažus no šiem trūkumiem. Attēlā nr. 38 redzamā
režģa faila struktūra acīmredzami ir taupīgāka ar resursiem, jo izmanto tikai 5 diska lapas, 16
vietā, kas jau ir labs rādītājs. Tas tiek panākts uz telpas dalījuma stratēģijas rēķina, kas paredz
sīkāku dalīšanu tajos apgabalos, kur objektu ir vairāk, līdz ar to ietaupot resursus uz
apgabaliem, kur objektu blīvums ir zemāks. Taču arī šīs struktūras pielietojums nerisina
dublikātu problēmu, kuru daudzums, palielinoties objektu skaitam, var tikai pieaugt.
p1
p4
p1
p2p5 p3
p1 p2 p3 p4 p51,2,3 4,5,7,8 4,8,11 5,6 3,9,10
Direktorijs un diska lapas
Attēls nr. 38 – Režģa fails
Vēl viena apskatīta struktūra ir lineārais četrkoks, kas paredz ierakstu [mbb, oid]
sasaistīšanu ar četrkoka lapu l un glabāšanu diska lapā p. Kā indekss tiek izmantots B+koks,
kas glabā ierakstu pārus (l, p), par atslēgu izmantojot l. Attēlā nr. 39 parādīts telpas dalījums
kvadrantos un atbilstošais četrkoks ar iezīmētām virsotnēm (pēc z-kārtošanas principa).
Tāpat attēla apakšējā daļā redzams atbilstošais B+koks, kas sasaista četrkoka lapas ar diska
lapām. Ar raustītu līniju attēlotas diska lapas, kurās glabājas attiecīgo objektu ieraksti. Arī
šinī struktūrā novērojama tā pati sliktā īpašība, ka notiek objektu dublēšanās vairākās diska
lapās, kas būtībā ir resursu izšķērdība. Lineārais četrkoks savā ziņā ir līdzīgs režģa failam, jo
arī šeit telpa tiek dalīta sīkākos kvadrantos tikai tajos apgabalos, kur objektu sablīvējums ir
lielāks nekā to pieļauj diska lapas ietilpība. Tāpēc, piemēram, kvadrants 1 ir dalīts sīkākos
kvadrantos, jo konkrētajā gadījumā diska lapa nevar glabāt 5 ierakstus. Kā redzams pēc
attēla, šāds risinājums dotās objektu kopas glabāšanai izmanto 7 diska lapas. Taču struktūras 46
stiprā puse ir indeksēšana un vaicājumu izpilde. Indeksēšanā izmantota B+koka struktūra,
kas nodrošina to, ka meklēšanas laiks kokā būs logaritmisks un atkarīgs vienīgi no objektu
kopas lieluma.
Lineārais četrkoks
Attēls 39 – Lineārais četrkoks un tā lapu indeksēšana ar B+koka palīdzību.
Cits paņēmiens objektu kopas glabāšanā un indeksēšanā ir z-kārtošanas koks, kura īpatnība ir tā, ka
objekti netiek aproksimēti līdz to mbb, bet gan dekomponēti šūnu kopā. Līdz ar to darbs notiek ar pašām
objektu ģeometrijām, un minētā piemēra objektu dekompozīcija apskatāma attēlā nr. 40.
1 = {000, 002, 020, 022}2 = {02}3 = {023, 032, 201, 210}4 = {122, 123, 300, 301}5 = {103, 12, 300, 301}6 = {10, 11}7 = {13}8 = {123, 132, 301, 303, 310, 312, 321, 330}9 = {202, 22, 230, 232, 233}10 = { 212, 213, 23}11 = {32}
Attēls 40 – Objektu z-kārtošanas dekompozīcija un koks
47
Līdz ar to tiek veidota ierakstu [l, oid] kopa, kur l ir šūnas iezīme, kuru pārklāj
objekts ar identifikatoru oid. Tādā veidā, piemēram, objekts 1 tiek aprakstīts šādi:
{[000,1], [002,1], [020,1], [022,1]}.
Acīmredzami arī šeit novērojama dublēšanās, jo objekta oid parādās tik daudzos ierakstos,
cik šūnu ir tā aproksimizācijā.
Aprakstot objektus ar parasto z-kārtošanas koku, tika izmantoti dažādu lielumu
kvadranti (skaidrojums nodaļā „Z-kārtošanas koks”). Piemēram, kā redzams attēlā nr. 40,
vienu objektu 5 apraksta gan tādi kvadranti kā 103, 300, 301, kas ir trešā līmeņa kvadranti,
gan kvadrants 12, kurš ir otrā līmeņa kvadrants. Z-kārtošanas koka rastra variantā ar
dublēšanos objekts tiek dekomponēts līdz sīkākajām šūnām, kuras nosaka telpas dalījums
kvadrantos. Tātad, ja atbilstošajam četrkokam dziļums d=3, tad telpa tiks sadalīta 23×23
kvadrantos un katrs šis kvadrants būs sīkākā šūna. Dekomponējot tos pašus objektus ar z-
kārtošanas rastra variantu, dublēšanās ir vēl lielāka nekā parastajā z-kārtošanas kokā, taču
tiek iegūta vienkāršība (nav jārūpējas par blakus kvadrantos esošu šūnu grupēšanu lielākos
kvadrantos, u.t.t.), kuras dēļ nelielos projektos var tikt izmantots tieši šis objektu glabāšanas
un indeksēšanas paņēmiens. Attēlā nr. 41 attēlota objektu kopas rastra dekompozīcija, kur
katru objektu acīmredzami apraksta vairāk šūnu nekā parastajā z-kārtošanas kokā. Ja visu
doto objektu kopu ar z-kārtošanas koka palīdzību apraksta 37 ieraksti, tad rastra
dekompozīcijā tiek veidoti 61 ieraksti, kas ir par 65% vairāk. Šis skaitlis ir liels pat šādai
nelielai objektu telpai. Ja jāapraksta liela objektu kopa, kur objektu ģeometrijas ir pietiekami
sarežģītas, šīs metodes izmantošana novedīs pie milzīga datu dublēšanās koeficienta, kas
neapšaubāmi prasīs lieku resursu izmantošanu un sistēma būs neefektīva.
Arī pats z-kārtošanas rastra koks, neapšaubāmi ir lielāks un datu glabāšanai
nepieciešamas vismaz 16 diska lapas, kamēr parastajam z-kārtošanas kokam tikai 10.
Jāpiezīmē, ka konkrētajos piemēros disku lapas tiek piepildītas pilnas. Reālajās situācijās
nepieciešamo diska lapu daudzums būtu lielāks, jo objektu ievietošanas procesā tās ne
vienmēr tiek piepildītas pilnas.
Kā jau tika minēts, vēl viens z-kārtošanas koka variants – „Z-kārtošanas koks bez
dublēšanās” risina šo problēmu, kas raksturīga lineārajām struktūrām – objektu dublēšanos
vairākos ierakstos. Objekts tiek piesaistīts mazākajam kvadrantam, kas to pilnībā ietver.
Tātad – katram objektam atbilst viens kvadrants, un līdz ar to arī tas tiek aprakstīts ar vienu
ierakstu. Attēls nr. 42 uzskatāmi parāda, ka gan ierakstu kopa ir stipri mazāka salīdzinājumā
ar iepriekš apskatītajām z-kārtošanas struktūrām, gan pats indeksa koks. 48
1 = {000, 002, 020, 022}2 = {020, 021, 023, 024}3 = {023, 032, 201, 210}4 = {122, 123, 300, 301}5 = {103, 120, 121, 122, 123, 300, 301}6 = {100, 101, 102, 103, 110, 111, 112, 113}7 = {130, 131, 132, 133}8 = {123, 132, 301, 303, 310, 312, 321, 330}9 = {202, 220, 221, 222, 223, 230, 232, 233}10 = {212, 213, 230, 231, 232, 233}11 = {320, 321, 322, 323}
Attēls 42 – Objektu rastra dekompozīcija
Z-kārtošana bez dublēšanās ļauj samazināt izmantojamo diska lapu skaitu līdz pat 3,
kas salīdzinājumā ar iepriekšējām struktūrām nenoliedzami ir ļoti labs rādītājs. Taču maksa
par metodes dotajām priekšrocībām ir skaidri redzama piemērā (att. nr. 42). Dotajā objektu
kopā veseliem četriem objektiem, kas ir gandrīz trešā daļa no kopējā objektu skaita, kā
kvadrants tiek piesaistīta visa telpa, jo nav neviena mazāka kvadranta, kas pilnīgi ietvertu
dotos objektus. Pēc maniem novērojumiem un loģiski spriežot, šādi objektu apraksti rodas, ja
tie atrodas uz telpas galvenās horizontālās vai vertikālās līnijas. Līdz ar to tos nevar ietvert
neviens cits kvadrants kā tikai augstākā līmeņa kvadrants – pati telpa.
1 = {0}2 = {02}3 = {_}4 = {_}5 = {_}6 = {1}
7 = {13}8 = {_}9 = {2}10 = {2}11 = {32}
Attēls 42 – Z-kārtošanas koks bez dublēšanās
49
Šādu objektu klātbūtne iespaido vaicājumu izpildi. Jebkurā vaicājumā šie objekti, kuri
piesaistīti visai telpai arī tiks atgriezti kā rezultātu kopa, un attīrīšanas solī būs jāpatērē lieki
resursi, lai atdalītu šādus objektus no patiešām rezultējošajiem.
50
5. UZ DATIEM ORIENTĒTAS STRUKTŪRAS
Telpisko datu pieejas metodes no R-koku grupas pieder pie metodēm, kas orientētas
uz datiem. To struktūra pati piemērojas taisnstūru izvietojumam plaknē. Līdzīgi B-kokam, arī
R-koku metodes balstās uz hierarhisku, balansētu struktūru, kurā katra koka virsotne tiek
saistīta ar diska lapu. Tomēr, ja B-koki tiek veidoti no tā saucamajām atslēgām, kas ir
sakārtotas noteiktā kārtībā, tad R-koki organizē taisnstūrus pēc ietvēruma, kur viens
taisnstūris var ietvert citus. Katra virsotne tiek saistīta ar taisnstūri, sauktu par direktorija
taisnstūri (dr), kas pats ir mazākais robežtaisnstūris pēcteču virsotņu taisnstūriem.
Lai piekļūtu pie taisnstūra indeksētā objektu kopā, tiek meklēts ceļš no R-koka saknes
līdz atbilstošai lapu līmeņa virsotnei, pārbaudot katru direktorija taisnstūri, vai tas nesatur vai
nepārklāj šo doto taisnstūri. Tāpat kā B-kokam, arī R-kokam dziļums d un nepieciešamo I/O
operāciju skaits meklēšanā ir logaritmisks pret indeksēto objektu skaitu. Tāpat R-koka
struktūra atbilst abām prasībām pret telpisko datu pieejas metodēm. Oriģinālais R-koks
parāda pamata īpašības, kas piemīt šai struktūrai. Taču ir izstrādāti arī citi R-koku varianti –
tādi kā R*koks un R+koks, kas labo parastā R-koka nepilnības.
5 .1 . R-K OKS
R-koks ir dziļumā balansēts koks, kurā katra virsotne atbilst diska lapai. Pēdējā
līmeņa virsotnes satur ierakstu (mbb, oid) masīvu. mbb tiek dots formā (x1, y1,... xd, yd), kur d
ir telpas dimensiju skaits, tātad šī struktūra spēj strādāt arī ar vairāk par 2 dimensijām. Tomēr
šī darba ietvaros tiek aplūkots R-koka pielietojums 2D plaknei. Koka virsotnes, kuras
neatrodas pēdējā, jeb lapu līmenī, satur virsotņu ierakstu masīvu. R-koka struktūrai ir
sekojošas īpašības:
Visām virsotnēm kokā (izņemot sākuma virsotni), ierakstu skaits ir robežās starp
m un M, kur m pieder intervālam [0, M/2];
Katram ierakstam (dr, nodeid) kādā no virsotnēm N, kas nav lapu līmenī, dr ir
direktorija taisnstūris pēcteča virsotnei N, kuras diska lapas adrese ir nodeid;
Katram lapu līmeņa virsotnes ierakstam (mbb, oid), mbb ir objekta, kas tiek
glabāts adresē oid, telpiskās komponentes mazākais robežtaisnstūris;
Ja koka saknes virsotne nav vienlaicīgi arī lapa, tanī ir vismaz divi ieraksti;
51
Visas lapu virsotnes atrodas vienā līmenī.
Attēlā nr. 43 parādīts R-koks ar m=2 un M=4. Indeksētā objektu kopa C satur 14
objektus. Direktoriju taisnstūri attēlā apzīmēti ar punktotu līniju.
Attēls 43 – R-koks
Īpašības, kas tika minētas, paliek spēkā arī pie dinamiskas objektu ievietošanas un
dzēšanas. Tāpat jāpiezīmē, ka struktūra arī pie nevienmērīga objektu izvietojuma saglabā
koka balansu. Blīvs objektu izvietojums kādā telpas reģionā noved pie liela skaita
blakusesošu koka lapu izveidošanas, jo šī struktūra būtiski atšķiras no četrkoka, kur objektu
sablīvējuma gadījumā telpa tiek dalīta sīkākos kvadrantos. Četrkokā pie blīva objektu
izvietojuma noteiktā telpas apgabalā var izveidoties vairāki ļoti gari zari, tai pašā laikā citi
var būt pavisam īsi. Tādā veidā četrkoka dziļumu nosaka blīvākais telpas apgabals.
Attēlā 44.b attēloti R-koka direktoriju taisnstūri reālai ģeogrāfiskai kartei, kas attēlo
Konektikutas štata kartes hidrogrāfijas slāni.
Attēls 44 – Konektikutas hidrogrāfijas indeksēšana : TIGER dati (a) un R-koks (lapu līmenī) (b)
M – maksimālais ierakstu skaits virsotnē ir atkarīgs no ieraksta izmēra Izmers(E) un
diska lapas ietilpības Izmers(P). Tādā veidā M = (Izmers(P)/Izmers(E)). Turklāt M var
atšķirties lapu līmeņa un ne-lapu līmeņa virsotnēm, jo ieraksta izmērs atkarīgs no nodeid (ne-
lapu virsotnēm) oid (lapu virsotnēm) izmēriem. oid – objekta adrese diska lapā parasti ir
52
garāka par nodeid – diska lapas adresi. Minimālā ierakstu skaita m virsotnē noteikšana starp
0 un M/2 ir atkarīga no izvēlētās virsotņu dalīšanas stratēģijas.
Pie dota M un m, R-koks ar dziļumu d spēj indeksēt vismaz md+1 objektus un ne
vairāk par Md+1 objektiem. Tieši pretēji – R-koka dziļums, kas indeksē N objektu kopu ir ne
lielāks par logm (N) -1 un vismaz logm(N) -1. Precīza vērtība atkarīga no diska lapu
izlietojuma.
Lai parādītu R-koka laikietilpību, tiek pieņemts, ka diska lapas izmērs ir 4KB,
ieraksta izmērs r 20 baiti (16 baiti priekš mbb, 4 baiti priekš oid) un m ir uzstādīts 40% no
diska lapas ietilpības. Tādējādi M =204 un m=81. R-koks ar dziļumu 1 spēj indeksēt vismaz
6561 objektus, savukārt ar dziļumu 2 – objektu skaitu intervālā [531 441, 8 489 664]. Tādā
veidā miljons objektu kolekcijā nepieciešamas 3 griešanās pie diska, lai pārmeklētu koku un
atrastu nepieciešamo objektu. Šis piemērs parāda, ka ar šo struktūru pat ļoti lielās objektu
kopās nepieciešamas tikai dažas griešanās pie diska objekta atrašanai.
Pretēji telpas dalīšanas metodēm, kuras tika apskatītas iepriekš, objekts tiek
atspoguļots tikai vienā no koka lapām – tātad nav liekas objektu ierakstu dublēšanas.
Taisnstūri R-kokā neapraksta visu telpu, jo tos apgabalus, kur objekti nav izvietoti, nav
vajadzības aprakstīt. R-koka aprakstītie taisnstūri var arī pārklāties. Tā piemēram attēlā nr.
43, taisnstūri b, c, un d daļēji pārklājas.
5.1.1. Meklēšana R-kokos
Tāpat kā visām citām telpisko datu piekļuves metodēm arī R-kokam nav jēgas bez
praktiska tā pielietojuma. Līdzīgi kā iepriekš, arī šinī nodaļā tiks apskatīti vaicājumi, kā arī
svarīgākie algoritmi darbā ar R-kokiem.
Punkta vaicājuma R-kokā izpildi var sadalīt divos soļos. Pirmajā solī tiek apmeklētas
visas koka saknes pēcteču virsotnes, kuru direktorija taisnstūri satur punktu P, kas ir
vaicājuma arguments. Tā kā direktoriju taisnstūri var daļēji nosegt viens otru, var gadīties, ka
punkta arguments atrodas vairāku taisnstūru pārklāšanās apgabalā. Tādēļ jāapmeklē visi
apakškoki, kuri sākas šo taisnstūru virsotnēs. Process tiek atkārtots katrā līmenī, kamēr tiek
sasniegts koka lapu līmenis. Apmeklējot katru virsotni N, iespējamas divas situācijas:
Dotajā virsotnē neviens taisnstūris nesatur punktu P kā rezultātā pārmeklēšana
šinī zarā tiek pārtraukta. Šāda situācijā var nokļūt arī tad, ja P atrodas
attiecīgās virsotnes direktorija taisnstūrī.
53
Punktu P satur viens vai vairāki taisnstūri. Jāapmeklē visi attiecīgie
apakškoki.
Tādējādi, atšķirībā no telpas orientētām pieejas metodēm (režģa fails, lineārās
struktūras), R-kokā var tikt pārmeklēti vairāki zari. Vaicājuma izpildes otrajā solī tiek veikta
pārbaude pirmajā solī iegūtajai koka lapu kopai. Kā vaicājuma rezultāti tiek atgriezti tie
ieraksti, kuru mbb satur punktu P. Vaicājuma izpildes algoritmā tiek realizēta rekursīva koka
pārmeklēšana dziļumā. Aprakstītais algoritms ir vienkāršots no atmiņas vadības viedokļa.
Nav racionāli glabāt atmiņā visu lapu kopu. Reālās situācijās tā var izveidoties ļoti liela, tādā
veidā nevajadzīgi aizpildot atmiņu. Algoritma variantā, kas tiek izmantots praktiski, tiek
izmantota vienas diska lapas apskates stratēģija (one-page-at-a-time).
Attēls 45 – Punkta vaicājuma izpilde R-kokā
Attēlā nr. 45 parādīts vaicājuma izpildes piemērs, ņemot par argumentu punktu P,
kurš pieder objektiem 8 un 12. Vaicājuma izpildes laikā tiek apmeklētas 3 koka virsotnes –
R, c un d. Sākotnēji tiek noskaidrots, ka punkts atrodas direktoriju taisnstūros c un d, kas
atrodas lapu līmenī. Tātad tiek iegūta lapu kopa {c, d}, kur katras lapas ierakstiem tiek veikta
mbb pārbaude. Rezultātā tiek noskaidrots, ka punktu P satur objektu 8 un 12 minimālie
robežtaisnstūri.
Ja šajā piemērā būtu situācija, ka arguments P sakristu ar objekta 8 mbb dienvid-
austrumu stūri, būtu jāpārmeklē arī zars b, kas šinī gadījumā ir tikai viena virsotne.
Ja punkts P atrodas tikai vienā taisnstūrī katrā līmenī, punkta vaicājums prasa d
griešanās pie diska, kur d ir koka dziļums, logaritmisks pret indeksēto taisnstūru skaitu. Pat ja
tā notiek, no racionalitātes viedokļa būtu jāpārmeklē pēc iespējas mazāks skaits koka zaru,
saglabājot I/O operāciju skaitu logaritmisku. Diemžēl ir situācijas, kad šis skaits vairs nav
logaritmisks. Sliktākajā gadījumā, telpas taisnstūri var būt izvietoti tā, ka katrs no tiem satur
54
punktu P un ir jāpārmeklē viss koks. Tomēr neskatoties uz šādām situācijām, R-koks praksē
lielākoties ir efektīvs.
Fakts, ka apmeklējamo virsotņu skaits ir cieši saistīts ar direktoriju taisnstūru
pārklāšanos, sekmēja daudzu citu R-koka variantu izstrādi, kas cenšas tikt galā ar šo
problēmu.
5.1.2. Objektu ievietošana un dzēšana R-kokā
Ievietojot objektu R-kokā, vispirms tas tiek pārmeklēts no augšas uz leju, sākot no
saknes virsotnes. Katrā līmenī vai nu tiek atrasta virsotne, kuras direktorija taisnstūris ietver
ievietojamā objekta mbb, un tiek turpināta pārmeklēšana pa šo zaru, vai arī tādas virsotnes,
kas pilnībā ietvertu mbb nav. Šādā gadījumā tiek izvēlēta virsotne, kuras nepieciešamais dr
palielinājums būtu vismazākais (funkcija ChooseSubtree). Šis process tiek atkārtots, kamēr
netiek sasniegts lapu līmenis.
Ja lapas virsotne nav pilna, diska lapā, kas ir saistīta ar šo koka lapu, tiek ievietots
jauns ieraksts [mbb, oid]. Ja lapas direktorija taisnstūri nepieciešams palielināt, arī atbilstošās
priekšteča virsotnes dr ir jāatjaunina (funkcija AdjustEntry). No tā var secināt, ka viena dr
palielināšana var ietekmēt arī citus dr, un sliktākajā gadījumā jāpārveido visi dr attiecīgajā
ceļā līdz pat saknei (funkcija AdjustPath).
Ja lapa l, kurā jāievieto objekts, ir pilna, notiek dalīšana (split). Tiek izveidota jauna
lapa l’ un M+1 ieraksti tiek izkārtoti pa koka lapām l un l’. Dalīšanas algoritms tiks apskatīts
vēlāk.
Kad dalīšana ir pabeigta, atliek atjaunināt vecās lapas l ierakstu priekšteča virsotnē f
un ievietot tajā jaunu ierakstu, kas atbilst lapai l’. Ja jaunā ieraksta ievietošanas rezultātā pats
f ir pilns, tiek pielietots tas pats dalīšanas mehānisms. Sliktākajā gadījumā dalīšanas process
turpinās, kamēr netiek sasniegta koka sakne (funkcija SplitAndAdjust). Gadījumā, ja tiek
dalīta sakne, koka dziļums palielinās par 1.
Šis process tiek attēlots, ievietojot divus jaunus objektus 43. attēlā redzamajā kokā.
Piemērā pieņemts, ka M=4. Objekts 15 (attēlā nr. 46) tiek ievietots koka lapā d. Virsotnes d
direktorija taisnstūris ir jāpalielina, lai ietvertu šo jauno objektu, tāpat jālabo arī d ieraksts
saknes virsotnē. Objekts 16 (attēls nr. 47) jāievieto koka lapā b, bet tā kā b jau satur četrus
ierakstus {3, 4, 7,10} (M=4), notiek virsotnes pārpilde, un b tiek dalīts. Tiek izveidota jauna
lapa e, un tagad jau pieci ieraksti tiek izkārtoti pa lapām b un e. Ieraksts 10 tiek pārvietots uz
e, kur jau ir ievietots jaunais ieraksts 16. Ieraksti 3,4 un 7 paliek koka lapā b.
55
Tagad jauns ieraksts jāievieto arī b priekšteča virsotnē R. Tā kā arī R virsotnei jau ir 4
pēcteči, tā ir jādala. Šis process ir līdzīgs aprakstītajam par b virsotnes dalīšanu.
Attēls 46 – Objekta 15 ievietošana R-kokā
Tā rezultātā tiek izveidota virsotne f. Virsotnes a un b paliek par R pēctečiem, savukārt e, c,
un d tiek pievienotas virsotnei f. Visbeidzot tiek izveidota jauna koka sakne R’, kurai ir divi
pēcteči R un f.
Attēls 47 – Objekta 16 ievietošana R-kokā
Objektu ievietošanas R-kokā algoritms izklāstīts pseidokodā.
A L G O R I T M SInsert(e:LapasIeraksts) begin
// inicializē meklēšanu ar koka sakni virsotne = sakne; //ceļa izvēle while (virsotne nav lapa) do virsotne=ChooseSubtree(virsotne, e) end while //Ievieto lapā ierakstu InsertInLeaf(virsotne, e); if (virsotne pārpildīta) then SplitAndAdjust(virsotne) else AdjustPath(virsotne); end if
end
56
Procedūra ChooseSubtree(virsotne, e), kas tiek izsaukta augstāk redzamajā algoritmā,
no virsotnes izvēlas ierakstu ce tā, ka ce.dr vai nu satur e.mbb, vai minimāli jāpalielina tā, lai
to ietvertu. Ja šādi ieraksti ir vairāki, tiek izvēlēts tas, kuram ir mazākais laukums.
Procedūra AdjustPath(virsotne:Virsotne) maina ierakstu vērtības visās tajās virsotnēs
ceļā no virsotnes līdz koka saknei, kur jaunā objekta ievietošanas dēļ ir jāmaina dr lielums.
Arī šī procedūra ir rekursīva, un savu darbību tā pārtrauc vai nu kad dr lielums patreizējai
virsotnei nav jāmaina, vai arī kad ir sasniegta koka sakne.
A L G O R I T M SAdjustPath(virsotne:Virsotne) begin if (virsotne ir sakne) then end process else //tiek noteikta priekšteča virsotne priekštecis = GetPriekštecis(virsotne); //Labo priekšteča virsotnes ierakstu if (AdjustEntry(priekštecis, [virsotne.mbb, virsotne.id])) then //Ieraksts ticis mainīts: jālabo ceļš uz priekšteci
AdjustPath(priekštecis); end if end if end.
AdjustEntry(virsotne, pēcteča-ieraksts) ir Būla tipa funkcija, kas sameklē ierakstu e
atbilstošu pēcteča-ierakstam.id virsotnē un salīdzina e.mbb ar pēcteča-ieraksts.mbb. Ja
pēcteča dr izmaiņu dēļ jāatjaunina e.mbb, tas tiek darīts un funkcija atgriež patiesu vērtību,
pretējā gadījumā – aplamu.
Procedūra SplitAndAdjust(virsotne:Virsotne) tiek iedarbināta, ja notiek virsotnes
pārpilde. Tā dala virsotni un labo visus nepieciešamos ierakstus ceļā līdz pat saknei, ja ir tāda
nepieciešamība. Tā izmanto funkcijas AdjustPath un AdjustEntry, un var tikt rekursīvi
izsaukta gadījumos, kad vienas pārpildes izsauktās virsotņu dalīšanas rezultātā notiek jauna
pārpilde virsotņu priekštečos.
A L G O R I T M S
SplitAndAdjust(virsotne:Virsotne) begin
//veido jaunu virsotni un izkārto ierakstusjaun_virsotne = Split(virsotne);if (virsotne ir sakne) then CreateNewRoot(virsotne, jaun_virsotne)else //Iegūst priekšteča virsotni
57
priekštecis = GetParent(virsotne) //Labo virsotnes ierakstu priekštecī AdjustEntry(priekštecis, [virsotne.id, virsotne.mbb]) //ievieto jaunu ierakstu priekštecī InsertInNode(priekštecis, [jaun_virsotne.mbb, jaun_virsotne.id]) if (pārpilde(priekštecis)) then SplitAndAdjust(priekštecis) else AdjustPath(priekštecis) end ifend if
end.
Algoritmā iesaistītā CreateNewRoot (virsotne, jaun_virsotne) procedūra piesaista
jaunu diska lapu p un ievieto tajā divus ierakstus: vienu, kas norāda uz virsotne, otru – uz
jaun_virsotne. Jāpiezīmē, ka sakne ir vienīgā virsotne R-kokā, kura var neievērot mazāko
atļauto ierakstu skaitu m.
Kad ieraksti ir izkārtoti starp abām virsotnēm, jāveic nepieciešamās izmaiņas
virsotnes priekšteča ierakstā (AdjustEntry izsaukšana). Tagad priekšteča virsotnē jāievieto
jaunās virsotnes jaun_virsotne ieraksts. Izpildot šo darbību ir iespējami divi gadījumi: vai nu
priekšteča virsotnē notiek pārpilde, un šinī gadījumā tā ir jādala ar šīs pašas procedūras
SplitAndAdjust rekursīvu izsaukumu, vai arī vienkārši jāveic izmaiņas ierakstos tā, lai
jaun_virsotne tagad būtu šīs priekšteča virsotnes pēctecis.
Svarīga algoritma daļa ir virsotnes dalīšana. Pie jau iepriekš noteiktiem
ierobežojumiem m - mazākais ierakstu skaits un M – lielākais iespējamais skaits virsotnē,
jebkurš risinājums, kurš atbilst sekojošiem nosacījumiem, ir pieļaujams: vienai virsotnei m+i
ieraksti un otrai M+1-m-i, kur 0 i M-2m+1.
Eksistē daudzas virsotnes dalīšanas metodes. Laba dalīšanas stratēģija atbilst šādām
prasībām:
Tiek minimizēts abu virsotņu laukums; Tiek minimizēta abu virsotņu pārklāšanās;
Diemžēl ne vienmēr ir iespējama abu prasību vienlaicīga apmierināšana (Att. nr. 48),
tāpēc turpmāk darbā virsotņu dalīšana tiks balstīta uz pirmā kritērija izpildi. Kā spēka metode
labākā virsotņu dalījuma meklēšanai ir abu virsotņu taisnstūru visu iespējamo izvietojuma
kombināciju pārbaude, un tās kombinācijas izvēle, kur laukums ir minimāls. Tomēr, ja
parasti viena diska lapa var glabāt ap 100 objektiem (M=100), šī metode prasa daudz resursu,
un tās izmantošanas izmaksas kļūst eksponenciālas pret M. Tāpēc ir jārod vidusceļš starp
aprēķinu laiku un rezultātu kvalitāti.
58
Attēls 48 – Virsotņu dalīšana: dalīšana ar minimālu laukumu (a) un dalīšana ar minimālu pārklāšanos (b)
Viens no dalīšanas algoritmiem, kas tiek izmantots R-kokā, ir kvadrāta dalījums
(quadratic split). Algoritms balstās uz sekojošu heiristiku: Tiek izveidotas divas ierakstu
grupas, kurās tiek ievietoti ieraksti e un e’, kuri atrodas vistālāk viens no otra. Citiem
vārdiem sakot, jāizvēlas tādi dievi ieraksti, kuru veidotais mbb satur vislielāko tukšo vietu
laukumu. Tukšās vietas tiek definētas kā ierakstu e un e’ minimālā robežtaisnstūra laukums
mīnus ierakstu e un e’ laukumi.
Pēc tam atlikušie M – 2 ieraksti katrs tiek ievietoti kādā no grupām pēc sekojošiem
noteikumiem. Ja grupas paplašinājums (group expansion) ierakstam ir tukšo telpas vietu
laukums, kas rodas pēc konkrētā ieraksta ievietošanas grupā, tad katrā solī tiek meklēts
ieraksts e, kurš veido vismazāko grupu paplašinājumu. Šis e tiek ievietots tuvākajā grupā
(tanī, kurai šis paplašinājums ir mazākais). Gadījumā, ja ieraksts veido vienādu
paplašinājumu abām grupām, tiek izmantoti citi kritēriji: (1) – tiek izvēlēta grupa, kurai ir
mazākais laukums, un (2) – tiek izvēlēta grupa, kurā ir mazāk elementu. Algoritma
nosaukumu skaidro fakts, ka abas algoritma daļas – grupu inicializācija un ierakstu
ievietošana, laika ziņā ir kvadrātiskas pret M (t=M2).
Algoritma izpildes otrajā daļā var būt situācijas, kad objektu ievietošanai viena grupa
pārsvarā tiek atzīta labāka par otru. Šādā gadījumā atlikušie ieraksti neatkarīgi no to atrašanās
vietas jāievieto otrajā grupā, kas neapšaubāmi var novest pie neracionāla objektu
izvietojuma. Šis faktors ir stipri atkarīgs no noteiktā m, tāpēc tiek uzskatīts, ka racionāla m
vērtība šim algoritmam ir 40%.
Ieraksta e dzēšana no R-koka tiek realizēta 3 soļos:
1. Tiek atrasta koka lapa L, kas satur ierakstu e;2. e tiek dzēsts no L;3. Ja nepieciešams, koks tiek pārstrukturizēts;
59
Pēdējais algoritma solis ir sarežģītākais. Koka reorganizācija nepieciešama gadījumā, kad
pēc ieraksta dzēšanas no virsotnē N paliek mazāk par m ierakstiem. Vienkāršākā pieeja šīs
problēmas risināšanā ir dzēst šo virsotni un ievietot kokā atlikušos m-1 ierakstus kā jaunus.
A L G O R I T M S
Delete(e:LapasIeraksts)begin //Tiek atrasta koka lapa, kas satur e L = FindLeaf(e); //Ieraksti tiek dzēsti un koks tiek pārstrukturizēts, sākot no
L.e //Rezultāts ir virsotņu Q kopa Q = Reorganize(L, e); //Ievieto ierakstus Q virsotnēs Reinsert(Q);end;
Funkcija Reorganize(N:Virsotne, e:Ieraksts) dzēš virsotnes, kas satur mazāk par m
ierakstiem. Sliktākajā gadījumā šī procedūra var ietekmēt visus koka līmeņus, ja vienas
virsotnes dzēšana noved pie nepieļaujama ierakstu skaita samazināšanās, arī priekšteča
virsotnē, kas šādā gadījumā arī jādzēš. Procedūra atgriež dzēsto virsotņu, kuru ieraksti par
jaunu jāievieto kokā, kopu.
A L G O R I T M S
Reorganize(N:Virsotne, e:Ieraksts):virsotņu ierakstu kopabegin Q:virsotņu kopa, sākotnēji tukša //Dzēš e no N N = N – {e}; if (N nav sakne) then
if (|N| < m) then Q = Q {N} //Tiek noteikts un pārstrukturizēts priekštecis
F = GetParent(N); Q = Q Reorganize(F, N ieraksts iekš F)else AdjustPath(N) // N tika mainīts: tiek mainīts arī ceļš //uz N.end if
end if return(Q);end.
Kad visas virsotnes, kuras jāpārstrukturizē ir apkopotas kopā Q, rekursīvi izsaucot funkciju
Reorganize, Q elementi no jauna tiek ievietoti kokā ar procedūras Reinsert palīdzību.
60
Ievietotie elementi var būt gan koka pēdējā – lapu līmeņa ieraksti, gan iekšējo virsotņu
ieraksti, kuri jāievieto attiecīgā koka līmenī.
Atkārtota objektu ievietošana kokā dzēšanas procesa laikā bieži ļauj iegūt labāku
taisnstūru izvietojumu pa virsotnēm – līdz ar to arī labāku R-koka telpisko organizāciju,
tomēr kopējo efektivitāti stipri iespaido objektu ievietošanas secība. Sākotnēji veidojot koku
taisnstūriem ar dažādu izvietojumu telpā, bieži tiek iegūts koks, kurā novērojama stipra
virsotņu pārklāšanas (vairāku virsotņu dr pārklāj vienu un to pašu objektu). Ja ieraksts
vienreiz ir piesaistīts virsotnei, tas tur arī paliek, kaut arī kaut kad vēlāk tas varētu tikt
izvietots labāk.
Šo problēmu atspoguļo arī piemērs, redzams attēlā nr. 49. Solī a tiek ievietoti 4
objekti, kas kompakti izvietojas virsotnē u. Kad tiek ievietots objekts 5, notiek virsotnes
dalīšana, un dotajā situācijā nav labu objektu izvietošanas variantu starp veco virsotni u un
jauno – v. Jebkurā gadījumā objektu izvietojums virsotnē v ir ļoti neracionāls, jo direktorija
taisnstūrī tukšās telpas laukums ir daudz lielāks par pašu objektu laukumu, taču šinī gadījumā
tas ir vienīgais veids, kā indeksēt objektus ar R-koku, tāpēc ar virsotni v tiek saistīti objekti 4
un 5 (b solis). Pēc objektu 6 un 7 ievietošanas telpā (c solis) situācija nemainās, kaut arī būtu
iespējams labāks objektu iedalījums pa virsotnēm (piemēram u={1,2,3,4} un v{5,6,7}).
Attēls 49 – Neveiksmīga objektu ievietošanas kārtība
Eksistē konstrukcijas, kas pārvar šo R-koku nespēju labi organizēt objektu telpisko
izvietojumu struktūrā, ievietojot objektus jauktā, gadījuma secībā. R*koki balstās uz ierakstu
pārievietošanu (reinsertion), savukārt blīvētie R-koki pārstrādā doto taisnstūru kopu, lai
varētu noteikt labāko objektu ievietošanas secību.
5 .2 . R*K OKS
R*koks ir R-koka variants, kurā realizēti vairāki uzlabojumi klasiskā R-koka objektu
ievietošanas algoritmā. Būtībā šie uzlabojumi ir balstīti uz sekojošu parametru optimizēšanu:
virsotņu pārklāšanās
virsotnes aizņemtais laukums
61
virsotnes direktorija taisnstūra perimetrs
Viens no variantiem, kā panākt ievērojamus uzlabojumus oriģinālajā R-kokā, ir
virsotņu dalīšanas algoritma uzlabošana. Kā tika minēts iepriekš – kad virsotnē ar ietilpību M
notiek pārpilde, ir jāpiesaista jauna diska lapa un M+1 ieraksti ir jāizkārto jau pa divām
virsotnēm. Iespējamo ierakstu izvietojuma kombināciju skaits ir eksponenciāls salīdzinājumā
ar M, tāpēc vienkārša visu kombināciju pārskatīšana labākā stāvokļa meklējumos ir
neracionāla un prasītu daudz resursu.
R-koka dalīšanas algoritms vispirms izveido divas grupas, kurās tiek ievietoti divi
objekti, kas ir vistālāk viens no otra. Pēc tam katrs objekts tiek piesaistīts kādai no grupām.
Savukārt R*kokā dalījums tiek veikts pēc kādas no asīm (piemēram, horizontālās) un tiek
pētītas visas iespējamās objektu izvietojuma kombinācijas virs vai zem noteiktās dalījuma
līnijas.
Šīs metodes priekšrocības demonstrētas attēlā nr. 50., pieņemot, ka M=4 un m=2. R-
koka dalīšanas algoritms izvēlas objektus A un B, kuri sākotnēji tiek ievietoti grupās G1 un
G2. Tā kā A ir daudz lielāks par B, pie nākamo objektu ievietošanas priekšroka tiks dota
objekta A grupai G1. Pēc triju taisnstūru piesaistīšanas grupai G1 atlikušie ieraksti tiek
pievienoti grupai G2, neatkarīgi no to izvietojuma telpā. Šāds dalījums acīmredzami ir
neracionāls.
Attēls 50 – Dalīšanas stratēģijas: (a) virsotnes pārpilde, (b) R-koka dalījums, (c) R*koka dalījums
R*koks šinī situācijā izvēlas x asi un atrod divu virsotņu dalījumu bez direktoriju
pārklāšanās. Lai atrastu labāko asi, var pētīt telpu, dalot to pēc katra objekta augšējās vai
apakšējās malas vērtības. Galu galā tiek izvēlēta tā ass, pēc kuras dalot telpu, tiek iegūts
mazākais S - objektu mbb perimetru summa. Kad ir izvēlēta labākā ass, tiek izvēlēts objektu
dalījums ar mazāko objektu pārklāšanos. Ja eksistē vairāki dalījumi ar vienādu pārklāšanos,
tiek izvēlēts tas, kuram ir mazākais laukums (šos rādītājus var aprēķināt kopā ar S). Labākās
ass izvēles algoritms aprakstīts funkcijā R*treeChooseAxis.
62
A L G O R I T M SR*treeChooseAxis (E: ierakstu kopa)
beginmin-perimetrs = (maksimālā iespējamā vērtība)for each ass a do
šķirot E pēc aS = 0;//Tiek izskatīti visi iespējamie dalījumifor k = 1 to (M-2m+2) do
//Pirmie m+k+1 ieraksti tiek glabāti G1, pārējie – G2
G1 = E[1, m+k-1];G2 = E[m+k, M+1];Mg = perimetrs(mbb(G1)) + perimetrs (mbb(G2))S = S + Mg; //Perimetru summa dotajai asij
end for//Ja S līdz šim ir minimāls, tad a kļūst par labāko asi
if (S < min-perimetrs) thenlabaka_ass = amin-perimetrs = S
end ifend for
return labaka_assend.
Otrs būtisks svarīgs R-koka uzlabojums, ko paredz R*koks, ir objektu uzlabots ievietošanas
algoritms, kurā īstenota uzspiestās pārievietošanas stratēģija. Kā tika parādīts iepriekš,
objektu ievietošanas kārtība var būtiski iespaidot R-koka organizētību. R*koks mēģina
izvairīties no neracionālām objektu izvietojuma situācijām, līdzīgām attēlā nr. 49 redzamajai,
pārievietojot dažus ierakstus, kad notiek virsotnes pārpilde.
Attēlā nr. 51.a. parādīta taisnstūra 8 ievietošana kokā, kas jau apskatīts 49.c attēlā.
Attēls 51 – R*koka pārievietošanas princips: (a) – 8. taisnstūra ievietošana (v tiek pārpildīta), (b) – R-koka dalījums, (c) – R*koka uzspiestā pārievietošana
Virsotne v tiek pārpildīta, un oriģinālā R-koka dalīšanas algoritms izpildīs tikai lokālu
reorganizāciju ar diezgan lielu virsotņu pārklāšanos (att. 51.b). R*koks mēģina izvairīties no
virsotņu dalīšanas, pārievietojot taisnstūrus v virsotnē, kuru dēļ tukšo telpas vietu laukums
virsotnē ir vislielākais. Šinī gadījumā tiek pārievietots taisnstūris 4, un pats pārievietošanas
algoritms ir sekojošs:
63
Dzēst taisnstūri 4 no v;
Izskaitļot jauno v mazāko robežtaisnstūri;
Pārievieto 4, sākot no saknes: ChooseSubtree algoritms saista taisnstūri 4 to
virsotnei u;
Tagad ieraksts 8 var tikt ievietots virsotnē v, un nav nepieciešama virsotņu
dalīšana.
Tā kā virsotnes pārpilde var notikt jebkurā koka līmenī, dzēstais ieraksts jāpārievieto
tanī pašā līmenī, kurā tas sākotnēji tika ievietots. Šī prasība tika uzstādīta jau parastajā R-
koka dzēšanas procedūrā Delete. Pielietojot augstāk aprakstīto algoritmu, jāizvairās no
bezgalīgu ciklu rašanās, pārievietojot ierakstus to sākotnējā virsotnē. Tādējādi, ja tiek fiksēta
otrreizēja virsotnes pārpilde, ievietojot doto taisnstūri, jāveic virsotnes dalīšana.
Pārievietojamie ieraksti tiek izvēlēti sekojoši: tiek izskaitļots attālums d starp šo
ierakstu taisnstūru centriem un virsotnes mbb centru. Ieraksti tiek sakārtoti pēc d lieluma, kur
pirmais ir ar vislielāko d, un no saraksta tiek izvēlēti pirmie p ieraksti. Tiek uzskatīts, ka
labākie rezultāti tiek sasniegti, kad tiek pārievietoti p = 30% pārpildītās virsotnes ierakstu.
Attēlā nr.52 parādīti gan R-koka, gan R*koka lapu virsotņu dr tai vienai un tai pašai
taisnstūru kopai. Kā redzams, uzlabotais virsotņu dalīšanas algoritms un pārievietošanas
stratēģija ļauj iegūt daudz labāku datu organizētību R*kokā salīdzinājumā ar R-koku.
Attēls 52 – R-koka (a) un R*koka (b) salīdzinājums (Konektikutas štata (ASV) hidrogrāfija)
Jāpiemin, ka gan R-koka, gan R*koka pamatā ir viena un tā pati datu struktūra,
tādējādi arī datu izguves operācijas, kas definētas oriģinālajam R-kokam ir derīgas arī
R*kokam. Tomēr uzlaboto algoritmu dēļ R*kokā šo operāciju izpilde notiek efektīvāk.
64
5 .3 . R-K OKA BLĪ VĒŠ A N A
Apskatītie algoritmi, kas paredz objektu ievietošanu R-kokā (vai R*kokā), ir
dinamiski, jo tie ļauj objektu ievietošanu un dzēšanu jau eksistējošā kokā. Tomēr, attīstoties
struktūrai laikā, nav iespējams optimizēt telpas izlietojumu, tāpēc ar laiku iespējama
veiktspējas samazināšanās.
Statiskā gadījumā, kad taisnstūru kopa ir nemainīga laikā, iespējams apstrādāt datus
pirms to ievietošanas R-kokā. R-kokam ir izstrādāti vairāki šādi – blīvēšanas algoritmi.
Blīvēšanas princips vislabāk parādāms ar B-koka palīdzību. Ja indeksējamā datu kopa ir
zināma, datu šķirošanu un indeksa būvēšanu var veikt apgrieztā kārtībā. Vispirms secīgi tiek
aizpildītas koka lapu virsotnes. Pirmie M ieraksti tiek ievietoti pirmajā lapā, nākošie M –
otrajā, u.t.t. Kad lapu līmenis ir izveidots, darbība tiek rekursīvi pildīta nākamajam līmenim
uz augšu. Šādā veidā tiek iegūts B-koks ar aptuveni 100% telpas izlietojumu.
R-koka gadījumā datu apstrādes fāzē taisnstūri jāšķiro pēc to atrašanās vietas telpā.
Šo darbību veic tā saucamais STR (Sort-Tile-Recursive) algoritms. Ja datu kopas izmērs ir N,
minimālais neieciešamais koka lapu skaits ir P = (N / M), kur M – virsotnes ietilpība.
Algoritma mērķis ir kārtot koka lapas pēc dambretes galdiņa principa ar horizontālām un
vertikālām slejām, turklāt gan horizontālo, gan vertikālo sleju daudzumam jābūt vienādam ar
.
Vispirms tiek šķiroti taisnstūri pēc to centru x koordinātes un šis iegūtais kārtotais
saraksts tiek dalīts grupās, kas definē vertikālās slejas. Pēc tam katras slejas taisnstūri
tiek kārtoti pēc to centru y koordinātes un dalīti grupās par M ierakstiem, tādā veidā nosakot
ierakstu piederību koka lapām blīvētajā R-kokā. Visbeidzot tiek ņemta dr kopa un rekursīvi
būvēts koks līmeni pa līmenim. Blīvētā R-koka organizācija slejās salīdzinājumā ar parasto
R-koku parādīta attēlā nr. 53., kas attēlo Konenktikutas štata hidrogrāfijas datu kopu.
Attēls 53 – R-koks (a) un STR blīvētais R-koks (b)
65
Visas lapas, izņemot pēdējo vertikālajā slejā, ir pilnīgi aizpildītas, tā maksimizējot telpas
lietderīgu izmantošanu. Protams, ja nepieciešama secīga, dinamiska objektu ievietošana šādā
struktūrā, būs nepieciešama virsotņu dalīšana, kas notiks līdz pat augšējam koka līmenim,
tāpēc ieteicamais telpas izlietojums ir mazāks par 100%.
Neskatoties uz optimizētu konstrukciju, virsotņu pārklāšanās problēma nav novērsta
pilnībā. Attēlā nr.53 skaidri saskatāms situācijas uzlabojums, taču arī pēc koka blīvēšanas ir
taisnstūri, kas pārklājas. Taisnstūru pārklāšanos R-kokā pilnīgi likvidē tā vēl viens variants –
R+koks.
5 .4 . R+ KO KS
R+kokā direktoriju taisnstūri vienā virsotņu līmenī nepārklājas. Šādas struktūras
organizācijas gadījumā krietni tiek paaugstināta vaicājumu izpildes efektivitāte. Ja līdz šim
noskaidrot ievades/izvades operāciju skaitu punkta vaicājumam bija diezgan sarežģīti, tad
R+kokā tas ir atkarīgs tikai no koka dziļuma.
R+koks tiek definēts sekojoši:
Ja koka sakne vienlaicīgi nav arī lapa, tanī ir vismaz 2 ieraksti;
Viena līmeņa virsotņu direktoriju taisnstūri nevar pārklāties;
Ja virsotne N nav lapa, tās dr ietver visus apakškoka, kura sakne ir N, taisnstūrus;
Indeksējamais taisnstūris tiek piekārtots visām koka lapu virsotnēm, kuru direktoriju
taisnstūri to pārklāj. Taisnstūri, kas ir piekārtots koka lapas virsotnei N, tās direktorija
taisnstūris vai nu pārklāj, vai ietver. Šāda objektu dublēšanās blakus virsotnēs ir
līdzīga tai, kas raksturīga uz telpu orientētām struktūrām.
Attēlā nr. 54 parādīta R+koka struktūra. Objekti 8 un 12 tiek fiksēti divās virsotnēs, jo
objektu 8 pārklāj koka lapas p un r, savukārt objektu 12 – p un q. Taču jāpiezīmē, ka gan
lapu līmeņa, gan iekšējo virsotņu direktorija taisnstūri nepārklājas.
66
Attēls 54 – R+koks
R+koka virsotnes struktūra ir tāda pati kā R-kokam, tomēr pats R+koks var būt stipri
lielāks par R-koku tai pašai datu kopai, jo nav iespējams garantēt, ka tiks apmierināts m –
mazākā ierakstu skaita virsotnē nosacījums. Tāpat koka izmēru palielina dublējošos
taisnstūru esamība.
Koka konstruēšanas un uzturēšanas process R+kokam ir sarežģītāks nekā citiem R-
koka variantiem. Īsumā R+koka dinamiska objektu ievietošana ir sekojoša: Katrā koka līmenī
taisnstūris tiek ievietots visās virsotnēs, kuru dr to pārklāj. Lai viena līmeņa direktoriju
taisnstūri nepārklātos, R+kokā izmanto griešanu (clipping). Kad telpā ievietojamo taisnstūri
pārklāj vairāki dr {r1, r2,...rn}, R tiek dalīts tik sīkākos taisnstūros, cik dr to pārklāj. Tad šos
iegūtos taisnstūrus rekursīvi ievieto kokā attiecīgajos ri, kas viennozīmīgi noved pie viena un
tā paša objekta glabāšanas vairākās koka lapās. Piemēram, attēlā nr. 55.a R jāievieto
apakškokos, kuru saknes ir r1 un r2.
Ja neviens ri kopas taisnstūris pilnībā neietver ievietojamo R, kāds no direktoriju
taisnstūriem jāpalielina. Līdzīga darbība tika veikta R-koka ievietošanas algoritmā
(AdjustPath procedūra), ar atšķirību, ka šeit jāparūpējas par to, lai nevienas virsotnes dr
nepārklātos. Diemžēl ne vienmēr var panākt vēlamo rezultātu. Piemēram, attēlā 55.b nevienu
no direktoriju taisnstūriem r1, r2, r3 un r4 nav iespējams palielināt, neizraisot pārklāšanos,
tāpēc šādā situācijā jāveic pārievietošanas procedūra.
Attēls 55 – R+koka operācijas: griešana (a), strupceļš (b), lejupejošā dalīšana (c).
67
Kad R+koka virsotnē notiek pārpilde, tā ir jādala. Arī šī procedūra ir līdzīga
tradicionālajai R-koka virsotnes dalīšanai, taču šeit, izvairoties no dr pārklāšanās, jāpilda
lejupejošā dalīšana. Attēlā 55.c aprakstītajā piemērā jādala virsotne A, taču dalījuma rezultātā
jādala arī A pēcteči B un C. Lai arī tiek iegūts R+koks, kurā viena līmeņa direktoriju
taisnstūri nepārklājas, šāds dalījums sarežģī algoritmus un pasliktina telpas izlietojumu.
Kā jau tika minēts, izmantojot šo struktūru, uzlabojas punkta vaicājumu izpilde uz
nepārklājošos virsotņu rēķina. Šāda vaicājuma rezultāts tiek atrasts noejot no saknes līdz
attiecīgajai lapas virsotnei pa vienu ceļu, tādā veidā pārmeklējot mazāk virsotņu nekā R-
kokā. Savukārt loga vaicājumu efektivitātes uzlabošanās nav tik acīmredzama.
5 .5 . IZM AK SU MO DEĻI
R-koki pieder populārākajām un biežāk izmantotajām indeksēšanas struktūrām
telpiskajās datu bāzēs. Tā kā eksistē vairāki tā veidi, daži no tiem apskatīti iepriekšējās
nodaļās, aktuāls ir jautājums: kuru no tiem izmantot, lai iegūtu augstākos efektivitātes
rādītājus? Šo R-koka variantu salīdzināšanai izmanto izmaksu modeļus (cost models).
Izmaksu modeļi ļauj paredzēt operācijas izpildes efektivitāti. Operācija tiek uzdota kā
funkcija ar telpisko datu bāzu fiziskajiem parametriem (indeksu izmērs, ieraksta izmērs
u.t.t.).
Vienkārša izmaksu modeļa - R-koka operāciju efektivitātes noteikšanas
demonstrācijai tiek pieņemts, ka R-kokam R ir virsotne Ni ar direktorija taisnstūri Ni.dr ar
izmēru (si,x, si,y). Izpildot punkta vaicājumus R-kokā R, varbūtība, ka meklējamais punkts
atradīsies virsotnē Ni ir
PQ(Ni) = si,x * si,y
Citiem vārdiem – šī varbūtība ir Ni.dr laukuma un telpas laukuma (šinī gadījumā
pieņemta par 1) attiecība. Iespējams arī aprēķināt apmeklēto R-koka virsotņu skaitu, pildot
punkta vaicājumu. Tā kā apmeklētas tiek virsotnes, kuru dr satur punkta argumentu,
apmeklēto virsotņu skaits var tikt izteikts sekojoši:
,
kur n apzīmē virsotņu skaitu kokā R. 68
5 .6 . UZ D A TIEM BALS TĪ TO S TR UK TŪR U SA LĪ DZI N ĀJU MS
Uz datiem balstītās struktūras tiks salīdzinātas līdzīgi kā tas tika darīts ar telpas
balstītajām struktūrām nodaļā 3.4. Tiks izmantota tā pati objektu kopa (att. nr. 35), jeb
konkrētāk šo objektu mbb aproksimizācijas (att. nr. 36). Tā kā 4. nodaļā tika apskatītas
struktūras, kas ir R-koka dažādi varianti, šajos piemēros tiek noteikts mazākais iespējamais
ierakstu daudzums virsotnē m=2. Maksimālā virsotnes ietilpība M = 4, tātad ievietojot
virsotnē piekto objektu, notiek pārpilde un jāveic virsotnes dalīšana.
Pēc uzdevuma nosacījumiem, ievietojot telpā pirmos četrus objektus un indeksējot ar
oriģinālo R-koku, tie visi tiek ievietoti vienā diska lapā, un R-kokam ir tikai viena virsotne,
kas vienlaicīgi ir gan sakne, gan koka lapa (att.nr. 57).
Attēls 57 – Objektu 1- 4 ievietošana telpā un atbilstošais R-koks
Ievietojot telpā objektu 5, notiek virsotnes dalīšana. Dotajā piemērā tiek izmantota jau
minētā virsotnes dalīšanas spēka metode, kura izskata visus iespējamos objektu izvietojumus
pa divām virsotnēm un izvēlas to, kurš veido vismazākos dr laukumus. Šo metodi šajā
piemērā izmantoju tāpēc, ka nav tik daudz objektu kombināciju, lai būtu vajadzība pēc kādas
nopietnākas metodes (kvadrātiskā dalījuma, lineārā dalījuma, u.c.) izmantošanas. Tātad
ievietojot objektu 5, ievietošanas algoritms paredz jaunas virsotnes izveidi, un tagad visi 4+1
objekti tiek izkārtoti pa abām virsotnēm tā, lai virsotņu dr būtu minimāli. Rezultātā virsotnē a
paliek objekti 1,2,3, bet virsotnē b – 4 un 5 (att. nr. 58). Atbilstošais R-koks redzams attēla
labajā pusē.
Objekti 6 un 7 tiek ievietoti virsotnē b, jo tādā veidā tiek iegūts vismazākais dr
palielinājums. Kad jāievieto objekts nr. 8, algoritms nosaka, ka tas ir jāievieto virsotnē b,
taču tā jau ir pilna un nepieciešams virsotnes dalījums. Pēc dalīšanas virsotnē b paliek objekti
4, 5, 6, savukārt jaunajā virsotnē c – objekti 7 un 8 (attēls nr. 59). Kā to paredz ievietošanas
algoritms, pēc virsotņu dalīšanas jāatjaunina informācija par dr maiņu visās virsotnēs, kas ir
ceļā no dotās 69
Attēls 58 – Objekta nr.5 ievietošana telpā un atbilstošais R-koks
virsotnes līdz saknei. Šinī gadījumā saknes virsotnē R tiek ievietots jauns ieraksts c, kas
sasaista abas virsotnes.
Attēls 59 – Objektu 6 – 8 ievietošana
Visbeidzot pēc visu 11 objektu ievietošanas telpā, R-koka lapu līmenī ir četras virsotnes
(attēls nr. 60). Visi objekti ir indeksēti un diska lapas ir diezgan racionāli izmantotas
(aptuveni 75% telpas izlietojums). Kā redzams šinī indeksēšanas risinājumā ir pilnīgi izslēgta
objektu ierakstu dublēšanās, jo katrs objekts tiek piesaistīts tikai vienai virsotnei, neatkarīgi
no tā, cik dr to pārklāj. Toties uzreiz pamanāms, ka virsotnēm b un c ir ievērojama dr
pārklāšanās. Šī viena no R-koka negatīvajām īpašībām, kad virsotņu pārklāšanos rada nevis
objektu neizdevīgais stāvoklis telpā, bet gan to ievietošanas secība.
Attēls 60 – Dotās objektu kopas indeksēšana ar R-koku
70
Šinī gadījumā netiek veikta objektu pārievietošana, taču attēlā nr. 61 parādīta šī pati objektu
kopa ar citādā secībā ievietotiem objektiem. Savu atrašanās vietu R-kokā ir mainījuši tikai
objekti 4 un 11, taču, izrēķinot dr starpību abiem objektu izkārtojuma variantiem, pēdējā ir
iegūta 7% vietas ekonomija, kas nozīmē, ka virsotņu dr aprakstīs mazāk tukšo telpas vietu.
Līdz ar to tiek paaugstināta vaicājumu izpildes efektivitāte, attīrīšanas procesā apstrādājot
mazāk „atbirumu”, kas neapšaubāmi darīs sistēmu ātrāku.
Attēls 61– Objektu indeksēšnas ar R-koku pārstrukturizācija
Ja uz telpu balstītajās sistēmās viena no galvenajām problēmām, pret kuras
samazināšanu nemitīgi tiek meklētas jaunas metodes, ir objektu ierakstu dublēšanās, tad uz
datiem balstītajās sistēmās tā ir direktoriju taisnstūru pārklāšanās. Jo lielāka ir dr pārklāšanās
dotajā telpā, jo vairāk resursu jāpatērē, lai darbotos ar indeksētajiem datiem. Eksistē dažādi
dr blīvēšanas algoritmi un metodes, kas indeksējot objektu kopu mēģina panākt pēc iespējas
mazāku pārklāšanos, taču jau aprakstītais R+koks, kas ir oriģinālā R-koka paveids, pilnībā
izslēdz viena līmeņa virsotņu dr pārklāšanos. Tas tiek panākts ar īpašu objektu ievietošanas
algoritmu, kas pie virsotnes dalīšanas nepieciešamības gadījumā simboliski dala arī objektu,
kas atrodas uz dalījuma līnijas. Pēc tam šis objekts tiek aprakstīts abās virsotnēs. Šāds
paņēmiens, protams rada pretēju efektu – objektu ierakstu dublēšanos, taču efektīvāk tiek
veikta pati objektu indeksēšana.
Attēlā nr. 62 parādīta dotās objektu kopas R+koka indeksēšana. Ievietojot telpā 8.
objektu notiek virsotnes b pārpilde un tiek izveidota jauna virsotne c. Lai izvairītos no
pārklāšanās objekts 6 tiek dalīts un tā ieraksti tiek ievietoti gan virsotnē b, gan c, un šī
iemesla pēc objektu 11 var piesaistīt virsotnei d. Atbilstošajā R+kokā tik tiešām ir par vienu
ierakstu vairāk nekā R-kokā, jo objekts nr.6 ir aprakstīts divas reizes.
71
Attēls 62 – Objektu kopas indeksēšana ar R+koku
Kā redzams arī R-koku struktūrām ir savas stiprās un vājās puses, kuras apspriežot
var izsecināt kura struktūra kurā gadījumā būtu visnoderīgākā.
72
6.POPULĀRĀKO DBVS PAPLAŠINĀJUMU DARBAM AR
TELPISKAJIEM DATIEM APSKATS
6 .1 . OR AC LE S PA TI AL
Neskatoties uz to, ka lielākajai daļai datu bāzu vadības sistēmu primārais darba lauks
joprojām ir biznesa dati, to izstrādātāji, izmantojot jau esošās un izstrādājot jaunas iespējas,
cenšas panākt to, lai dotā DBVS varētu strādāt arī ar telpiskajiem datiem. Arī DBVS Oracle,
kas sākumā bija veidota kā relāciju datu bāzu vadības sistēma, ir papildināta ar
paplašinājumu Oracle Spatial, kas spēj darboties ar telpiskajiem datiem, izmantojot jaudīgo
pamatsistēmu Oracle. Lai gan šāda veida DBVS paplašinājumi nevar pilnībā apmierināt visas
tās prasības, kuras izvirza GIS (piemēram mozaīkas/vektoru attēlojumu konvertēšana,
telpiskās analīzes līdzekļi, grafiskā interfeisa izstrāde u.c.), tos ir ērti izmantot vienkāršu
sistēmu izstrādei, darbam ar 2D datiem. Oracle Spatial priekšrocības – paplašinātas datu
bāzes izmēra robežas, augstas kvalitātes vadības funkcijas lielajām datu bāzēm, u.t.t. tiek
mantotas no pašas Oracle sistēmas.
Oracle Spatial piedāvā telpisko datu tipu SDO_GEOMETRY. Oracle standarta SQL
vaicājumu valoda ir paplašināta ar funkcijām un operatoriem darbam ar SDO_GEOMETRY,
kas ļauj izpildīt vaicājumus, kuros iekļauti gan relāciju (aprakstošie), gan telpiskie
(ģeometriju) atribūti. Tāpat Oracle sistēma ir papildināta ar īpašām indeksu struktūrām, kas
paredzētas telpiskajiem datiem.
6.1.1. Telpiskais datu modelis
Tipiskā Oracle Spatial telpisko datu tabulā ir vairāki relāciju atribūti objekta
aprakstošajiem datiem un viens telpiskais atribūts ar tipu MDSYS.SDO_GEOMETRY, kas
apraksta objekta ģeometriju. Šāda tabula apraksta vienu slāni, t.i., viena tipa ģeogrāfisku
objektu kopu. Par piemēru var minēt tabulas Upes izveidi:
Create Table Upes
(upes_kods varchar(10),
upes_nosaukums varchar(64),
upes_garums number(4),
geometrija MDSYS.SDO_GEOMETRY)73
Ģeometrija sastāv vai nu no viena elementa vai arī vairāku elementu sakārtota
saraksta. Elements ir atomāra ģeometrijas sastāvdaļa – punkts, līniju virkne vai daudzstūris.
Sarežģītākas ģeometrijas iespējams veidot kombinējot dotos elementus, piemēram, vairākas
salas var aprakstīt ar sakārtotu daudzstūru sarakstu, u.t.t. Elementu saraksts var nebūt
monotons - tas var saturēt arī dažādu tipu elementus.
Līniju virkni apraksta secīgs virsotņu saraksts. Divas blakusesošas virsotnes var tikt
savienotas vai nu ar taisnu līniju, vai ar loku. Līniju virknes, kuru virsotnes ir savienotas ar
taisnu līniju, sauc par lauztu līniju (skat. pirmo nodaļu). Savukārt tādas līniju virknes, kurās
virsotnes tiek savienotas gan ar taisnām, gan lokveida līnijām sauc par jauktām līniju
virknēm.
Objektu ievietošana izveidotajā tabulā Upes notiek ar SQL INSERT vaicājuma
palīdzību, līdzīgi kā tas tiek darīts tradicionālajās objektu-relāciju datu bāzēs:
Insert into Upes
values (‘UDJS743848’, ‘Gauja’, 315, MDSYS.SDO_GEOMETRY(2, null, null,
MDSYS.SDO_ELEM_INFO_ARRAY(1,2,1),
MDSYS.SDO_ORDINATE_ARRAY(2,2,2,3,4,4,5,6)));
MDSYS.SDO_GEOMETRY argumenti apraksta ievietojamo ģeometriju. Pirmais
arguments – 2 norāda elementa tipa identifikatoru, kas nosaka, ka tiks izmantota līniju
virkne. Otrais un trešais arguments ir rezervēti īpašām vajadzībām, savukārt ceturtais
arguments – MDSYS.SDO_ELEM_INFO_ARRAY(1,2,1) ir elementa deskriptora masīvs, kas
nosaka, ka virsotņu koordinātas atrodamas SDO_ORDINATES masīvā, elementa tips ir līniju
virkne (kods 2) un, ka virsotnes tiek savienotas ar taisnām līnijām (kods 1). Pēdējais
arguments MDSYS.SDO_GEOMETRY ir koordinātu vērtību kārtots saraksts, kas apzīmē
virsotnes (2, 2), (2, 3), (4, 4), (5, 6).
6.1.2.Telpiskās operācijas
MDSYS.SDO_GEOMETRY datu tipa uzturētās operācijas var tikt klasificētas divās
grupās:
indeks-jūtīgie operatori (index-aware operators) – Būla funkcijas, kuras
saturošais vaicājums tiek pildīts, balstoties uz telpisko indeksu. Vaicājumu
74
optimizētājs ir informēts par šo operatoru izmantošanas prasībām pret resursiem
un selektivitāti.
citi telpiskie operatori – Vaicājums, kas satur operatoru no šīs grupas, tiek pildīts
rindu pa rindai, tādā veidā pārbaudot katra objekta ģeometriju dotajā tabulā.
Pie indeks-jūtīgo operatoru grupas pieder trīs operatori: SDO_RELATE, SDO_FILTER, un
SDO_WITHIN_DISTANCE, SDO_RELATE, kas pārbauda telpisko objektu topoloģiskās
attiecības. Tā, piemēram, jebkura no attiecībām contains, coveredby, covers, disjoint, equal,
inside, overlap un touch var tikt pārbaudītas, uzdodot to kā SDO_RELATE argumenta maskas
vērtību. Citas, sarežģītākas attiecības var tikt pārbaudītas kombinējot šīs minētās. Pieņemot,
ka eksistē tabula Valstis, var tikt izveidots vaicājums, kas atrod Latvijas robežvalstis:
select v1.nosaukums
from Valstis v1, Valstis v2
where v2.nosaukums = ‘Latvija’
and MDSYS.SDO_RELATE(c1.geometry, c2.geometry, ‘mask = TOUCH’) = ‘TRUE’;
Otrajā telpisko operatoru grupā ietilpst tādi operatori kā
SDO_GEOM.SDO_BUFFER, kas nodrošina kopu operācijas UNION, DIFFERENCE un
INTERSECTION. Tāpat šajā grupā ietilpst SDO_GEOM.AREA, kas aprēķina 2D ģeometrijas
laukumu, SDO_GEOM.LENGTH, kas aprēķina 1D ģeometrijas garumu, u.c.
6.1.3. Telpiskā indeksēšana
Oracle Spatial izmanto telpisko indeksēšanas struktūru – z-kārtošanas koks un divu
soļu vaicājumu izpildes mehānismu (filtrēšanas un attīrīšanas soļi). Oracle Spatial
indeksēšanas mehānismam ir šādas īpašības:
taisnstūrveida telpa tiek dekomponēta 4n fiksēta izmēra šūnās, kas tiek kārtotas
izmantojot, z-kārtošanas variantu –HHkodu, kas atbilst pilnam četrkokam, kam visas
lapu virsotnes ir vienā līmenī.
Oracle Spatial aproksimē telpisko objektu ar mazāko šūnu kopu, kas to pārklāj, kas
būtībā ir rastra dekompozīcija.
Tabulas A indekss ir tabula ar nosaukumu A_SDOINDEX, kurai ir divas kolonnas:
SDO_CODE (šūnas iezīme) un SDO_GID (geometry identifier). Piemēram, attēlā nr. 63
attēlota 3 objektu indeksēšana. Šūnu dalījuma līmenis n = 2.
75
SDO_CODE SDO_GIDc3 814c4 814c5 235c5 355c6 355c7 814c8 814c9 355c10 355
Attēls 63 – Telpiskā indeksēšana ar Oracle Spatial
Oracle Spatial uztur telpas dalīšanu fiksēta lieluma šūnās, kas atbilst tikko apskatītajai
rastra dekompozīcijai, un hibrīdo telpas dalīšanu šūnās, kas izmanto fiksēta un mainīga
lieluma šūnu kombinācijas. Mainīga lieluma šūnas ļauj precīzāk aproksimizēt objektu
ģeometrijas, kas uzlabo selektivitāti. Hibrīdajā dalīšanā šūna jeb dakstiņš tiek sadalīts, ja tas
mijiedarbojas ar objekta ģeometriju. Šūna var tikt dalīta līdz noteiktam izmēram, kuru nosaka
ar SDO_MAXLEVEL.
6 .2 . POS TG RES QL
PostgreSQL sistēma bija viena no pirmajām un ievērojamākajām objekt-relāciju
DBVS, kas nodrošināja telpisko datu apstrādi. Sistēma satur telpisko SQL paplašinājumu,
kas ļauj darboties ar telpiskajiem datiem. Šī sistēma ir plaši izmantota un atzīta par vislabāko
bezmaksas DBVS atvērtā koda programmatūras izstrādātāju lokā.
Sistēma uztur:
visus izplatītākos ģeometriskos tipus;
operācijas šiem tipiem;
paplašinātu SQL sintaksi, kurā integrētas iepriekš minētās operācijas;
Tāpat sistēma telpiskajā indeksēšanā izmanto R-koku, balstītu uz kvadrātiskās
virsotņu dalīšanas algoritmu.
6.2.1. Ģeometriskie tipi un operatori
PostgreSQL uztur šādus ģeometriskos tipus:
Ģeometriskais tips Objekta uzdošana Aprakstspoint (x, y) Punkts plaknēline ((x1, y1), (x2, y2)) Taisna līnija (uzdoti galapunkti)lseg ((x1, y1), (x2, y2)) Līnijas segments (uzdoti galapunkti)box ((x1, y1), (x2, y2)) Taisnstūris
76
path ((x1, y1), ...) Slēgta lauzta līnija path [(x1, y1), ...] Lauzta līnijapolygon ((x1, y1), ...) Daudzstūriscircle <(x, y), r> Aplis (uzdotas centra koordinātes un rādiuss)
Tabula 1 – PostgreSQL ģeometriskie tipi
PostgreSQL izmanto visus pamata ģeometriskos tipus, kādi tiek izmantoti arī citās sistēmās
(tabula nr.1). PostgreSQL izšķir slēgtas un atvērtas lauztas līnijas. Slēgto līniju virsotņu
koordinātes tiek uzdotas apaļajās iekavas, savukārt atvērtās – kvadrātiekavās. Slēgtā līnijā
pēdējais punkts tiek savienots ar pirmo. Objektu veidošana tiek realizēta pēc shēmas ‘(Datu
uzdošana)’::tips. Piemēram ievadot ‘((0,0), (1,1))’::box tiek veidots taisnstūris ar
attiecīgajām koordinātēm.
Tabulā nr.2 minēti daži no PostgreSQL telpiskajiem operatoriem. Daži no
operatoriem ir polimorfiski, t.i. tos var pielietot dažādiem datu tipiem. Piemēram operatora
contain pirmais arguments ir punkts, bet otrs – jebkurš ģeometriskais tips (daudzstūris, aplis,
līnija, u.c.). Šādā gadījumā ģeometriskā tipa apzīmēšanai tiek lietots vārds geom.
Operators Apraksts Pielietojums# Aprēķina divu segmentu krustpunktu lseg * lseg point # Daudzstūra virsotņu skaits polygon integer&& Pārbauda, vai daudzstūri pārklājas polygon * polygon bool<< Vai pa kreisi? Pārbauda vai pirmā argumenta tālākais
labais punkts ir pa kreisi no otrā argumenta galējā kreisā punkta
geom<<geom
>> Vai pa labi? geom>>geom<^ Vai zem? geom<^geom>^ Vai virs geom>^geom
Tabula 2 – PostgreSQL telpiskie operatori
Tāpat eksistē funkcijas, kas veic dažādus aprēķinu telpiskajiem objektiem. To skaitā ir area,
length un citas.
6.2.2. Datu bāzes veidošana
Datu bāzes veidošana notiek līdzīgi kā tas tika darīts Oracle Spatial vidē – ar SQL kodu. Jau
apskatītā piemēra par upēm tabulas veidošana ir sekojoša:
Create Table Upes (
upes_kods varchar(10),
upes_nosaukums varchar(64),77
upes_garums integer,
geometry path,
PRIMARY KEY (upes_kods));
Lai efektīvi varētu pildīt telpiskos vaicājumus, jāveido uz R-koku balstīts indekss:
Create Index RtrUpes On Upes using RTREE (geometry);
6.2.3. Vaicājumu izpilde
Datu ievietošana tabulās arī notiek ar SQL insert vaicājuma palīdzību. Sekojošais
piemērs parāda, kā tiek ievietoti upes „Gauja” dati PostgreSQL datu bāzē.
Insert Into Upes (upes_kods, upes_nosaukums, upes_garums, geometrija)
Values (‘4736235121’, ‘Gauja’, ‘((2, 2), (2, 3), (4, 5), (5, 5))’);
Šādi vaicājumi tiek ievietoti interaktīvajā PostreSQL SQL monitora logā. Tāpat tie var tikt
iekļauti kādā no programmēšanas valodām. SQL monitorā sistēmas gatavību pieņemt datus
apliecina ar vārdu TelpiskaDB -> katras rindas sākumā (vaicājuma sākumā TelpiskaDB =>),
kur TelpiskaDB ir datu bāzes vārds.
Vaicājumu sintakse ir līdzīga tradicionālajai SQL sintaksei, kurā tika demonstrēti
piemēri šinī darbā gan pirmajā nodaļā, aprakstot telpisko datu pamatus, gan nodaļā 6.1.2., kas
demonstrē Oracle vaicājumu izpildi. Tā piemēram, vaicājuma „Kādas ir Latvijas
robežvalstis?” var pierakstīt sekojoši: TelpiskaDB=> select v1.nosaukums
TelpiskaDB-> from Valstis v1, Valstis v2
TelpiskaDB-> where v2.nosaukums = ‘Latvija’
TelpiskaDB-> and area(v1.geometrija) < area(v2.geometrija);
Tomēr ir vaicājumu tipi, kurus ar PostgreSQL nevar izpildīt. Tā piemēram sistēmā
nav iekļauti topoloģiskie operatori (tādi kā robežošanās, u.c.). Protams, iespējams manuāli
izveidot atbilstošas funkcijas, taču tas padara telpisko datu apstrādi sarežģītu.
78
SECINĀJUMI
Darba tematika par GIS un telpiskajiem datiem manu uzmanību piesaistīja jau tūlīt
pēc bakalaura darbu tēmu publicēšanas. Šī no nozare man bija pilnīgi sveša, bet tanī pašā
laikā ļoti saistoša. Tā bija iespēja dziļāk iepazīties ar datorzinātnes (manas patreizējās
specialitātes) un ģeogrāfijas (viena no mīļākajiem priekšmetiem skolas gados) apvienošanos
mūsdienās. Izrādās, ka šīs abas zinātnes atradušas „kopīgu valodu”, un jau šobrīd savā sfērā
tās ir nedalāmas.
Iepazīšanās ar literatūru sākumā, interesanti bija pētīt GIS pielietojuma iespējas,
veidu, kā reālās pasaules objekti, kuriem bez aprakstošajiem atribūtiem ir arī telpiskā
komponente, tiek aprakstīti datoram saprotamā veidā. Pārsteidza fakts, ka mūsdienīgās
DBVS spēj darboties ar šādiem – telpiskiem datiem gandrīz tik pat vienkārši, un uz tādu pašu
loģiku balstītiem principiem, kā jau ierastajās relāciju un relāciju-objektu datu bāzēs.
Vaicājumu izpilde notiek ar gandrīz identisku SQL sintaksi, papildinātu ar telpiskajām
operācijām.
Sīkāku tematikas izvēli – telpisko datu glabāšanu un to pieejas metožu pētīšanu
ieteica bakalaura darba vadītājs, un es to pilnīgi atbalstīju. Daļējs iemesls šai izvēlei bija
sākotnējā neizpratne par šo problēmu, jo telpiskajos datos nebija iespējams pielietot tās
metodes, kas plaši tiek izmantotas relāciju datos. Šo uzdevumu veikšanai nepieciešamas citas
- jaunas un papildinātas metodes, kuras arī nolēmu pētīt sīkāk. Iepazinos gan ar lineārajām
struktūrām, kad telpiskie divdimensiju dati tiek pārvērsti lineārā – viendimensionālā formā,
gan ar dažādu koku struktūrām. Neapšaubāmi, šis darbs nostiprināja arī zināšanas tādās
disciplīnās kā „Datu struktūras” un „Diskrētās struktūras datorzinātnē”, jo liela uzmanība tika
pievērsta jau minētajai koka struktūrai un tās variantiem.
Daraba izstrādes laikā secināju, ka, izmantojot uz telpu balstītās struktūras telpisko
datu indeksēšanā, vairākumā gadījumu nākas sastapties ar lieku objektu ierakstu dublēšanos
struktūrā, kas neapšaubāmi samazina vaicājumu izpildes efektivitāti. Fiksētajā režģī tiek
piesaistītas tik diska lapas, cik ir šūnu. Šāds risinājums ir neefektīvs, jo nelietderīgi tiek
izmantota diska atmiņa apgabalos, kur objektu nav. Turpretim apgabalos, kur objektu
sablīvējums ir liels veidojas pārplūdes lapu ķēdītes, kas arī samazina sistēmas efektivitāti.
Režģa faila struktūra ir „taupīgāka” ar resusiem, jo izmanto īpašu diska lapu piešķiršanas
mehānismu, taču objektu dublēšanās netiek novērsta. Lineārajā četrkokā ar īpašu metožu
palīdzību (z-kārtošanas, Džilberta līknes) 2-dimensionālā telpa tiek pārveidota lineārā 79
(viendimensionālā) tā, ka telpā tuvu esoši objekti visticamāk atradīsies tuvu arī lineārajā
struktūrā. Četrkoks apraksta telpas dalījumu kvadrantos, un par indeksēšanas struktūru tiek
izmantots B+koks. Z-kārtošanas koks ir vienīgā struktūra no apskatītajām, kas indeksē pašas
objektu ģeometrijas nevis to aproksimizācijas. Viens no Z-kārtošanas koka variantiem paredz
arī indeksēšanas risinājumu bez objektu ierakastu dublēšanās, taču nereti kā blakusefekts
vaicājumu izpildē ir lieku objektu atgriešana, kas jāapstrādā attīrīšanas solī.
Darbā apskatītās uz datiem orientētās struktūras (R-koks un tā paveidi) ļauj izvairīties
no objektu ierakstu dublēšanās, jo tiek izmantoti direktoriju taisnstūri, kas ir mbb virsotnes
pēcteču taisnstūriem. Oriģinālā R-koka efektivitāti samazina šo direktorija taisnstūru
pārklāšanās un jaunu objektu ievietošanas nevēlama secība. R*koks ar īpašu virsotņu
dalīšanas un objektu pārievietošanas algoritmu palīdzību šos trūkumus minimizē. Vēl viens
R-koka variants ir R+koks, kas izmantojot apgriešanu (clipping) pilnīgi izslēdz direktorija
taisnstūru pārklāšanos, taču tādā veidā atkal aktivizē objektu ierakstu dublēšanās problēmu.
Darba izstrādes nobeigumā tika veikts neliels ieskats populārākajās TDBVS, kas deva
arī praktisku priekšstatu par to, kā darbā apskatītie principi tiek pielietoti reālajā dzīvē.
Uzskatu, ka šis darbs man ir devis daudz jaunu zināšanu sfērā, kuru iepriekš
nepārzināju. Ceru, ka jauniegūtās zināšanas varēšu pielietot jau nākamajā gadā, studējot
maģistrantūrā. Kopumā esmu apmierināts ar paveikto, jo, neskatoties uz lielo ieguldīto darbu,
tas nepaspēja apnikt, un bija interesants.
80
VĀRDNĪCA
cell šūna - telpas dalījuma mazākā vienība
clipping apgriešana – metode, kuru izmanto R+kokā, lai izvairītos no
dr pārklāšanās
cost models izmaksu modeļi
dead space tukšās vietas telpā, kur neatrodas objekti
directory direktorijs – masīvs, kas satur norādes uz atbilstošajām diska
lapām
directory rectangle direktorija taisnstūris
disk access fiziska griešanās pie diska
disk page overflow diska lapas pārpilde –situācija, kad ievietojot objektu diska
lapā, tā jau satur maksimālo skaitu objektu
disk pages diska lapas – noteikta lieluma apgabali uz diska, kuros tiek
glabāti objekti
downward split lejupejošā dalīšana – virsotņu dalīšanas metode R+kokā
group expansion grupas paplašinājums
I/O operations I/O operācijas, ievades/izvades operācijas
minimal bounding box mazākais robežtaisnstūris (mbb) – mazākais taisnstūris, kas
pilnībā ietver doto ģeometrisko objektu
one-page-at-a-time strategy vienas diska lapas apskates stratēģija
overlap nosedz, pārklāj
packing algorithms blīvēšanas algoritmi, kas minimizē koka lapu pārklāšanos
point query punkta vaicājums, kas atgriež objektu kopu, kuras objekti
satur uzdotās punktakoordinātes
quadrant label kvadranta iezīme – unikāla iezīme četrkoka kvadrantu
identificēšanai
quadtree četrkoks
range query diapazona vaicājums
reinsertion pārievietošana – objektu efektīvākas indeksēšanas stratēģija,
kas paredz objektu atkārtotu ievietošanu telpā
root of a tree koka sakne – koka virsotne, kurai nav priekšteču
SAM (spatial access methods) telpisko datu piekļuves metodes
space utilization telpas izlietojums81
to map kartēt, jeb piesaistīt objektus telpas dalījuma struktūrai
tree leaf level koka lapu līmenis
tree leaf koka lapa – virsotne, kurai nav pēcteču
tree node koka virsotne
update atjaunināšana
window query loga vaicājums, kas atgriež objektu kopu, kuras objektus
pārklāj uzdotais loga arguments
refinement step attīrīšanas solis – telpiskā vaicājuma izpildes solis, kurā no
kandidātu kopas tiek atlasīti patiesie rezultāti
grid file režģa fails – uz telpu balstīta indeksēšanas metode
fixed grid fiskētais režģis – uz telpu balstīta indeksēšanas metode
theme slānis – viena veida ģeogrāfisku objektu kopums
82
BIBLIOGRĀFISKAIS SARAKSTS
1. Rigaux P., Scholl M., Voisard A. Spatial Databases with application to GIS - Morgan
Kaufmann Publishers. 2002. – 408 p.
2. Shekhar S., Chawla S. Spatial Databases- A Tour – Prentice Hall. 2003. – 288p
3. Demers M.N. Fundamentals of Geographic Information Systems 2nd edition. – New York:
John Wiley & Sons, Inc., 1999. – 498 p.
4. Longley P.A., Goodchild M.F., Maguire D.J., Rhind D.W. Geographic Information
Systems and Science – John Wiley & Sons. 2002. – 472 p.
5. Oracle 9i Database Online Documentation Release 9.0.1.
6. Database Laboratory: Spatial Access Methods - http://lbdwww.epfl.ch/~saglio/EPFL0525/
7. University of Colorado - Department of Computer Science: Spatial Databases and Data
Models - http://www.cs.colorado.edu/~getrich/Classes/csci5817/Term_Papers/kahnh/
8. University of Maryland - Department of Computer Science: R-tree Demo -
http://www.cs.umd.edu/users/brabec/quadtree/rectangles/rtrees.html
9. GIS.com – www.gis.com
10. NonLinear Data Structure – Trees -
http://www.bits-pilani.ac.in/dlp-home/online/studymat/2002_2003/iszc361/resource/
nlineartree.htm
11. National Institute of Standarts and Technology -
http://www.nist.gov/dads/HTML/tree.html
83
top related