88
RĪGAS TEHNISKĀ UNIVERSITĀTE Datorzinātnes un informācijas tehnoloģijas fakultāte Lietišķās datorzinātnes institūts 1.praktiskais darbs mācību priekšmetā “ Specializētās datu bāzes sistēmas” Grafisko datu DB izstrāde Izstrādāja: Artūrs Solomencevs <I DB3 1, 111RDB004> Pārbaudīja:

datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

  • Upload
    hakhanh

  • View
    222

  • Download
    0

Embed Size (px)

Citation preview

Page 1: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

RĪGAS TEHNISKĀ UNIVERSITĀTEDatorzinātnes un informācijas tehnoloģijas fakultāte

Lietišķās datorzinātnes institūts

1.praktiskais darbsmācību priekšmetā

“ Specializētās datu bāzes sistēmas”

Grafisko datu DB izstrāde

Izstrādāja: Artūrs Solomencevs<I DB3 1, 111RDB004>

Pārbaudīja:

2014./15. māc. gads

Page 2: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

SatursUzdevums...................................................................................................................................3

Grafiskās datu bāzes satura veidošana........................................................................................4

1. Slāņu un tabulu definēšana.................................................................................................5

1.1. Datu bāzes struktūra....................................................................................................5

1.2. Tabulu izveidošana.....................................................................................................6

2. Meta-datu norādīšana..........................................................................................................9

2.1. Meta-datu ievade.........................................................................................................9

2.2. Meta-datu pārbaude..................................................................................................10

3. Datu ievade izmantojot komandu INSERT......................................................................12

3.1. Ģeometrisko datu ielāde...........................................................................................12

3.2. Atributīvo datu ielāde...............................................................................................18

4. Datu ielāde izmantojot specializētu datu ievades programmu SQL*Loader....................21

4.1. Ģeometrisko datu ielāde...........................................................................................21

4.2. Atributīvo datu ielāde...............................................................................................25

5. Indeksu ātrdarbības salīdzinājums....................................................................................27

6. Parastu, hibrīda un R-koku indeksu pielietošana..............................................................30

7. Primārā filtra vaicājumi (2)...............................................................................................32

8. Topoloģiju analīzes vaicājumi (4)....................................................................................36

9. Ģeometriju skaitlisko raksturojumu iegūšanas vaicājumi (4)...........................................40

10. Atributīvo datu izgūšanas vaicājumi (3).......................................................................44

11. Ģeometriju ģeometrisko datu iegūšanas vaicājumi (4).................................................46

12. Ģeometriskās datu bāzes ģeometriju vizualizēšana izmantojot kādu no komerciālām

grafisko datu vizualizācijas paketēm........................................................................................48

13. Ģeometrisko datu vizualizēšana izmantojot programmēšanas valodu Java un tās

bibliotēkas.................................................................................................................................51

14. Ģeometriskās datu bāzes izgūšanas vaicājumu rezultātu vizualizēšana.......................53

Secinājumi.................................................................................................................................56

Pielikumi...................................................................................................................................58

14.1. Java programmas kods..............................................................................................58

14.2. C++ programmas dažu .dat failu izveidošanai..........................................................65

14.2.1. Programma faila koka_info_data.dat ģenerācijai.............................................65

14.2.2. Programma, kas palīdz izveidot failu KOKI_dati.dat.......................................66

2

Page 3: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

Uzdevums

1) Jāizveido vismaz 4 ģeometrisko datu slāņi ar ģeometriskajiem un atributīvajiem

datiem. Katru slāni veido pamat-tabula ar ģeometriskiem datiem un papildus tabulas ar

atributīviem datiem.

2) Pirms datu ievades jānorāda ģeometriju meta-dati – koordināšu minimālās un

maksimālās vērtības, kā arī precizitāte.

3) Gan atributīvo, gan ģeometrisko datu ielāde jāveic izmantojot SQL komandu

INSERT;

4) Gan atributīvo, gan ģeometrisko datu ielāde jāveic izmantojot specializētu datu

ievades programmu (Oracle DB gadījumā ar SQL*Loader).

5) Jāveic indeksu ātrdarbības salīdzinājums.

6) Jāpielieto parastie, hibrīda un R-koku indeksi.

Ģeometriju datu bāzes pārbaudei jādefinē un jārealizē dažādas sarežģītības pakāpes datu

izgūšanas vaicājumi:

7) primārā filtra vaicājumi (2);

8) topoloģiju analīzes vaicājumi (4);

9) ģeometriju skaitlisko raksturojumu iegūšanas vaicājumi (4);

10) atributīvo datu izgūšanas vaicājumi (3);

11) ģeometriju ģeometrisko datu iegūšanas vaicājumi (4)).

12) Jāveic ģeometriskās datu bāzes ģeometriju vizualizēšana izmantojot kādu no

komerciālām grafisko datu vizualizācijas paketēm (Oracle Map Viewer, Spatial Console vai

cita). Jāizpēta tās iespējas.

13) Jāveic ģeometrisko datu vizualizēšana izmantojot programmēšanas valodu Java un

tās bibliotēkas;

14) Jāveic ģeometriskās datu bāzes izgūšanas vaicājumu rezultātu vizualizēšana.

* 5. un 6. uzdevums ir apmainīti ar vietām.

*13. un 14. uzdevums ir apmainīti ar vietām, jo vaicājumu rezultātu vizualizēšana arī

tiek realizēta ar Java un tās bibliotēku palīdzību.

3

Page 4: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

Grafiskās datu bāzes satura veidošana

Grafiskajā datu bāze tiks attēlots neliels pilsētas rajons.

Rajona shēma

Shēmā tiek attēlotas mājas, veikali, ezers, tilts, autoceļi, gājēju ceļi un koki. Tālāk darbā

tiek mēģināts pārnest informāciju, no shēmas uz grafisko datu bāzi.

4

Page 5: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

1. Slāņu un tabulu definēšana

Iepriekšējā nodaļā apskatītā attēla objektus iespējams iedalīt astoņās grupās jeb slāņos:

Ezeru slānis;

Kanālu slānis;

Tiltu slānis;

Gājēju ceļu slānis;

Māju slānis;

Veikalu slānis;

Koku slānis;

Autoceļu slānis.

1.1. Datu bāzes struktūra

Katram slānim datu bāzē atbilst viena pamat-tabula ar ģeometriskiem datiem. Dažām

pamat-tabulām papildus nāk tabulas ar atributīviem datiem. Datu bāzes struktūru ir iespējams

apskatīt attēlā:

Datu bāzes struktūra

Attēla augšējā pusē ir astoņas pamat-tabulas, un apakšējā - tabulas ar atributīviem

datiem.

Attiecības starp tabulām:

Starp tabulām VEIKALI un MAZIE_VEIKALI pastāv 1:N attiecība, jo lielāks

veikals var ietvert vairākus mazus veikaliņus.

5

Page 6: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

Pārējās attiecības starp tabulām ir 1:1 attiecības. Ieraksti tabulās ar atributīviem

datiem apraksta objektu, par kuru ir izveidots ieraksts pamat-tabulā, tātad, dod

paplašināto informāciju.

1.2. Tabulu izveidošana

Tabula EZERI:

Create table EZERI( Ezera_ID NUMBER(10, 0) Constraint pk_ezeri primary key, Geometrija MDSYS.SDO_GEOMETRY, Nosaukums VARCHAR2(30));

Rezultāts:

Tabula KANALI:

Create table KANALI( Tilta_ID NUMBER(10, 0) Constraint pk_tilti primary key, Geometrija MDSYS.SDO_GEOMETRY, Nosaukums VARCHAR2(30));

Tabula TULTI:

Create table TILTI( Tilta_ID NUMBER(10, 0) Constraint pk_tilti primary key, Geometrija MDSYS.SDO_GEOMETRY, Nosaukums VARCHAR2(30));

Tabula GAJEJU_CELI:

Create table GAJEJU_CELI( Gajeju_cela_ID NUMBER(10, 0) Constraint pk_gajeju_celi primary key, Geometrija MDSYS.SDO_GEOMETRY, Nosaukums VARCHAR2(30));

Tabula MAJAS:

Create table MAJAS( Majas_ID NUMBER(10, 0) Constraint pk_majas primary key, Geometrija MDSYS.SDO_GEOMETRY,

6

Page 7: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

Nosaukums VARCHAR2(30));

Tabula VEIKALI:

Create table VEIKALI( Veikala_ID NUMBER(10, 0) Constraint pk_veikali primary key, Geometrija MDSYS.SDO_GEOMETRY, Nosaukums VARCHAR2(30));

Tabula KOKI:

Create table KOKI( Koka_ID NUMBER(10, 0) Constraint pk_koki primary key, Geometrija MDSYS.SDO_GEOMETRY, Nosaukums VARCHAR2(30));

Tabula AUTOCELI:

Create table AUTOCELI( Autocela_ID NUMBER(10, 0) Constraint pk_autoceli primary key, Geometrija MDSYS.SDO_GEOMETRY, Nosaukums VARCHAR2(30));

Rezultāts:

Tabulu ar atributīviem datiem izveidošana:

Tabula MAJAS_INFO:

Create table MAJAS_INFO( INFO_ID NUMBER(10,0) constraint pk_majas_info primary key, Majas_ID NUMBER(10,0) not null constraint fk_mi_majas references

MAJAS(Majas_ID), Numurs NUMBER(4,0),

7

Page 8: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

Stavu_skaits NUMBER(3,0), Dzivoklu_skaits NUMBER(4,0) );

Tabula MAZIE_VEIKALI:

Create table MAZIE_VEIKALI( Maza_Veikala_ID NUMBER(10,0) constraint pk_mazie_veikali primary key, Veikala_ID NUMBER(10,0) not null constraint fk_mv_veikali references

VEIKALI(Veikala_ID), Nosaukums VARCHAR2(30) not null, Specializacija VARCHAR(30) );

Tabula KOKA_INFO:

Create table KOKA_INFO( INFO_ID NUMBER(10,0) constraint pk_koka_info primary key, Koka_ID NUMBER(10,0) not null constraint fk_ki_koki references KOKI(Koka_ID), Garums NUMBER(7,3), Izmers VARCHAR(20) -- var būt ‘mazs’, ‘videjs’ un ‘liels’);

Tabula AUTOCELA_INFO:

Create table AUTOCELA_INFO( INFO_ID NUMBER(10,0) constraint pk_autocela_info primary key, Autocela_ID NUMBER(10,0) not null constraint fk_ai_autoceli references

AUTOCELI(Autocela_ID), Garums NUMBER(10,3), Joslu_skaits NUMBER(2) );

Rezultāts:

8

Page 9: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

2. Meta-datu norādīšana

Kad ir izveidotas visas tabulas, jānorada meta-dati par ģeometrijām. Atbilstošā

informācija tiek ievadīta skatā USER_SDO_GEOM_METADATA.

2.1. Meta-datu ievade

begin Insert Into USER_SDO_GEOM_METADATA(table_name, column_name, diminfo, srid) Values( 'EZERI', -- tabulas nosaukums 'Geometrija', -- kolona ar geometriju, uz kuru attiecinami meta-dati MDSYS.SDO_DIM_ARRAY( MDSYS.SDO_DIM_ELEMENT('X', 0, 50, 0.01), -- (koordinata, min, max, prec.) MDSYS.SDO_DIM_ELEMENT('Y', 0, 30, 0.01) ), NULL -- SRID ir rezervets izmantosanai nakotne, tapec = NULL );

Insert Into USER_SDO_GEOM_METADATA(table_name, column_name, diminfo, srid) Values( 'KANALI', 'Geometrija', MDSYS.SDO_DIM_ARRAY( MDSYS.SDO_DIM_ELEMENT('X', 0, 50, 0.01), MDSYS.SDO_DIM_ELEMENT('Y', 0, 30, 0.01) ), NULL );

Insert Into USER_SDO_GEOM_METADATA(table_name, column_name, diminfo, srid) Values( 'TILTI', 'Geometrija', MDSYS.SDO_DIM_ARRAY( MDSYS.SDO_DIM_ELEMENT('X', 0, 50, 0.01), MDSYS.SDO_DIM_ELEMENT('Y', 0, 30, 0.01) ), NULL );

...end;

Output:

9

Page 10: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

2.2. Meta-datu pārbaude

Lai pārbaudītu, vai meta-dati bija veiksmīgi saglabāti, uzrakstīsim vaicājumu:

SELECT TABLE_NAME, Value(B)FROM USER_SDO_GEOM_METADATA A, Table(A.DIMINFO) B;

SQL Developer izvada sekojošu rezultātu:

Tiek izvadīti 16 rindiņas, pa 2 rindiņām katrai tabulai, kā arī vajadzēja būt. Bet gribas

paskatīties, kas atrodas iekšā [MDSYS.SDO_DIM_ELEMENT]. Lai to uzzinātu, ievadam to

pašu vaicājumu Sql*Plus, un saņemam sekojošo rezultātu:

TABLE_NAME--------------------------------VALUE(B)(SDO_DIMNAME, SDO_LB, SDO_UB, SDO_TOLERANCE)--------------------------------------------------------------------------------

AUTOCELISDO_DIM_ELEMENT('X', 0, 50, .01)

AUTOCELISDO_DIM_ELEMENT('Y', 0, 30, .01)

EZERISDO_DIM_ELEMENT('X', 0, 50, .01)

EZERISDO_DIM_ELEMENT('Y', 0, 30, .01)

...

10

Page 11: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

VEIKALISDO_DIM_ELEMENT('X', 0, 50, .01)

VEIKALISDO_DIM_ELEMENT('Y', 0, 30, .01)

Kopā arī tiek izvadītas 16 rindiņas ar skaidri noteiktiem rezultātiem. Tātad tiek secināts,

ka meta-dati bija ievadīti veiksmīgi, un var turpināt strādāt.

11

Page 12: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

3. Datu ievade izmantojot komandu INSERT

Dati par objektiem, kuru nav daudz rajona shēmā, tiek ievadīti ar komandas INSERT

palīdzību:

Māju slānis – 2 objekti;

Veikalu slānis – 2 objekti;

Tiltu slānis – 1 objekts;

Kanālu slānis – 1 objekts;

Autoceļu slānis – 2 objekti.

Ezeru slānis – 1 objekts;

3.1. Ģeometrisko datu ielāde

Datu par mājām ievade:

Insert Into MAJAS VALUES( 1, -- ID (Primary key) MDSYS.SDO_GEOMETRY( 2003, -- SDO_GTYPE – divu dimensiju polygon

NULL, -- SDO_SRID rezervēts izmantošanai nākotnē, tāpēc = NULL NULL, -- SDO_POINT = NULL, jo netiek attēlots viens punkts MDSYS.SDO_ELEM_INFO_ARRAY( 1, -- 1. elements SDO_ORDINATES masīvā 1003, -- daudzstūris... 1 -- ...kura malas ir taisnas ), -- Virsotņu koordinātes (X1,Y1, X2,Y2, ..., X1,Y1) MDSYS.SDO_ORDINATE_ARRAY(2,22, 3,18, 15,20, 14,24, 2,22)

), 'Kreisaja maja');

Insert Into MAJAS VALUES( 2, -- ID (Primary key) MDSYS.SDO_GEOMETRY( 2003, -- SDO_GTYPE – divu dimensiju polygon

NULL, -- SDO_SRID rezervēts izmantošanai nākotnē, tāpēc = NULL NULL, -- SDO_POINT = NULL, jo netiek attēlots viens punkts MDSYS.SDO_ELEM_INFO_ARRAY( 1, -- 1. elements SDO_ORDINATES masīvā 1003, -- daudzstūris... 3 -- ...optimizēts taisnstūris ),

--tikai divas virsotnes, apakšājā-kreisā un augšejā-labejā ir vajadzīgas

12

Page 13: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

MDSYS.SDO_ORDINATE_ARRAY(18,20, 30,24) ), 'Labeja maja');

Ar programmas Oracle Map Builder pārbaudīsim, vai ieraksti bija ievadīti pareizi:

Attēlojums atbilst rajona shēmas daļai, kurā ir attēlotas mājas. Tālāk darbā starprezultāti

tiek iegūti ar Oracle Map Builder programmas palīdzību.

Datu par veikaliem ievade:

Insert Into VEIKALI VALUES( 1, -- ID (Primary key) MDSYS.SDO_GEOMETRY( 2003, -- polygon

NULL, -- SDO_SRID NULL, -- SDO_POINT MDSYS.SDO_ELEM_INFO_ARRAY( 1, -- 1. elements SDO_ORDINATES masīvā 1003, -- daudzstūris... 1 -- ...kura malas ir taisnas ), -- Virsotņu koordinātes (X1,Y1, X2,Y2, ..., X1,Y1) MDSYS.SDO_ORDINATE_ARRAY(36,24, 36,20, 38,20, 38,22, 40,22, 40,20,

43,20, 43,24, 36,24) ), 'Ziemelu veikals');

13

Page 14: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

Insert Into VEIKALI VALUES( 2, -- ID (Primary key) MDSYS.SDO_GEOMETRY( 2003, -- polygon

NULL, -- SDO_SRID NULL, -- SDO_POINT MDSYS.SDO_ELEM_INFO_ARRAY( 1, -- 1. elements SDO_ORDINATES masīvā 1003, -- daudzstūris... 1 -- ...kura malas ir taisnas ),

-- Virsotņu koordinātes (X1,Y1, X2,Y2, ..., X1,Y1) MDSYS.SDO_ORDINATE_ARRAY(24,6.8, 24,3, 31.6,2, 34.8,2, 36,6, 33.4,

10.8, 28,10.8, 24,6.8) ), 'Dienvidu veikals');

Starprezultāts:

Datu par tiltu ievade:

Insert Into TILTI VALUES(

14

Page 15: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

1, -- ID (Primary key) MDSYS.SDO_GEOMETRY( 2003, -- SDO_GTYPE – polygon

NULL, -- SDO_SRID NULL, -- SDO_POINT MDSYS.SDO_ELEM_INFO_ARRAY( 1, -- 1. elements SDO_ORDINATES masīvā 1003, -- daudzstūris... 3 -- ...optimizēts taisnstūris ),

--tikai divas virsotnes, apakšejā-kreisā un augšejā-labejā ir vajadzīgas MDSYS.SDO_ORDINATE_ARRAY(43.4,13, 47.6,15)

), 'Tilts caur kanalu');

Starprezultāts:

Datu par kanālu ievade:

Insert Into KANALI VALUES( 1, -- ID (Primary key) MDSYS.SDO_GEOMETRY( 2002, -- SDO_GTYPE – liniju virkne

NULL, -- SDO_SRID NULL, -- SDO_POINT MDSYS.SDO_ELEM_INFO_ARRAY( 1, -- 1. elements SDO_ORDINATES masīvā 2, -- līniju virkne... 1 -- ..., kura sastav no saistītām taisnām l\inijām

15

Page 16: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

), MDSYS.SDO_ORDINATE_ARRAY(29,14, 49,14)

), 'Kanals');

Starprezultāts:

Datu par autoceļiem ievade:

Insert Into AUTOCELI VALUES( 1, -- ID (Primary key) MDSYS.SDO_GEOMETRY( 2003, -- polygon

NULL, -- SDO_SRID NULL, -- SDO_POINT MDSYS.SDO_ELEM_INFO_ARRAY( 1, -- 1. elements SDO_ORDINATES masīvā 1003, -- daudzstūris... 1 -- ...kura malas ir taisnas ), -- Virsotņu koordinātes (X1,Y1, X2,Y2, ..., X1,Y1) MDSYS.SDO_ORDINATE_ARRAY(1,15.6, 1,1, 3,1, 3,13.8, 15.6,16, 45,16,

45,18, 35,18, 35,25, 34,25, 34,18, 15,18, 1,15.6) ), 'Brivibas iela');

Insert Into AUTOCELI VALUES( 2, -- ID (Primary key) MDSYS.SDO_GEOMETRY(

16

Page 17: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

2003, -- polygon NULL, -- SDO_SRID NULL, -- SDO_POINT MDSYS.SDO_ELEM_INFO_ARRAY( 1, -- 1. elements SDO_ORDINATES masīvā 1003, -- daudzstūris... 1 -- ...kura malas ir taisnas ),

-- Virsotņu koordinātes (X1,Y1, X2,Y2, ..., X1,Y1) MDSYS.SDO_ORDINATE_ARRAY(45,25, 45,11, 42,1, 44,1, 47,11,

47,25, 45,25) ), 'Lielais prospekts');

Starprezultāts:

Datu par ezeru ievade:

Insert Into EZERI VALUES( 1, -- ID (Primary key) MDSYS.SDO_GEOMETRY( 2003, -- polygon

NULL, -- SDO_SRID NULL, -- SDO_POINT MDSYS.SDO_ELEM_INFO_ARRAY( 1, -- 1. elements SDO_ORDINATES masīvā 1003, -- poligons... 2 -- ...kas ir izveidots no saistītiem cirkulāriem lokiem ),

-- Katrs cirkulārs loks ir aprakstīts ar trīm koordinatēm. Loka sākuma koordināte -- ir iepriekšēja loka galpunkts, neskaitot pirmo loku.

17

Page 18: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

MDSYS.SDO_ORDINATE_ARRAY( 12.03,12.34, 7.7,11.4, 4.86,7.95, 5.64,5.02, 7.59,3.91, 9.28,2.14, 10.3,1.67, 11.08,1.5, 12.69,1.79, 14.1,2.1, 15.53,2.27, 16.99,2.75, 18.58,5.28, 19.13,7.42, 20,9.8, 20.85,10.89, 22.23,11.6, 23.62,12.12, 24.98,12.85, 25.88,13.21, 26.47,13.22, 26.97,13, 27.34,13.24, 27.73,13.36, 28.52,13.55, 29,14, 27.9,14.52, 26.64,14.48, 24.34,14.08, 23.16,14.02, 21.85,14.11, 20.6,14.11, 17.78,12.92, 14.99,12.51, 12.03,12.34) ), 'Ezers');

Starprezultāts:

3.2. Atributīvo datu ielāde

Tabulas MAJAS_INFO aizpildīšana:

Insert into MAJAS_INFO Values( 1, -- INFO_ID (primāra atslēga) 1, -- Majas_ID (ārēja atslēga) 27, -- Numurs 5, -- Stavu skaits 38 -- Dzīvokļu skaits );

Insert into MAJAS_INFO Values( 2, -- INFO_ID (primāra atslēga) 2, -- Majas_ID (ārēja atslēga)

18

Page 19: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

25, -- Numurs 5, -- Stavu skaits 57 -- Dzīvokļu skaits );

Pārbaude:

Select A.Nosaukums, B.Numurs, B.Stavu_skaits, B.Dzivoklu_skaitsFrom MAJAS A, MAJAS_INFO BWhere A.Majas_ID = B.Majas_ID;

Viss ir pareizi.

Tabulas AUTOCELA_INFO aizpildīšana:

Insert into AUTOCELA_INFO Values( 1, -- INFO_ID (primāra atslēga) 1, -- Autocela_ID (ārēja atslēga) 3.7, -- Garums 2 -- Joslu skaits);

Insert into AUTOCELA_INFO Values( 2, -- INFO_ID (primāra atslēga) 2, -- Autocela_ID (ārēja atslēga) 20.52, -- Garums 2 -- Joslu skaits);

Pārbaude:

Select A.Nosaukums, B.Garums, B.Joslu_skaitsFrom AUTOCELI A, AUTOCELA_INFO BWhere A.AUTOCELA_ID = B. AUTOCELA_ID;

19

Page 20: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

Viss ir pareizi.

Tabulas MAZIE_VEIKALI aizpildīšana:

begin Insert into MAZIE_VEIKALI Values( 1, -- Maza_Veikala_ID (primāra atslēga) 1, -- Veikala_ID (ārēja atslēga) ‘Meness Aptieka’, -- Nosaukums ‘Aptieka’ -- Specializācija );

Insert into MAZIE_VEIKALI Values(2, 1, ‘Tele2’, ‘Talruni’); Insert into MAZIE_VEIKALI Values(3, 2, ‘Silta kaja’, ‘Apavu veikals’); Insert into MAZIE_VEIKALI Values(4, 2, ‘SportLand’, ‘Sporta apgerbi’); Insert into MAZIE_VEIKALI Values(5, 2, ‘LMT’, ‘Talruni’);end;

Pārbaude:

Select A.Nosaukums, B.Nosaukums as Maza_nos, B.SpecializacijaFrom VEIKALI A, MAZIE_VEIKALI BWhere A.Veikala_ID = B. Veikala_ID;

20

Page 21: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

Pareizi.

21

Page 22: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

4. Datu ielāde izmantojot specializētu datu ievades programmu

SQL*Loader

Ar programmas SQL*Loader palīdzību var ērtāk ielādēt vairākus ierakstus. Tā kā rajona

shēmā ir daudz koku un pietiekami daudz gājēju ceļu, pamat-tabulas GAJEJU_CELI un

KOKI tiek aizpildīti, pielietojot šo lietojumu. Tā arī darīšu ar atributīviem datiem tabulā

KOKA_INFO.

4.1. Ģeometrisko datu ielāde

Tabulas KOKI aizpildīšana:

Faila koki.ctl saturs:load datainfile 'C:\RTU\4_1\Lielas_datu_bazes\1_lab\Loader\koki_data.dat'into table KOKIfields terminated by ',' optionally enclosed by '"'( Koka_ID, Geometrija column object( sdo_gtype constant 2003,

sdo_elem_info varray count (constant 3) (x),sdo_ordinates varray count (constant 6) (y)

), Nosaukums)

Paskaidrojumi:

infile ‘C:\...’ – norāda ceļu uz failu, kura glabājās dati, kurus jāielādē;

optionally enclosed by '"' – vērtībām var pievienot pēdiņas. Ērtāk strādāt ar

simbolu virknēm. Piemēram, varam uzrakstīt koka nosaukumu „ozols”.

sdo_gtype constant 2003 – SDO_GTYPE konstanta vērtība 2003 norāda uz to,

ka visi grafiskie objekti ir poligoni, un nav vajadzīgs to atkārtoti ievadīt.

sdo_elem_info varray count (constant 3) (x) – ar constant 3 tiek noteikts, ka

atribūta SDO_ELEM_INFO aprakstam vienmēr tiek lietota 3 vērtību kopa.

Faila koki_data.dat faila saturs:

1, 1,1003,4, 2,24.5, 2.5,24, 2,23.5, "berzs"2, 1,1003,4, 5,24.5, 5.5,25, 6,24.5, "berzs"3, 1,1003,4, 14.5,24, 15,24.5, 15.5,24, "berzs"4, 1,1003,4, 15,21.5, 15.5,22, 16,21.5, "berzs"

22

Page 23: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

5, 1,1003,4, 16.5,24.2, 17,24.7, 17.5,24.2, "berzs"6, 1,1003,4, 31.5,24, 32,24.5, 32.5,24, "berzs"7, 1,1003,4, 31.5,22, 32,22.5, 32.5,22, "berzs"8, 1,1003,4, 31.5,20, 32,20.5, 32.5,20, "berzs"9, 1,1003,4, 29.5,13, 30,13.5, 30.5,13, "abele"10, 1,1003,4, 31.5,13, 32,13.5, 32.5,13, "abele"11, 1,1003,4, 33.5,13, 34,13.5, 34.5,13, "abele"12, 1,1003,4, 35.5,13, 36,13.5, 36.5,13, "abele"13, 1,1003,4, 37.5,13, 38,13.5, 38.5,13, "abele"14, 1,1003,4, 39.5,13, 40,13.5, 40.5,13, "abele"15, 1,1003,4, 39,8.5, 39.5,9, 40,8.5, "apse"16, 1,1003,4, 41,8.5, 41.5,9, 42,8.5, "apse"17, 1,1003,4, 36,10, 37,11, 38,10, "ozols"18, 1,1003,4, 41,10.5, 42,11.5, 43,10.5, "ozols"19, 1,1003,4, 39,6, 40,7, 41,6, "klava"20, 1,1003,4, 37,2, 38,3, 39,2, "egle"21, 1,1003,4, 5,12.5, 6,13.5, 7,12.5, "ozols"22, 1,1003,4, 4,2, 5,3, 6,2, "klava"23, 1,1003,4, 18,2.5, 19.5,4, 21,2.5, "vecs ozols"

1,1003,4, -- trīs vērtības uzdod SDO_ELEM_INFO atribūta stāvokli. Vērtības noteic, ka ģeometrija ir aplis.

2,24.5, 2.5,24, 2,23.5, -- sešas vērtības pa pāriem uzdod trīs koordinātes, kas ir nepieciešamas, lai noteiktu apļa izvietojumu.

Palaižam Sql*Loader ar sekojošu komandu: SQLLDR userid=system

CONTROL='C:\RTU\4_1\Lielas_datu_bazes\1_lab\Loader\koki.ctl' LOG='C:\RTU\

4_1\Lielas_datu_bazes\1_lab\Loader\sql_gaita' BAD='C:\RTU\4_1\Lielas_datu_bazes\

1_lab\Loader\sql_bad'

CONTROL – komandfails, dotajā gadījumā – koki.ctl;

LOG – žurnāla fails, kurā tiek atspoguļotas visas veiktās darbības;

BAD – fails ierakstiem, kas kalpo par kļūdu cēloņu, vai kas nav piemēroti

formatēti.

Pēc Sql*Loader palaides pārbaudām failu LOG. Faila ir uzrakstīts:

Table KOKI: 23 Rows successfully loaded. 0 Rows not loaded due to data errors. 0 Rows not loaded because all WHEN clauses were failed. 0 Rows not loaded because all fields were null.

Tātad, pēc žurnāla var secināt, ka datu ielāde notika veiksmīgi. Pārbaudīsim ar

vaicājumu:

23

Page 24: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

Select A.Nosaukums, Count (A.Koka_ID) as Ierakstu_skaitsFROM KOKI AGroup by A.Nosaukums;

Tiešām, kopā tabulā ir 23 ieraksti.

Apskatīsim starprezultātu:

„Koki” atrodas tur, kur viņiem jābūt atbilstoši rajona shēmai.

Tabulas GAJEJU_CELI aizpildīšana:

Faila gajeju_celi.ctl saturs:load datainfile 'C:\RTU\4_1\Lielas_datu_bazes\1_lab\Loader\gajeju_celi_data.dat'into table GAJEJU_CELIfields terminated by ',' optionally enclosed by '"'( Gajeju_cela_ID, Geometrija column object( sdo_gtype constant 2002,

24

Page 25: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

sdo_elem_info varray count (constant 3) (x),sdo_ordinates varray TERMINATED BY ':' (y)

), Nosaukums)

Paskaidrojumi:

varray TERMINATED BY ':' (y) –gājēju ceļi sastāv no saistītiem

nogriežņiem. Tā kā nogriežņu skaits ceļiem nav vienāds, nav iespējas izmantot

count (constant x) noteikumu. Tāpēc tiek izmantots terminated by noteikums,

kas pateic programmai SQL*Loader, ka pietiek aizpildīt masīvu (varray).

Faila gajeju_celi_data.dat faila saturs:

1, 1,2,1, 2,17, 1,22, 2,23, 13,25, 33,25, 33,19 : "Celins aiz majam"2, 1,2,1, 2,17, 3,17, 15,19, 34,19 : "Celins gar majam"3, 1,2,1, 16,25, 17,19 : "Celins starp majam"4, 1,2,1, 35,19, 44,19 : "Celins gar maza veikala"5, 1,2,1, 39,19, 39,22 : "Celins uz mazako veikalu"6, 1,2,1, 44,25, 44,18 : "Celins pie mazaka veikala"7, 1,2,1, 44,16, 44,11, 41,1 : "Celins par tiltu"8, 1,2,1, 44,12, 27,12, 22,7, 22,1 : "Celins gar ezeru"9, 1,2,1, 42,4, 35.3,4 : "Celins uz lielako veikalu"10, 1,2,1, 40,12, 38,8, 38,4 : "Celins caur parku"

Faila sql_gaita.txt faila fragments:

Table GAJEJU_CELI: 10 Rows successfully loaded. 0 Rows not loaded due to data errors. 0 Rows not loaded because all WHEN clauses were failed. 0 Rows not loaded because all fields were null.

Select A.Nosaukums, A.Geometrija.SDO_ORDINATESFrom GAJEJU_CELI A;

25

Page 26: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

Gala rezultāts:

Gājēju ceļi atrodas pareizās vietās.

4.2. Atributīvo datu ielāde

Tabulas KOKA_INFO aizpildīšana:

Faila koka_info.ctl saturs:load datainfile 'C:\RTU\4_1\Lielas_datu_bazes\1_lab\Loader\koka_info_data.dat'into table KOKA_INFOfields terminated by ',' optionally enclosed by '"'( INFO_ID, Koka_ID, Garums, Izmers)

26

Page 27: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

Faila koka_info_data.dat saturs:

1, 1, 11.9, "liels"2, 2, 8.49, "mazs"3, 3, 5.44, "videjs"4, 4, 14.59, "videjs"5, 5, 6.18, "mazs"6, 6, 11.3, "liels"7, 7, 26.22, "mazs"8, 8, 5.39, "liels"9, 9, 9.29, "liels"10, 10, 5.6, "liels"11, 11, 13.23, "mazs"12, 12, 7.27, "videjs"13, 13, 23.7, "mazs"14, 14, 17.66, "liels"15, 15, 13.07, "liels"16, 16, 5.56, "videjs"17, 17, 12.51, "mazs"18, 18, 29.95, "videjs"19, 19, 17.96, "liels"20, 20, 21.23, "liels"21, 21, 28.98, "mazs"22, 22, 25.48, "videjs"23, 23, 15.1, "videjs"

Select A.Koka_ID, A.Nosaukums, B.Garums, B.IzmersFrom KOKI A, KOKA_INFO BWHERE A.Koka_ID = B.Koka_ID AND B.Garums > 15.0;

Dati bija veiksmīgi ielādēti.

27

Page 28: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

5. Indeksu ātrdarbības salīdzinājums

Tiek salīdzināti trīs indeksu veidu: fiksēti, hibrīdi un r-koka.

Jāizveido pietiekami sarežģīts pieprasījums, kura izpildei datoram vajadzēs patērēt

jūtamo laiku. Tas ir vajadzīgs, lai paaugstinātu salīdzināšanas objektivitāti. Jāņem vērā, ka

dators paralēli izpilda citus uzdevumus, un tas var palēnināt vaicājuma izpildi vienā gadījumā

un neietekmēt – otrā. Tāpēc jo vairāk pūļu prasīs vaicājuma izpilde – jo labāk. Turklāt vienu

indeksa veidu testēšu 5 reizes.

Vaicājums:

Select Count(A.Koka_ID)From KOKI A, GAJEJU_CELI BWhere SDO_FILTER(A.Geometrija, B.Geometrija) = 'TRUE' -- Operators noteic, vai divas ģeometrijas, kuras kaut kādā veidā ir saistītāsUNION ALLSelect Count(A.Koka_ID)From KOKI A, GAJEJU_CELI BWhere SDO_RELATE(A.Geometrija, B.Geometrija, 'mask=TOUCH') = 'TRUE' -- Operators noteic, vai divas ģeometrijas pieskaras viena otraiUNION ALLSelect Count(A.Koka_ID)From KOKI A, GAJEJU_CELI BWhere SDO_WITHIN_DISTANCE(A.Geometrija, B.Geometrija, 'distance=3') =

'TRUE'-- Operators noteic, vai divas ģeometrijas atrodas noteiktā attālumāUNION ALLSelect Count(A.Koka_ID)From KOKI A, GAJEJU_CELI BWhere SDO_CONTAINS(A.Geometrija, B.Geometrija) = 'TRUE'-- Operators noteic, vai A.Geometrija satur B.GeometrijuUNION ALLUNION ALLSelect Count(A.Koka_ID)From KOKI A, GAJEJU_CELI BWhere SDO_COVERS(A.Geometrija, B.Geometrija) = 'TRUE'-- Operators noteic, vai A.Geometrija aizsega B.GeometrijuUNION ALLSelect Count(A.Koka_ID)From KOKI A, GAJEJU_CELI BWhere SDO_EQUAL(A.Geometrija, B.Geometrija) = 'TRUE'-- Operators noteic, vai A.Geometrija ir ekvivalenta B.GeometrijuUNION ALLSelect Count(A.Koka_ID)From KOKI A, GAJEJU_CELI BWhere SDO_OVERLAPBDYDISJOINT(A.Geometrija, B.Geometrija) = 'TRUE'UNION ALLSelect Count(A.Koka_ID)

28

Page 29: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

From KOKI A, GAJEJU_CELI BWhere SDO_OVERLAPBDYINTERSECT(A.Geometrija, B.Geometrija) = 'TRUE'UNION ALLSelect Count(A.Koka_ID)From KOKI A, GAJEJU_CELI BWhere SDO_OVERLAPS(A.Geometrija, B.Geometrija) = 'TRUE';

Indeksu izveidošana tabulām KOKI un GAJEJU_CELI:

--Fiksēti indeksi:Create Index IND_KOKI on KOKI(Geometrija)Indextype is MDSYS.SPATIAL_INDEXPARAMETERS('SDO_LEVEL = 4');

Create Index IND_GAJEJU_CELI on GAJEJU_CELI(Geometrija)Indextype is MDSYS.SPATIAL_INDEXPARAMETERS('SDO_LEVEL = 4');

--Hibrīdie indeksi:Create Index IND_KOKI on KOKI(Geometrija)Indextype is MDSYS.SPATIAL_INDEXPARAMETERS('SDO_LEVEL=4, SDO_NUMTILES=4');

Create Index IND_GAJEJU_CELI on GAJEJU_CELI(Geometrija)Indextype is MDSYS.SPATIAL_INDEXPARAMETERS('SDO_LEVEL=4, SDO_NUMTILES=4');

--R-tree koka indeksi:Create Index IND_KOKI on KOKI(Geometrija)Indextype is MDSYS.SPATIAL_INDEX;

Create Index IND_GAJEJU_CELI on GAJEJU_CELI(Geometrija)Indextype is MDSYS.SPATIAL_INDEX;

Lai izmainītu indeksa veidu, vispirms jāizdzēš iepriekšējais indekss. Komandas:

Drop Index IND_KOKI;Drop Index IND_GAJEJU_CELI;

Testēšana rezultāti:

Indeksu veids Vidējais vaicājuma izpildes laiksFiksētie 0,174Hibrīdie 0,181R-tree 0,077

Pēc testēšanas rezultātiem ir redzams, ka dotajām ģeometriju kopām (KOKI un

GAJEJU_CELI) fiksētu un hibrīdu indeksu ātrdarbības ir gandrīz vienādas. Pielietojot R-tree

29

Page 30: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

koka indeksus vaicājums bija izpildīts ~2.3 reizes ātrāk nekā fiksētu un hibrīdu indeksu

gadījumā. Tātad dotai datu kopai R-tree indeksus lietot vislabāk.

Pēc rezultātiem arī var secināt, ka datu kopa nav pietiekami plaša, lai veikt objektīvo

salīdzinājumu, jo izpildes laiki ir diezgan mazie (pēc autora domām).

30

Page 31: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

6. Parastu, hibrīda un R-koku indeksu pielietošana

Slāņu tabulām KOKI, VEIKALI, MAJAS, TILTI, KANALI pielietosim R-koku

indeksēšanu. Lai pielietotu R-koku indeksus, netiek norādīti papildus parametri.

-- R-treeCreate Index IND_KOKI on KOKI(Geometrija)Indextype is MDSYS.SPATIAL_INDEX;

Create Index IND_VEIKALI on VEIKALI(Geometrija)Indextype is MDSYS.SPATIAL_INDEX;

Create Index IND_MAJAS on MAJAS(Geometrija)Indextype is MDSYS.SPATIAL_INDEX;

Create Index IND_TILTI on TILTI(Geometrija)Indextype is MDSYS.SPATIAL_INDEX;

Create Index IND_KANALI on KANALI(Geometrija)Indextype is MDSYS.SPATIAL_INDEX;

Slāņu tabulai AUTOCELI pielietosim fiksētu indeksēšanu. Lai pielietotu fiksētus

indeksus, tiek norādīta papildus parametra SDO_LEVEL vērtība.

-- FiksētsCreate Index IND_AUTOCELI on AUTOCELI(Geometrija)Indextype is MDSYS.SPATIAL_INDEXPARAMETERS('SDO_LEVEL=4');

Slāņu tabulām EZERI un GAJEJU_CELI pielietosim hibrīdu indeksēšanu. Lai

pielietotu hibrīda indeksus, tiek norādītas papildus parametru SDO_LEVEL un

SDO_NUMTILES vērtības.

-- HibrīdaCreate Index IND_EZERI on EZERI(Geometrija)Indextype is MDSYS.SPATIAL_INDEXPARAMETERS('SDO_LEVEL=4, SDO_NUMTILES=4');

Create Index IND_GAJEJU_CELI on GAJEJU_CELI(Geometrija)Indextype is MDSYS.SPATIAL_INDEXPARAMETERS('SDO_LEVEL=4, SDO_NUMTILES=4');

31

Page 32: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

Pārbaudīsim:

Select TABLE_NAME, INDEX_NAME, SDO_INDEX_TYPEFrom ALL_SDO_INDEX_INFO;

Visi indeksi tiešām bija izveidoti.

32

Page 33: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

7. Primārā filtra vaicājumi (2)

1. vaicājums

Ar pirmo primāra filtra vaicājumu iegūšu informāciju par kokiem, kas atrodas

taisnstūrveida laukā.

-- Koki pie liela veikalaSelect A.Koka_ID, A.Geometrija.SDO_ORDINATES, A.NosaukumsFrom KOKI AWhere SDO_FILTER( A.Geometrija, -- tiek analizēti visi objektu no tabulas KOKI MDSYS.SDO_GEOMETRY( -- Aprakstam taisnstūri kā otro ģeometriju 2003, -- divu dimensiju poligons

NULL, -- SDO_SRID NULL, -- SDO_POINT MDSYS.SDO_ELEM_INFO_ARRAY(1, 1003, 3), -- taisnsturis MDSYS.SDO_ORDINATE_ARRAY(37,5, 42,10) -- koordinātes

)) = 'TRUE'; -- starp divām ģeometrijām pastāv saistība

Rezultāts:

33

Page 34: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

2. vaicājums

Otrais vaicājums ir sarežģītāk. Uzzināsim, kādas ģeometrijas no tabulām TILTI,

KANALI, VEIKALI, GAJEJU_CELI un KOKI ir saistītas ar autoceļu „Lielais prospekts”.

-- Objekti, kas ir saistīti ar autoceļu "Lielais prospekts"-- TILTISelect A.Tilta_ID as Objekta_ID, A.NosaukumsFrom TILTI AWhere SDO_FILTER( A.Geometrija, (Select B.Geometrija -- ar apakšvaicājumu tiek iegūta vajadzīga ģeometrija From AUTOCELI B Where B.Nosaukums = 'Lielais prospekts')) = 'TRUE'UNION ALL-- KANALISelect A.Kanala_ID, A.NosaukumsFrom KANALI AWhere SDO_FILTER( A.Geometrija, (Select B.Geometrija From AUTOCELI B Where B.Nosaukums = 'Lielais prospekts')) = 'TRUE'UNION ALL-- VEIKALISelect A.Veikala_ID, A.NosaukumsFrom VEIKALI AWhere SDO_FILTER( A.Geometrija, (Select B.Geometrija From AUTOCELI B Where B.Nosaukums = 'Lielais prospekts')) = 'TRUE'UNION ALL-- GAJEJU_CELISelect A.Gajeju_cela_ID, A.NosaukumsFrom GAJEJU_CELI AWhere SDO_FILTER( A.Geometrija, (Select B.Geometrija From AUTOCELI B Where B.Nosaukums = 'Lielais prospekts')) = 'TRUE'UNION ALL-- KOKISelect A.Koka_ID, A.NosaukumsFrom KOKI AWhere SDO_FILTER(

34

Page 35: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

A.Geometrija, (Select B.Geometrija From AUTOCELI B Where B.Nosaukums = 'Lielais prospekts')) = 'TRUE';

Rezultāts:

35

Page 36: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

Vaicājuma rezultāts parāda primāra filtra darbības principu. Primārais filtrs salīdzina

ģeometriju aproksimācijas (tuvinājumus), balsoties uz izveidotiem indeksiem. Tāpēc

vaicājuma rezultāta bija iegūta informācija par vairākām ģeometrijām, kuras īstenībā nav

saistītas ar autoceļu „Lielais prospekts”. Attēlā ar sarkano krāsu tiek apzīmēts autoceļš

„Lielais prospekts”, un ar zilo krāsu tiek apzīmēti objekti, par kuriem bija iegūta informācija.

Kanāls un tilts tiešām ir saistīti ar autoceļu, bet pārējie objekti – tikai atrodas tuvu.

36

Page 37: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

8. Topoloģiju analīzes vaicājumi (4)

1. vaicājums

Izpildīsim vēl reiz iepriekšējo vaicājumu (7. nodaļa 2. vaicājums), bet šoreiz pielietosim

SDO_ANYINTERACT, kas lieto gan primāro, gan sekundāro filtru. Rezultātu kopai jābūt

precīzai. Pārbaudīsim to.

-- Objekti, kas ir saistiti ar autocelu "Lielais prospekts"-- TILTISelect A.Tilta_ID as Objekta_ID, A.NosaukumsFrom TILTI AWhere SDO_ANYINTERACT( A.Geometrija, (Select B.Geometrija From AUTOCELI B Where B.Nosaukums = 'Lielais prospekts')) = 'TRUE'UNION ALL-- KANALISelect A.Kanala_ID, A.NosaukumsFrom KANALI AWhere SDO_ANYINTERACT( A.Geometrija, (Select B.Geometrija From AUTOCELI B Where B.Nosaukums = 'Lielais prospekts')) = 'TRUE'UNION ALL-- VEIKALISelect A.Veikala_ID, A.NosaukumsFrom VEIKALI AWhere SDO_ANYINTERACT( A.Geometrija, (Select B.Geometrija From AUTOCELI B Where B.Nosaukums = 'Lielais prospekts')) = 'TRUE'UNION ALL-- GAJEJU_CELISelect A.Gajeju_cela_ID, A.NosaukumsFrom GAJEJU_CELI AWhere SDO_ANYINTERACT( A.Geometrija, (Select B.Geometrija From AUTOCELI B Where B.Nosaukums = 'Lielais prospekts')) = 'TRUE'UNION ALL

37

Page 38: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

-- KOKISelect A.Koka_ID, A.NosaukumsFrom KOKI AWhere SDO_ANYINTERACT( A.Geometrija, (Select B.Geometrija From AUTOCELI B Where B.Nosaukums = 'Lielais prospekts')) = 'TRUE';

Rezultāts:

Rezultāts bez sekundāra filtra pielietošanas (atkārtoti):

Tiešām, no tabulām TILTI, KANALI, VEIKALI, GAJEJU_CELI un KOKI tikai tilts un

kanāls ir saistīti ar autoceļu „Lielais prospekts”. Tas ir precīzs rezultāts, ko nodrošināja

sekundārais filtrs. Svarīgi, ka elementi „Tilts caur kanālu” un „Kanāls” parādās abās datu

kopās. Salīdzinot rezultātus, var izdarīt secinājumu, ka primāra filtra uzdevums ir iegūt

tuvinātu datu kopu C1, kura tiek apstrādāta ar sekundāro filtru un tiek iegūts precīzs rezultāts –

datu kopa C2, kas ir C1 kopas apakškopa (C1 ⊆ C2).

38

Page 39: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

2. vaicājums

Uzzināsim autoceļu un gājēju ceļu pārus, kuri pieskaras viena otrai.

Select A.Nosaukums, B.NosaukumsFrom AUTOCELI A, GAJEJU_CELI BWhere MDSYS.SDO_TOUCH(A.Geometrija, B.Geometrija) = 'TRUE';

Rezultāts:

3. vaicājums

Noskaidrosim, kādi ir gājēju ceļa un autoceļa nosaukumu, kas krusto tiltu.

Select A.NosaukumsFrom GAJEJU_CELI A, TILTI B-- Lietosim OVERLAPBDYDISJOINT, jo gajēju celiņš ir attēlots kā līnija.Where MDSYS.SDO_OVERLAPBDYDISJOINT(A.Geometrija, B.Geometrija) = 'TRUE'UNION ALL Select A.NosaukumsFrom AUTOCELI A, TILTI B-- Lietosim OVERLAPBDYINTERSECT, jo autoceļa ir attēlota kā poligons.Where MDSYS.SDO_OVERLAPBDYINTERSECT(A.Geometrija, B.Geometrija) = 'TRUE';

Rezultāts:

39

Page 40: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

4. vaicājums

Vaicājums noteic veikalu, kas atrodas norādītajā vietā.

Select A.NosaukumsFrom VEIKALI AWhere MDSYS.SDO_EQUAL( A.Geometrija, MDSYS.SDO_GEOMETRY( 2003, -- polygon

NULL, -- SDO_SRID NULL, -- SDO_POINT MDSYS.SDO_ELEM_INFO_ARRAY( 1, -- 1. elements SDO_ORDINATES masīvā 1003, -- daudzstūris... 1 -- ...kura malas ir taisnas ), MDSYS.SDO_ORDINATE_ARRAY(24,6.8, 24,3, 31.6,2, 34.8,2, 36,6, 33.4,

10.8, 28,10.8, 24,6.8) )) = 'TRUE';

Rezultāts:

40

Page 41: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

9. Ģeometriju skaitlisko raksturojumu iegūšanas vaicājumi (4)

1.vaicājums

Noskaidrosim ezeram četrus tuvākos kokus, kā arī attālumus no ezera līdz attiecīgajam

kokam.

--4 tuvākie koki ezeramSelect A.Koka_ID, A.Nosaukums, Round(MDSYS.SDO_NN_DISTANCE(1),3) as

AttalumsFrom KOKI A, EZERI BWhere B.Ezera_ID = 1 AND MDSYS.SDO_NN(A.Geometrija, B.Geometrija, 'sdo_num_res = 4', 1) = 'TRUE'ORDER BY Attalums asc;

Rezultāts:

Attēlā koki ir numurēti attāluma pieaugšanas secībā.

41

Page 42: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

2. vaicājums

Noteikt kokus, kas atrodas attālumā 7 robežās no ziemeļu veikala.

Select A.Koka_ID, A.Nosaukums, A.Geometrija.SDO_ORDINATESFrom KOKI AWhere MDSYS.SDO_WITHIN_DISTANCE(A.Geometrija, (Select B.Geometrija From VEIKALI B Where B.Nosaukums = 'Ziemelu veikals'), 'distance = 7') = 'TRUE';

Rezultāts:

3. vaicājums

Noteiksim atsevišķi visu veikalu summāro laukumu un visu māju summāro laukumu.

Laukuma izskaitļošanai tiek pielietots operators SDO_AREA.

-- Veikalu un māju summāri laukumiSelect 'Veikali' as Celtnes_tips, Sum(MDSYS.SDO_GEOM.SDO_AREA( A.Geometrija, -- Ģeometrija

-- Ar apakšvaicājumu tiek iegūta informācija no metadatu -- tabulas. kura ir nepieciešama SDO_AREA darbībai(SELECT B.diminfo

FROM USER_SDO_GEOM_METADATA B WHERE B.table_name = 'VEIKALI')

) ) as Kopejais_laukums

42

Page 43: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

From VEIKALI AUNION ALLSelect 'Majas' as Celtnes_tips, Sum(MDSYS.SDO_GEOM.SDO_AREA( A.Geometrija,

(SELECT B.diminfo FROM USER_SDO_GEOM_METADATA B

WHERE B.table_name = 'MAJAS') ) ) as Kopejais_laukumsFrom MAJAS A;

Rezultāts:

Māju summārais laukums bija pārbaudīts manuāli un tas atbilst rezultātam.

4. vaicājums

Noteikt koku, kas atrodas noteiktā laukā (attēlā), summāro perimetru.

Perimetra izskaitļošanai tiek pielietots operators SDO_LENGTH.

-- Koku perimetrs noteiktajā laukaSelect Round(Sum(MDSYS.SDO_GEOM.SDO_LENGTH( B.Geometrija, -- koku ģeometrijas

(Select B.diminfo -- metadatu iegūšana From USER_SDO_GEOM_METADATA B

Where B.table_name = 'KOKI') ) ),4) as Kopejais_perimetrsFrom (Select A.Geometrija -- apakšvaicājums atlasa vajadzīgas ģeometrijas From KOKI A Where SDO_ANYINTERACT(

43

Page 44: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

A.Geometrija, MDSYS.SDO_GEOMETRY( 2003, -- divu dimensiju poligons

NULL, -- SDO_SRID NULL, -- SDO_POINT MDSYS.SDO_ELEM_INFO_ARRAY(1, 1003, 3), -- taisnstūris MDSYS.SDO_ORDINATE_ARRAY(35,0.5, 43.5,12)

) ) = 'TRUE' ) B;

Rezultāts:

Manuāls aprēķins apstiprina rezultāta korektumu.

44

Page 45: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

10. Atributīvo datu izgūšanas vaicājumi (3)

1.vaicājums

Izvadīt datus par maziem veikaliem, kuri atrodas lielos veikalos, uz kuram ir izveidots

gājēju celiņš.

-- Datu par veikaliem izvade Select A.Nosaukums as Liela_v_nos, B.Nosaukums as Maza_v_nos, B.SpecializacijaFrom VEIKALI A, MAZIE_VEIKALI B, GAJEJU_CELI CWhere A.Veikala_ID = B.Veikala_ID AND MDSYS.SDO_ANYINTERACT(A.Geometrija, C.Geometrija) = 'TRUE';

Rezultāts:

Uz abiem veikaliem ir izveidoti gājēju celiņi, tāpēc dati tiek izvadīti par visiem

maziem veikaliņiem.

2. vaicājums

Uzzināt cik joslu ir autoceļam, kura krusto kanālu, ka arī šī autoceļa garumu.

--Autoceļa, kas krusto kanālu, joslu skaitsSelect A.Autocela_ID, A.Joslu_skaits, A.GarumsFrom AUTOCELA_INFO AWhere A.Autocela_ID = (Select B.Autocela_ID -- noteic vajadzīga autoceļa ID From AUTOCELI B, KANALI C

Where MDSYS.SDO_OVERLAPBDYDISJOINT( B.Geometrija,

C.Geometrija ) = 'TRUE'

);

Rezultāts:

45

Page 46: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

3. vaicājums

No 5 tuvākajiem mājai Nr. 27 kokiem uzzināt visgarākā koka nosaukumu, garumu, un

izmēru.

--Garākais koksSelect D.Nosaukums, E.Garums, E.IzmersFrom (Select A.Koka_ID, A.Nosaukums -- atlasam 5-us tuvākus kokus From KOKI A

Where MDSYS.SDO_NN( A.Geometrija,

(Select B.Geometrija -- vaicājums atgriež 27. māja ģeometriju From MAJAS B, MAJAS_INFO C Where B.Majas_ID = C.Majas_ID AND C.Numurs = 27),'sdo_num_res = 5') = 'TRUE'

) D, KOKA_INDO EWhere D.Koka_ID = E.Koka_IDOrder by Garums;

Rezultāts:

Visgarākā, koka nosaukums ir bērzs, tā izmērs ir vidējs un garums = 14.59 vienības.

46

Page 47: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

11. Ģeometriju ģeometrisko datu iegūšanas vaicājumi (4)

1. vaicājums

Iegūst visu māju SDO_ELEM_INFO vērtības, kas norāda, kā jāinterpretē koordinātas.

-- SDO_ELEM_INFOSelect A.Majas_ID, A.Nosaukums, A.Geometrija.SDO_ELEM_INFOFrom MAJAS A;

Rezultāts:

2. vaicājums

Iegūst SDO_ORDINATES masīvu vērtības no KOKI tabulas.

--SDO_ORDINATESSelect A.Koka_ID, A.Nosaukums, A.Geometrija.SDO_ORDINATESFrom KOKI A;

Rezultāts:

47

Page 48: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

3.vaicājums

Iegūst SDO_GTYPE vērtību no tabulas AUTOCELI ģeometrijām.

--SDO_GTYPESelect A.Autocela_ID, A.Nosaukums, A.Geometrija.SDO_GTYPEFrom AUTOCELI A;

Rezultāts:

SDO_GTYPE = 2003 nozīmē, ka ģeometrija ir divdimensiju poligons.

4.vaicājums

No SDO_GTYPE atvasināt dimensiju skaitu tabulai VEIKALI.

Izmantosim SUBSTR funkciju, kas dod iespēju izvilkt simbolu virkni no lielākas

simbolu virknes. Sintakse: SUBSTR( string, start_position, [ length ] ).

--SDO_GTYPE // DIMENSIJASSelect A.Veikala_ID, substr(a.Geometrija.SDO_GTYPE, 1, 1) as Dimensiju_skFrom VEIKALI A;

48

Page 49: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

12. Ģeometriskās datu bāzes ģeometriju vizualizēšana izmantojot

kādu no komerciālām grafisko datu vizualizācijas paketēm

Darba gaitā ģeometriju vizualizēšanai ir izmantots lietojums Oracle Map Builder. Lai

vizualizētu ģeometrijas lietojot Oracle Map Builder, vispirms jāizveido savienojums ar datu

bāzi:

Katram slānim jādefinē atsevišķa krāsa, kura noteic, kā ģeometriskie objekti tiek

atspoguļoti uz kartes. Pēc tam jādefinē paši slāņi, kurām piesaista krāsas. Pēc slāņu

definēšanas tiek veidota karte, kurai jāpievieno slāņi. Jāievēro slāņu pievienošanas secība, lai

topoloģiski saistītie objekti būtu attēloti pareizi, piemēram, lai tilts būtu virs kanāla, nevis

otrādi.

49

Page 50: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

Attēlā ir redzami:

1. Definētas krāsas;

2. Definētie slāņi;

3. Izveidotas kartes.

50

Page 51: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

Karti iespējams vizualizēt:

Vizualizēts darba rezultāts

51

Page 52: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

13. Ģeometrisko datu vizualizēšana izmantojot programmēšanas

valodu Java un tās bibliotēkas

Darbā bija izstrādāta programma Java valodā, kura vizualizē ģeometrijas no datu bāzes.

Par programmas koda pamatu tiek paņemts kods no Dmitrija Tarakanova darba (pirmais

piemērs mācību materiālos par grafiskajām datu bāzes sistēmām).

Datu bāze bija izstrādāta ar pieņēmumu, ka y ass ir vērsta uz augšu. To pašu pēc

noklusējuma pieņem rīks Oracle Map Builder, jo vizualizēts rezultāts atbilst sākuma

izveidotai rajona shēmai. Savukārt strādājot ar Java bibliotēkām, pēc noklusējuma y ass ir

vērsta uz leju. Tāpēc karte tiek attēlota kājām uz augšu:

Šo problēmu var atrisināt ar sekojošām komandām:

// nobīde pa y ass, lai attēls būtu izveidots redzamajā laukā.

graphics.translate(0, getHeight() - 100);

// apgriež attēlojumu (invertē y)

graphics.scale(1.0, -1.0);

52

Page 53: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

Ģeometrisko datu vizualizēšanas rezultāts:

Programma pieslēdzas iepriekš izveidotai datu bāzei un pēc kārtas nolasa datus no

tabulām KOKI, KANALI, EZERI, GAJEJU_CELI, AUTOCELI, TILTI, MAJAS, VEIKALI.

Programma analizē iegūtos datus un spēj atšķirt SDO_GEOMETRY tipa objektus. Šos

objektus programma pārveido JGeometry objektos un saglabā. Katram slānim programmā ir

definēts savs attēlošanas veids (malu krāsa, aizpildīšanas krāsa). Pēc tam, atbilstoši definētam

attēlošanas veidam, programma atspoguļo uz kartes JGeometry objektus.

Programma spēj apstrādāt SQL Select vaicājumu. Par to tiek uzrakstīts nākamajā

nodaļā.

Programmas pirmkods ir ievietots pielikumā.

53

Page 54: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

14. Ģeometriskās datu bāzes izgūšanas vaicājumu rezultātu

vizualizēšana

Programmas interfeiss satur lauku, kurā var ievadīt SQL Select vaicājumu. Uzspiežot

pogu „Palaist SQL”, vaicājums tiek nosūtīts datu bāzes sistēmai. Datu bāzes sistēma atgriež

datu kopu atbilstoši vaicājumam. Ja ar vaicājumu iegūta datu kopa satur SDO_GEOMETRY

objektus, tad šie objekti tiek apzīmēti uz kartes ar sarkano kontūru.

Piemērs 1:

Programma apzīmēja ezeru un veikalus ar sarkano fonu.

Palaižot nākamo vaicājumu, iepriekšēja vaicājuma rezultāti (sarkanie kontūri) tiek

izdzēsti.

54

Page 55: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

Ja vaicājuma rezultātā nav iegūti ģeometriskie objekti, programma par to paziņo.

Piemērs 2:

Konsolē:

Tiešām, MAJAS_INFO ir atributīva tabula, kurā nav ģeometrisko objektu.

55

Page 56: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

Piemērs 3:

Izveidosim topoloģijas analīzes vaicājumu. Noskaidrosim, kādas ģeometrijas no slāņiem

AUTOCELI, GAJEJU_CELI un KANALI kaut kādā veidā ir saistītas ar tilti.

Rezultāts:

Apskatot apzīmētus objektus attēlā, varam secināt, ka ar tiltu ir saistīts viens autoceļš,

viens kanāls un viens gājēju celiņš.

Uzspiežot pogu „Iziet”, programma beidz savu darbu.

56

Page 57: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

Secinājumi

Darba gaitā bija izstrādāta grafisko datu DB. Izstrāde prasa vairāku soļu veikšanu:

shēmas izveidošanu, ģeometrisko datu slāņu izveidošanu, meta-datu norādīšanu, datu ielādi

un indeksu izveidošanu. Pēc šiem soļiem pastāv iespēja strādāt ar izveidoto datu bāzi: realizēt

dažāda veida vaicājumus, vizualizēt slāņus, apstrādāt grafiskos datus ar lietojumu (piemēram,

Java).

Grafisko datu DB izstrāde ir laikietilpīgs uzdevums. Ielādēti dati jāpārbauda ar rīkiem,

kuri piedāvā vizualizāciju, piemēram, Oracle Map Builder. Katru grafisku objektu apraksta

vairākas skaitliskās vērtības, kuras ir vajadzīgas SDO_GEOMETRY objekta inicializācijai.

Tāpēc, ja objektu ir daudz, datu izveidošana arī prasa laiku. Autors pielietoja programmas C+

+ valodā datu ģenerācijai dažiem .dat failiem, ar kuriem strādā SQL*Loader. Programmas

pirmkodi ir ielikti pielikumos.

Primārais un sekundārais filtrs. Darbā bija secināts, ka primārais filtrs tiešām

salīdzina ģeometriju tuvinājumus, un tāpēc dod rezultātu kopu, kurā ir lieki ieraksti. Pēc tam

sekundārais filtrs tālāk apstrādā datu kopu, atmet liekus datus, un dod precīzu rezultātu.

Secinājums bija izdarīts, salīdzinot SDO_FILTER (primārais) un SDO_ ANYINTERACT

(primārais + sekundārais) operatoru darbības (7. nodaļas 2. vaicājums. un 8. nodaļas 1.

vaicājums).

Indeksu ātrdarbības salīdzinājums. Darbā bija salīdzinātas R-koka, fiksētu un hibrīdu

indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts ļoti ātri – mazāk par

0,2 sekundes – datu kopa nav pietiekami plaša, lai veiktu objektīvo salīdzinājumu. Tomēr, ir

skaidri redzams, ka izvēlētai datu kopai fiksētu un hibrīdu indeksu ātrdarbība ir gandrīz

vienāda. Taču, pielietojot R-tree koka indeksus vaicājums bija izpildīts ~2.3 reizes ātrāk nekā

fiksētu un hibrīdu indeksu gadījumā. Tātad dotai datu kopai R-tree indeksus lietot vislabāk.

Java lietojums. Pastāv iespēja ar JDBC draiveru pieslēgties datu bāzei, saņemt no tā

SDO_GEOMETRY objektus, pārveidot tos JGeometry objektos un strādāt ar tiem lietojumā.

Piemēram, tos var vizualizēt. Darbā izstrādātas programmas kods pamatojas uz Dmitrija

Tarakanova darbā izstrādāto kodu. Papildinājumi, kurus izstrādāja šī darba autors, ir sekojoši:

Atrisināta problēma ar y ass virzienu;

Slāņiem ir piešķirtas krāsas;

Programma izvada ziņojumu, ja vaicājuma izpildes rezultātā netiek atgrieztas

ģeometrijas;

57

Page 58: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

Tiek pievienotā poga „Iziet”.

Pēc autora domām, tas ir vērtīgi, ka darba ietvaros veidojas saprašana, kā lietojumu var

sasaistīt ar datu bāzes sistēmu. Zināt SQL, un kā veidot datu bāzi ir labi. Zināt, kā rakstīt

lietojumus – arī ir labi. Bet zināt kā izdarīt tā, lai DBS ar lietojumu savā starpā sadarbojās – ir

ļoti vērtīgi, jo tas ļauj risināt lielākas sarežģītības pakāpes uzdevumus.

58

Page 59: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

Pielikumi

14.1.Java programmas kods

Faila QConnection.java saturs:

// klase izveido savienojumu ar datu bāzi un palaiž Select vaicājumus.

package GrafiskaDB;

import java.sql.*;import java.util.ArrayList;import java.util.List;import oracle.jdbc.driver.*;import oracle.jdbc.OracleTypes;import oracle.spatial.util.*;import oracle.spatial.geometry.*;import oracle.sql.STRUCT;import oracle.spatial.geometry.JGeometry;

public class QConnection {

static final String JDBC_DRIVER = "oracle.jdbc.driver.OracleDriver"; static final String DB_URL = "jdbc:oracle:thin:@localhost:1521:xe"; static final String USER = "system"; static final String PASSWORD = "qwert";

Connection m_conn;

public boolean initConnection() { boolean result = false; try { Class.forName(JDBC_DRIVER); DriverManager.registerDriver(new OracleDriver()); m_conn = DriverManager.getConnection(DB_URL, USER, PASSWORD); System.out.println("Savienots ar DB."); result = true; } catch (ClassNotFoundException ex) { System.out.println("Kluda. Neizdevas ieladet draivera klasi!"); } catch (SQLException e) { e.printStackTrace(); }

return result; }

public List<JGeometry> select(String sql) { List<JGeometry> result = new ArrayList<JGeometry>(100); if (sql.length() > 6 && sql.substring(0, 6).toUpperCase().equals("SELECT")) { try {

59

Page 60: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

PreparedStatement pStmt = m_conn.prepareStatement(sql); ResultSet rsltSet = pStmt.executeQuery();

ResultSetMetaData rsmd = rsltSet.getMetaData(); int metaColumns = rsmd.getColumnCount();

STRUCT st = null; JGeometry geometry;

while (rsltSet.next()) { int columns = metaColumns; while (columns > 0) { int type = rsmd.getColumnType(columns); if (rsmd.getColumnType(columns) == Types.STRUCT) { st = (STRUCT) rsltSet.getObject(columns); geometry = JGeometry.load(st); result.add(geometry); } columns--; } } rsltSet.close(); pStmt.close(); } catch (SQLException SQLEx) { result.clear(); } }

return result; }

public QConnection() { super(); }}

Faila QComponent.java saturs:

// klase atbild par ģeometriju glabāšanu un to atspoguļošanu grafiskajā veidā

package GrafiskaDB;

import java.awt.BasicStroke;import java.awt.Color;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.RenderingHints;import java.awt.Shape;import java.awt.geom.AffineTransform;import java.util.ArrayList;

60

Page 61: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

import java.util.List;

import javax.swing.JPanel;import oracle.spatial.geometry.JGeometry;

public class QComponent extends JPanel { private List<BackObject> backList; private List<Shape> shapeList; private AffineTransform afTrf; public QComponent() { backList = new ArrayList<BackObject>(100); shapeList = new ArrayList<Shape>(100); afTrf = AffineTransform.getScaleInstance(16, 16); } public void setBackgroundShapes(List<JGeometry> shapes, Color border_c, Color fill_c, boolean fill) { for(JGeometry shape : shapes) { backList.add(new BackObject(shape.createShape(afTrf), border_c, fill_c, fill)); } } public void setTempShapes(List<JGeometry> shapes) { shapeList.clear(); for(JGeometry shape : shapes) { shapeList.add(shape.createShape(afTrf)); } } public void removeTempShapes() { shapeList.clear(); } public void redraw() { paint(this.getGraphics()); } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D graphics = (Graphics2D) g; graphics.setStroke(new BasicStroke(4)); // invertē y ass // nobīde pa y ass, lai attēls nebūtu izveidots aiz redzama loga lauka. graphics.translate(0, getHeight() - 100); // apgriež attēlojumu graphics.scale(1.0, -1.0);

61

Page 62: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

// Grafikas kvalitātes iestatīšana: graphics.setRenderingHint( RenderingHints.KEY_ANTIALIASING,

RenderingHints.VALUE_ANTIALIAS_ON ); graphics.setRenderingHint( RenderingHints.KEY_COLOR_RENDERING,

RenderingHints.VALUE_COLOR_RENDER_QUALITY ); graphics.setRenderingHint( RenderingHints.KEY_STROKE_CONTROL,

RenderingHints.VALUE_STROKE_PURE ); for(BackObject backObject : backList) { graphics.setColor(backObject.getBorderColor()); graphics.draw(backObject.getShape()); if (backObject.toFill()) { graphics.setColor(backObject.getFillColor()); graphics.fill(backObject.getShape()); } } graphics.setColor(new Color(216, 0, 0)); graphics.setStroke(new BasicStroke(4)); for(Shape shape : shapeList) { graphics.draw(shape); } graphics.setColor(Color.black); graphics.setStroke(new BasicStroke(1)); }}

Faila BackObject.java saturs:

// klase glabā nepieciešamu informāciju, kā grafiski atspoguļot ģeometrijas

package GrafiskaDB;

import java.awt.Shape;import java.awt.Color;

public class BackObject { private Shape shape; private Color borderColor; private Color fillColor; private boolean fill; // Ctor:

62

Page 63: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

public BackObject(Shape s, Color bc, Color fc, boolean f) { shape = s; borderColor = bc; fillColor = fc; fill = f; } // Getters and setters: //----------------------------------------// public Shape getShape() { return this.shape; } public void setShape(Shape s) { shape = s; } public Color getBorderColor() { return this.borderColor; } public void setBorderColor(Color c) { borderColor = c; } public Color getFillColor() { return this.fillColor; } public void setFillColor(Color c) { fillColor = c; } public void setFill(boolean f) { fill = f; } //=======================================// // Methods: //--------------------------------------// public boolean toFill() { return fill; }}

Faila CloseListener.java saturs:

// Klase, kas palīdz realizēt "Iziet" pogas darbībupackage GrafiskaDB;

63

Page 64: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

import java.awt.event.ActionEvent;import java.awt.event.ActionListener;

import javax.swing.JFrame;

public class CloseListener extends JFrame implements java.awt.event.ActionListener{ @Override public void actionPerformed(ActionEvent e) { System.exit(0); } public CloseListener() { super(); }}

Faila QWindow.java saturs:

// Failā tiek definēts lietošanas interfeisa izskats;// tiek ielādētas ģeometrijas operatīvajā atmiņā, un lietojums var ar tiem strādāt;package GrafiskaDB;

import java.awt.Dimension;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.Color;import java.awt.Font;

import java.util.List;

import javax.swing.BoxLayout;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JTextArea;

import oracle.spatial.geometry.JGeometry;

public class QWindow extends JFrame implements ActionListener { private QComponent panel; private JTextArea sqlField; private JButton sqlButton; private JButton closeButton; private QConnection db; public QWindow() { panel = new QComponent();

64

Page 65: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

sqlField = new JTextArea(); sqlButton = new JButton("Palaist SQL"); closeButton = new JButton("Iziet"); setTitle("Lab_darbs_1"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(950, 900); panel.setPreferredSize(new Dimension(900, 600)); sqlButton.addActionListener(this); closeButton.addActionListener((ActionListener) new CloseListener()); sqlField.setFont(new Font("DialogInput", Font.BOLD ,16)); add(panel); add(sqlField); add(sqlButton); add(closeButton); setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS)); setVisible(true); init(); } private void init() { db = new QConnection(); if (!db.initConnection()) System.exit(1); // Slāņu iegūšana no datu bāzes // un attēlošanas veida definēšana: malu krāsa, aizpildīšanas krāsa, // vai vajag aizpildīt panel.setBackgroundShapes( db.select("SELECT A.geometrija FROM KOKI A"), Color.black, Color.green, true); panel.setBackgroundShapes( db.select("SELECT A.geometrija FROM KANALI A"), new Color(41, 212, 255), Color.blue, false); panel.setBackgroundShapes( db.select("SELECT A.geometrija FROM EZERI A"), new Color(41, 212, 255), new Color(64, 255, 237), true); panel.setBackgroundShapes( db.select("SELECT A.geometrija FROM GAJEJU_CELI A"), Color.gray, Color.gray, false); panel.setBackgroundShapes( db.select("SELECT A.geometrija FROM AUTOCELI A"), Color.black, Color.darkGray, true); panel.setBackgroundShapes( db.select("SELECT A.geometrija FROM TILTI A"),

65

Page 66: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

Color.black, new Color(135, 61, 12), true); panel.setBackgroundShapes( db.select("SELECT A.geometrija FROM MAJAS A"), Color.black, new Color(134, 167, 210), true); panel.setBackgroundShapes( db.select("SELECT A.geometrija FROM VEIKALI A"), new Color(247, 148, 0), new Color(255, 189, 90), true); panel.redraw(); } public static void main(String[] args) { new QWindow(); } @Override public void actionPerformed(ActionEvent arg0) { List<JGeometry> shapes = db.select(sqlField.getText()); if (!shapes.isEmpty()) { panel.setTempShapes(db.select(sqlField.getText())); panel.redraw(); } else { System.out.println("Vaicajuma rezultata nav geometrisko objektu."); panel.removeTempShapes(); panel.redraw(); } }}

14.2.C++ programmas dažu .dat failu izveidošanai

14.2.1. Programma faila koka_info_data.dat ģenerācijai

// Programma ieraksta failā Info_ID, Koka_Id un, izmantojot gadījuma skaitļa// ģeneratoru, izveido koka garumu robežos [5.00 .. 30.00] un izvēlas izmēru no// variantiem: mazs, vidējs vai liels. Tā tiek ģenerēti 23 ieraksti.#include <fstream>#include <iostream>#include <cstdlib>#include <ctime>

int main(){ using namespace std; const int ierakstu_skaits = 23;

const char * strarr[3] = {"mazs", "videjs", "liels"};66

Page 67: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

int random_result; double augums; ofstream fout("koka_info_data.dat"); srand(time(0)); for (int i = 1; i <= ierakstu_skaits; i++) { fout << i << ", " << i << ", "; random_result = rand() % 2500 + 500; // [500..3000] augums = (double) random_result / 100; // [5.00 .. 30.00] fout << augums << ", "; fout << '"' << strarr[random_result % 3] << '"' << endl; } cout << "Ending program\n"; fout.close(); cin.get(); return 0; }

Uzģenerēta ieraksta piemērs:1, 1, 21.75, "mazs"

14.2.2. Programma, kas palīdz izveidot failu KOKI_dati.dat

// Tā kā koki tiek attēloti kā apļi, ierakstu ģenerāciju var automatizēt.// Programma saņem no lietotāja trīs vērtības apļa kreisākā punkta x un y koordinātes// un rādiusu. Ģenerē ierakstu. Beidz darbību, kad lietotājs ievada ne skaitli. #include <fstream>#include <iostream>

int main(){ using namespace std; ofstream fout("koki_data.dat"); double left_point_x, left_point_y, radiuss; int i = 1; cin >> left_point_x >> left_point_y >> radiuss; while (cin) { fout << i << ", 1,1003,4, " << left_point_x << ',' << left_point_y << ", " << (left_point_x + radiuss) << ',' << (left_point_y + radiuss) << ", " << (left_point_x + radiuss * 2) << ',' << left_point_y << ", \"\"" << endl; cout << "Success!\n"; i++;

67

Page 68: datubaze.files.wordpress.com  · Web viewDarbā bija salīdzinātas R-koka, fiksētu un hibrīdu indeksu ātrdarbības. Tā kā testa vaicājums visos gadījumos bija izpildīts

cin >> left_point_x >> left_point_y >> radiuss; } cin.clear(); while(cin.get() != '\n') ; cout << "Ending program\n"; fout.close(); cin.get(); return 0; }

Piemērs:

Lietotāja ievade: 17.0, 29.0, 2.0

Uzģenerētais ieraksts: 1, 1,1003,4, 17,29, 19,31, 21,29, ""

kur 1 – Koka_ID;

1,1003,4 – SDO_ELEM_INFO vērtības, kas noteic, ka ģeometrija ir aplis;

17,29, 19,31, 21,29 – SDO_ORDINATES 3 punktu koordinātes, kas noteic apļa

izvietojumu;

"" – pēdiņās lietotājam jāieraksta koka nosaukums.

68