MongoDB w aplikacjach lokalizacyjnych

22
Systemy Informacji Przestrzennej MongoDB w aplikacjach lokalizacyjnych Michał Mackiewicz www.gis-support.pl Szczyrk, 24.10.2014 dbConf 2014

description

Propozycja wystąpienia na dbConf 2014.

Transcript of MongoDB w aplikacjach lokalizacyjnych

Page 1: MongoDB w aplikacjach lokalizacyjnych

SystemyInformacji Przestrzennej

MongoDB w aplikacjach

lokalizacyjnych

Michał Mackiewiczwww.gis-support.pl

Szczyrk, 24.10.2014dbConf 2014

Page 2: MongoDB w aplikacjach lokalizacyjnych

SystemyInformacji Przestrzennej

Dane przestrzenne

Page 3: MongoDB w aplikacjach lokalizacyjnych

SystemyInformacji Przestrzennej

Ziemia nie jest płaska

1 stopień szerokości

1 stopień długości

Page 4: MongoDB w aplikacjach lokalizacyjnych

SystemyInformacji Przestrzennej

Tradycyjne podejście

SpatiaLite

Page 5: MongoDB w aplikacjach lokalizacyjnych

SystemyInformacji Przestrzennej

Tagi zamiast atrybutów

Page 6: MongoDB w aplikacjach lokalizacyjnych

SystemyInformacji Przestrzennej

Format GeoJSON

Page 7: MongoDB w aplikacjach lokalizacyjnych

SystemyInformacji Przestrzennej

Wsparcie w MongoDB

● Przed wersją 2.4 jedynie współrzędne 2D punktów● Od wersji 2.4 – pełne wsparcie dla GeoJSON

Page 8: MongoDB w aplikacjach lokalizacyjnych

SystemyInformacji Przestrzennej

Dostępne typy

GeoJSON

Legacy coordinate pairs

● Point● LineString● Polygon

● MultiPoint● MultiLineString● MultiPolygon● GeometryCollection

Tylko dane punktowe

Dodane w 2.6

Od wersji 2.4

Page 9: MongoDB w aplikacjach lokalizacyjnych

SystemyInformacji Przestrzennej

Dostępne indeksy

2dsphere

2d

Uwzględnia krzywiznę ZiemiDostępny dla GeoJSON i legacy coordinate pairs

Nie uwzglęgnia krzywizny ZiemiTylko dla legacy coordinate pairs

db.<collection>.ensureIndex({ '<location>':'2dsphere'})

db.<collection>.ensureIndex({ '<location>':'2d'})

Page 10: MongoDB w aplikacjach lokalizacyjnych

SystemyInformacji Przestrzennej

Dostępne zapytania

●$geoWithin●$geoIntersects●$near / $nearSphere

Page 11: MongoDB w aplikacjach lokalizacyjnych

SystemyInformacji Przestrzennej

Operator within

Odpowiednik SQL: ST_Within(geometry A, geometry B)

db.<collection>.find( { <location> : { $geoWithin : { $geometry : { type : "Polygon" , coordinates : [ ] } } } } )

Page 12: MongoDB w aplikacjach lokalizacyjnych

SystemyInformacji Przestrzennej

Operator intersects

Odpowiednik SQL: ST_Intersects(geometry A, geometry B)

db.<collection>.find( { <location> : { $geoIntersects : { $geometry : { type : "..." , coordinates : [... ] } } } } )

Page 13: MongoDB w aplikacjach lokalizacyjnych

SystemyInformacji Przestrzennej

Operator near

Odpowiednik SQL: ST_DWithin(geometry A, geometry B, distance)

{ $nearSphere: { $geometry: { type : "Point", coordinates : [ ... ] }, $minDistance: <optional>, $maxDistance: <optional> }}

Page 14: MongoDB w aplikacjach lokalizacyjnych

SystemyInformacji Przestrzennej

Użycie dysku

● Miejscowości z Państwowego Rejestru Nazw Geograficznych(punkty,190041 wpisów, 50 atrybutów):PostGIS 106 MB, MongoDB 368 MB

● Granice gmin z Państwowego Rejestru Granic (obszary, 2482 wpisów, 30 atrybutów):PostGIS 86 MB, MongoDB 235 MB

● Obszary właściwości Urzędów Skarbowych z PRG (obszary, 379 wpisów, 30 atrybutów):PostGIS 35 MB, MongoDB 98 MB

● Losowe punkty (punkty, 65536 wpisów, 0 atrybutów):PostGIS 0,4 MB, MongoDB 15 MB

Page 15: MongoDB w aplikacjach lokalizacyjnych

SystemyInformacji Przestrzennej

Wydajność - zapis

Dane testowe: 65536 punktów GeoJSONNa tabeli / kolekcji utworzony indeks przestrzenny GiST/ 2dsphere

PostGIS – 1638 op /s MongoDB – 2182 op/s

Page 16: MongoDB w aplikacjach lokalizacyjnych

SystemyInformacji Przestrzennej

Wydajność – najbliższy punkt

PostGIS – 778 op /s MongoDB – 1596 op/s

Dane testowe: 65536 losowych punktów GeoJSON vs miejscowości z Państwowego Rejestru Nazw Geograficznych (190041 wpisów)Z indeksem przestrzennym GiST / 2dsphereMaksymalna odległość 1000 m

Page 17: MongoDB w aplikacjach lokalizacyjnych

SystemyInformacji Przestrzennej

Wydajność – zawieranie się w obszarze

Dane testowe: 1024 losowe punkty GeoJSON vsobszary właściwości Urzędów Skarbowych z Państwowego Rejestru Granic (379 wpisów)

MongoDB – 11 op /sPostGIS – 54 op/s

Page 18: MongoDB w aplikacjach lokalizacyjnych

SystemyInformacji Przestrzennej

Wydajność – uwagi

● Porównanie nie ma charakteru ścisłego!● Przy operacjach INSERT PostGIS jest szybszy, gdy wszystkie

operacje są w jednej transakcji● Przy poszukiwaniu najbliższego punktu PostGIS jest szybszy, gdy

użyje się współrzędnych płaskich

Page 19: MongoDB w aplikacjach lokalizacyjnych

SystemyInformacji Przestrzennej

Uwaga na nieprawidłowe geometrie

Geometrie samoprzecinające się (self-intersect)„Bagnet”

Najczęstsze błędy:

Page 20: MongoDB w aplikacjach lokalizacyjnych

SystemyInformacji Przestrzennej

Kiedy warto?

● Użycie dowolnych tagów● Aplikacje webowe● Duża liczba operacji zapisu● Replikacja● Brak przetworzeń geometrii po

stronie bazy danych● Użycie formatu GeoJSON w

aplikacji

Page 21: MongoDB w aplikacjach lokalizacyjnych

SystemyInformacji Przestrzennej

Kiedy nie warto?

● Znany i niezmienny schemat● Współpraca z aplikacjami DesktopGIS● Konieczność stosowania standardów

OGC● Bardziej skomplikowane zapytania

przestrzenne● Wykonywanie operacji na geometriach

po stronie bazy danych

Page 22: MongoDB w aplikacjach lokalizacyjnych

Dziękuję za uwagę.