4Developers 2015: Wybrane podatności w aplikacjach webowych - Michał Sajdak
MongoDB w aplikacjach lokalizacyjnych
-
Upload
michal-mackiewicz -
Category
Data & Analytics
-
view
223 -
download
0
description
Transcript of MongoDB w aplikacjach lokalizacyjnych
SystemyInformacji Przestrzennej
MongoDB w aplikacjach
lokalizacyjnych
Michał Mackiewiczwww.gis-support.pl
Szczyrk, 24.10.2014dbConf 2014
SystemyInformacji Przestrzennej
Dane przestrzenne
SystemyInformacji Przestrzennej
Ziemia nie jest płaska
1 stopień szerokości
1 stopień długości
SystemyInformacji Przestrzennej
Tradycyjne podejście
SpatiaLite
SystemyInformacji Przestrzennej
Tagi zamiast atrybutów
SystemyInformacji Przestrzennej
Format GeoJSON
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
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
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'})
SystemyInformacji Przestrzennej
Dostępne zapytania
●$geoWithin●$geoIntersects●$near / $nearSphere
SystemyInformacji Przestrzennej
Operator within
Odpowiednik SQL: ST_Within(geometry A, geometry B)
db.<collection>.find( { <location> : { $geoWithin : { $geometry : { type : "Polygon" , coordinates : [ ] } } } } )
SystemyInformacji Przestrzennej
Operator intersects
Odpowiednik SQL: ST_Intersects(geometry A, geometry B)
db.<collection>.find( { <location> : { $geoIntersects : { $geometry : { type : "..." , coordinates : [... ] } } } } )
SystemyInformacji Przestrzennej
Operator near
Odpowiednik SQL: ST_DWithin(geometry A, geometry B, distance)
{ $nearSphere: { $geometry: { type : "Point", coordinates : [ ... ] }, $minDistance: <optional>, $maxDistance: <optional> }}
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
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
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
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
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
SystemyInformacji Przestrzennej
Uwaga na nieprawidłowe geometrie
Geometrie samoprzecinające się (self-intersect)„Bagnet”
Najczęstsze błędy:
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
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
Dziękuję za uwagę.