[Technologie] - Microsoft SQL Server ve své poslední verzi 2008 přináší podporu pro práci s prostorovými daty. Jak je tato podpora implementována? Jaké má možnosti? Co můžeme očekávat? Na všechny tyto otázky a samozřejmě nejen ty, se pokusíme odpovědět v tomto novém seriálu.
Prostorová data jsou v MS SQL 2008 implementována jako CLR rozšíření. Nejsou součástí serveru jako například typ integer. Na druhou stranu jsou implicitní součástí, takže není třeba řešit instalaci apod. Stejně tak server podporuje indexaci těchto dat, pro zrychlení dotazů, takže ani zde není vývojář ochuzen.
Vlastní datové typy, které můžeme využít, jsou dva – geometry a geography. První jmenovaný slouží k reprezentaci dat, jako např. bodů, čar (linií), polygonů v rovině s omezením souřadnic (konečný prostor). Naproti tomu datový typ geography slouží k reprezentaci stejných dat, avšak na povrchu zeměkoule. Oba typy pracují ve dvou dimenzích (např. na zeměkouli se nebere v potaz výška).
Jak jsme si již zmínili, podporovány jsou indexy nad prostorovými daty. Index je tvořen standardním B stromem. Dekompozice je prováděna ve čtyřech úrovních pomocí mřížky a při tvorbě indexu je možné specifikovat, jak hustá mřížka bude na každé úrovni:
- LOW = 4×4
- MEDIUM = 8×8
- HIGH = 16×16
Jakmile je prostor rozdělen do mřížky, je třeba přečíst jednotlivé řádky a "oindexovat" je. Tento proces (tzv. teselace - existuje více způsobů jak tento proces provést, MS SQL Server 2008 podporuje ke každému typu jen jeden) prochází jednotlivé řádky a přiřazuje jim buňky, ve kterých objekt leží (nebo se jich dotýká) tzv. touched cells. Procházení se provádí procházením do šířky v jednotlivých úrovních. Aby se počet těchto buněk držel na rozumné hodnotě, existuje několik pravidel, která snižují tento počet. Protože popis jednotlivých pravidel překračuje hranice článku, uvedeme je bez detailního vysvětlení:
- covering rule
- cells-per-object rule
- deepest-cell rule
A laskavého čtenáře odkážeme na oblíbený vyhledávač, který zajisté poskytne dostatek výsledků.
Zatím jsme se bavili o datových typech geometry a geography jako by se jednalo o téměř stejné typy. Ale datový typ geography přidává o něco málo na komplexnosti. Data jsou totiž reprezentována na geodetickém elipsoidu a je tedy třeba s nimi zacházet opatrněji. Plocha geodetického elipsoidu musí projít jistou konkrétní projekcí do roviny (není těžké nahlédnout, že projekce vždy některé parametry deformuje). MS SQL 2008 promítne každou polokouli na stěny čtyřbokého jehlanu (např. pyramida). Tyto dva jehlany poté zploští (vrchol se stane součástí podstavy) a tyto rovinné útvary spojí do jedné roviny.
Projekce geodetického elipsoidu do roviny v MS SQL 2008 (zdroj: microsoft.com)
(klikněte na obrázek pro zvětšení)
Vlastní index se vytváří příkazem CREATE SPATIAL INDEX a samozřejmě má smysl jej použít pouze na sloupce s typem geography nebo geometry. Jakmile je index vytvořen, může jej optimalizátor pro některé typy dotazů použít a tím dramaticky zrychlit jejich provádění.
Nechcete-li čekat na jednotlivé díly, můžete získat seriál zcela zdarma v PDF podobě již dnes.