๐ 2.7.2 ์ง๋ฆฌ์ ๊ณต๊ฐ ์ธ๋ฑ์ค (Geospatial Index)
๐ ๊ฐ์
์ง๋ฆฌ์ ๊ณต๊ฐ ์ ๋ณด๋ ์๋(latitude)์ ๊ฒฝ๋(longitude)๋ฅผ ์ด์ฉํด ์ง๊ตฌ์ ์์น๋ฅผ ํํํ๋ ๋ฐ์ดํฐ์ ๋๋ค.
Redis์์๋ ์ด ์ ๋ณด๋ฅผ ํ์ฉํด ์์น ๊ธฐ๋ฐ ๊ฒ์, ๊ฑฐ๋ฆฌ ๊ณ์ฐ, ๋ฐ๊ฒฝ ๋ด ๊ฒ์ ๋ฑ ๊ณต๊ฐ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ๋ค๋ฃฐ ์ ์์ต๋๋ค.
๋ด๋ถ์ ์ผ๋ก Sorted Set(์ ๋ ฌ๋ ์งํฉ) ๊ตฌ์กฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋์ํฉ๋๋ค.
๐งญ ๊ธฐ๋ณธ ๊ฐ๋
๐น ์ ์ฅ ์๋ฆฌ
์์น ์ ๋ณด๋ Sorted Set ํํ๋ก ์ ์ฅ๋๋ฉฐ, ๊ฐ ๋ฉค๋ฒ์ ์ค์ฝ์ด(score)๋ GeoHash ๊ฐ์ผ๋ก ๋ณํ๋์ด ์ ์ฅ๋ฉ๋๋ค.
GeoHash๋ ์๋ยท๊ฒฝ๋๋ฅผ ๋ฌธ์ ํํ๋ก ์ธ์ฝ๋ฉํ ๊ฐ์ผ๋ก, ๊ฐ๊น์ด ์์น์ผ์๋ก ํด์๊ฐ ์ ์ฌํ ์ ๋์ด๋ฅผ ๊ฐ์ง๋๋ค.
์์:
๋์ ์๋ ๊ฒฝ๋ GeoHash
Tokyo 35.6812362 139.7671248 xn76urx660p
Osaka 34.7024854 135.4937619 xn76um7jts9k
๐งฉ ์คํ ์์
GEOADD mygeo 139.7671248 35.6812362 "Tokyo Station" \
135.4937619 34.7024854 "Osaka Station"
(integer) 2
GEODIST mygeo "Tokyo Station" "Osaka Station"
"403362.9301"
GEOHASH mygeo "Tokyo Station"
"xn76urx660p"
TYPE ๋ช ๋ น์ด๋ก ํ์ธํ๋ฉด ๋ด๋ถ์ ์ผ๋ก zset ํ์์์ ์ ์ ์์ต๋๋ค.
TYPE mygeo
๐งฎ GeoHash์ ์๋ฆฌ
์๋์ ๊ฒฝ๋๋ฅผ ๋ฌธ์์ด(๋ณดํต Base32) ๋ก ๋ณํํ์ฌ ์ ์ฅ.
์ธ์ ์ง์ญ์ผ์๋ก ํด์ ์ ๋๋ถ๊ฐ ์ ์ฌํฉ๋๋ค.
ํด์ ์๋ฆฟ์๊ฐ ๋ง์์๋ก ์ ๋ฐ๋๊ฐ ์ฆ๊ฐํ์ง๋ง, ์์ญ ๋ฒ์๋ ์ข์์ง๋๋ค.
์:
xn76urx6 โ ๋์ฟ ๊ทผ์ฒ
xn76um7j โ ์ค์ฌ์นด ๊ทผ์ฒ
๐งฐ ์ฃผ์ ๋ช
๋ น์ด ์์ฝ
๋ช
๋ น์ด ๊ธฐ๋ฅ ์๊ฐ ๋ณต์ก๋
GEOADD key lon lat member [lon lat member ...] ์์น ์ ๋ณด ์ถ๊ฐ O(logN)
GEOPOS key member [...] ๋ฉค๋ฒ์ ์๋ยท๊ฒฝ๋ ๋ฐํ O(1)
GEODIST key m1 m2 [M KM FT
GEOHASH key member [...] GeoHash ๋ฌธ์์ด ๋ฐํ O(1)
GEOSEARCH key FROMMEMBER member BYRADIUS r M KM ...** ํน์ ๋ฐ๊ฒฝ ๋ด ์์น ๊ฒ์
GEOSEARCHSTORE dest source FROMMEMBER member BYRADIUS ... ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ๋ค๋ฅธ ํค์ ์ ์ฅ O(N + logM)
๐ ๊ฑฐ๋ฆฌ ๋จ์
๋จ์ ์ค๋ช
M ๋ฏธํฐ (๊ธฐ๋ณธ ๋จ์)
KM ํฌ๋ก๋ฏธํฐ
FT ํผํธ
MI ๋ง์ผ
๐งฎ ํ์ฉ ์์
GEOADD building-location 139.7671248 35.6812362 "Tokyo Station" \
135.4937619 34.7024854 "Osaka Station"
GEOHASH building-location "Tokyo Station" "Osaka Station"
1) "xn76urx660p"
2) "xn76um7jts9k"
GEOPOS building-location "Tokyo Station"
1) "139.76712494988577271"
2) "35.68123554127875963"
GEODIST building-location "Tokyo Station" "Osaka Station"
"403362.9301"
๐งญ ๋ฐ๊ฒฝ ๊ฒ์ (๋ฐ๊ฒฝ ๋ด ์์น ์ฐพ๊ธฐ)
GEORADIUS building-location 140 30 700 km
1) "Osaka Station"
2) "Tokyo Station"
GEORADIUS building-location 140 30 650 km
1) "Tokyo Station"
(empty array)
Tokyo์ Osaka ์ค ์ด๋ ์์น๊ฐ ๋ฐ๊ฒฝ ๋ด ํฌํจ๋๋์ง ํ๋์ ํ์ธ ๊ฐ๋ฅ.
โ๏ธ GEORADIUSBYMEMBER (๋ฉค๋ฒ ์ค์ฌ ๋ฐ๊ฒฝ ๊ฒ์)
GEORADIUSBYMEMBER building-location "Tokyo Station" 400 km
1) "Tokyo Station"
GEORADIUSBYMEMBER building-location "Tokyo Station" 410 km
1) "Osaka Station"
2) "Tokyo Station"
Tokyo๋ฅผ ์ค์ฌ์ผ๋ก 400km๊น์ง๋ ์๊ธฐ ์์ ๋ง ํฌํจ๋๊ณ ,
410km ์ด์์ด๋ฉด Osaka๊น์ง ํฌํจ๋ฉ๋๋ค.
โ ๏ธ ์ฃผ์ โ ๋ช ๋ น์ด ๋ณ๊ฒฝ
Redis 6.2 ์ดํ ๋ฒ์ ์์๋ GEORADIUS์ GEORADIUSBYMEMBER ๋ช
๋ น์ด ํ์ง ์์ ์ด๋ฉฐ,
๋์ GEOSEARCH ๋ฐ GEOSEARCHSTORE ๋ช
๋ น์ผ๋ก ๋์ฒด๋ฉ๋๋ค.
ํ์ง ์์ ๋์ฒด ๋ช
๋ น
GEORADIUS GEOSEARCH
GEORADIUSBYMEMBER GEOSEARCHSTORE
๐ ์์ฝ ์ ๋ฆฌ
ํญ๋ชฉ ์ค๋ช
์๋ฃ ๊ตฌ์กฐ ๋ด๋ถ์ ์ผ๋ก Sorted Set ์ฌ์ฉ
ํต์ฌ ๊ธฐ๋ฅ ๊ฑฐ๋ฆฌ ๊ณ์ฐ, ๋ฐ๊ฒฝ ๋ด ๊ฒ์, ์์น ์ ์ฅ
ํ์ฉ ๋ถ์ผ ๋งค์ฅ ์ฐพ๊ธฐ, ๋ฐฐ๋ฌ ๋ฐ๊ฒฝ ๊ณ์ฐ, ๊ทผ์ฒ ์ฌ์ฉ์ ๊ฒ์
ํต์ฌ ๋ช
๋ น์ด GEOADD, GEODIST, GEOHASH, GEOSEARCH, GEOSEARCHSTORE
GeoHash ์๋ยท๊ฒฝ๋๋ฅผ ๋ฌธ์์ด๋ก ๋ณํํ์ฌ ์ธ์ ์์น๋ฅผ ํํ