Difference between revisions of "Nahrnuto"
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