Difference between revisions of "Nahrnuto"

From Wikivyuka
Jump to: navigation, search
m
m
Line 31: Line 31:
 
  27                f_geometry_column )
 
  27                f_geometry_column )
 
  28 ) WITH OIDS;
 
  28 ) WITH OIDS;
 +
 +
==Podpora indexu typu GiST v PostGISu==
 +
 +
Indexy typu R-tree jsou specifické právě pro prostorová vícedimenzionální data (a pro ně byly navrženy). Aktuální verze PostgreSQL nabízí již další generaci této třídy databázových indexů a to tzv. GiST (Generalized Search Tree) indexy. Jejich princip je stejný, širší je ale jejich uplatnění. GiST indexy se v PostgreSQL používají pro fulltext, indexování obsahu polí, vlastní podporu hiearchických dat a také samozřejmě pro geometrické typy.
 +
 +
Jak již bylo zmíněno, R-tree index předpokládá, že indexovaná data budou mít minimálně dvě dimenze. Index má stromovou strukturu, a každý nekoncový uzel obsahuje jednak odkaz na své potomky a hlavně geometrii nejmenšího pravoúhlého n-rozměrného tělesa obsahujícího všechny potomky.
 +
 +
GiST je aplikační rozhraní, které umožňuje implementaci libovolného typu indexu: B-tree, R-tree. Výhodou GiST indexů je možnost vytvoření doménově specifických indexů vázaných na vlastní typy vývojářům znalým doménové oblasti bez toho, aby se nutně staly databázovými specialisty (Rozhodně ale implementace GiST indexu nepatří mezi triviální programování). Ukázkovým příkladem je použití GiST indexu v PostGISu. Kritériem, které se použije pro rozhodování, zda-li použít B-tree index nebo GiST index jsou operace, které chceme urychlit indexem. Pokud nám postačuje množina binárních operátorů <, =, >, pak je na místě uvažovat o B-tree indexu. V opačném případě nezbývá než použít GiST index, který je obecnější než B-tree index.
 +
 +
Prostorové indexy se dají použít i pro klasická data. Jednodimenionální data se ale musí předtím převést na vícedimenzionální. Ukázkovým případem selhání jednodimenzionálního případu je následující příklad. Mějme databázi událostí popsanou časem zahájení (start_time) a časem ukončení (end_time). Pokud budeme chtít vypsat události, které probíhaly v určitém čase napíšeme dotaz s podmínkou

Revision as of 09:17, 5 February 2015

Prevzato z http://postgres.cz/wiki/PostGIS_pro_v%C3%BDvoj%C3%A1%C5%99e

Tabulky spatial_ref_sys a geometry_columns.

01 -------------------------------------------------------------------
02 -- SPATIAL_REF_SYS
03 -------------------------------------------------------------------
04 CREATE TABLE spatial_ref_sys (
05          srid integer not null primary key,
06          auth_name varchar(256),
07          auth_srid integer,
08          srtext varchar(2048),
09          proj4text varchar(2048)
10 );
11        
12 -------------------------------------------------------------------
13 -- GEOMETRY_COLUMNS
14 -------------------------------------------------------------------
15 CREATE TABLE geometry_columns (
16         f_table_catalog varchar(256) not null,
17         f_table_schema varchar(256) not null,
18         f_table_name varchar(256) not null,
19         f_geometry_column varchar(256) not null,
20         coord_dimension integer not null,
21         srid integer not null,
22         type varchar(30) not null,
23         CONSTRAINT geometry_columns_pk primary key (
24                 f_table_catalog,
25                 f_table_schema,
26                 f_table_name,
27                 f_geometry_column )
28 ) WITH OIDS;

Podpora indexu typu GiST v PostGISu

Indexy typu R-tree jsou specifické právě pro prostorová vícedimenzionální data (a pro ně byly navrženy). Aktuální verze PostgreSQL nabízí již další generaci této třídy databázových indexů a to tzv. GiST (Generalized Search Tree) indexy. Jejich princip je stejný, širší je ale jejich uplatnění. GiST indexy se v PostgreSQL používají pro fulltext, indexování obsahu polí, vlastní podporu hiearchických dat a také samozřejmě pro geometrické typy.

Jak již bylo zmíněno, R-tree index předpokládá, že indexovaná data budou mít minimálně dvě dimenze. Index má stromovou strukturu, a každý nekoncový uzel obsahuje jednak odkaz na své potomky a hlavně geometrii nejmenšího pravoúhlého n-rozměrného tělesa obsahujícího všechny potomky.

GiST je aplikační rozhraní, které umožňuje implementaci libovolného typu indexu: B-tree, R-tree. Výhodou GiST indexů je možnost vytvoření doménově specifických indexů vázaných na vlastní typy vývojářům znalým doménové oblasti bez toho, aby se nutně staly databázovými specialisty (Rozhodně ale implementace GiST indexu nepatří mezi triviální programování). Ukázkovým příkladem je použití GiST indexu v PostGISu. Kritériem, které se použije pro rozhodování, zda-li použít B-tree index nebo GiST index jsou operace, které chceme urychlit indexem. Pokud nám postačuje množina binárních operátorů <, =, >, pak je na místě uvažovat o B-tree indexu. V opačném případě nezbývá než použít GiST index, který je obecnější než B-tree index.

Prostorové indexy se dají použít i pro klasická data. Jednodimenionální data se ale musí předtím převést na vícedimenzionální. Ukázkovým případem selhání jednodimenzionálního případu je následující příklad. Mějme databázi událostí popsanou časem zahájení (start_time) a časem ukončení (end_time). Pokud budeme chtít vypsat události, které probíhaly v určitém čase napíšeme dotaz s podmínkou