나의 위치(127.026993, 37.497933)에서 반경 150m 내에 있는 맛집을 찾고 싶다. 구글 맵상으로 아래와 같이 나타낼 수 있다.
키는 "restaurant"이다. GEO API에서 key는 하나 이상의 멤버를 포함 할 수 있는 "그룹의 키"다. 즉 5개의 식당을 멤버로 가지는 restaurant 키를 만든 경우다.
GEORADIUS 명령을 이용해서 검색을 했다.
Redis는 GeoHash로 공간 정보를 색인한다. GeoHash는 생성된 해시 값을 B-Tree의 키로 저장하고 읽을 수 있다. 구현이 쉬운 것에 비해서, 읽기/쓰기 성능이 좋기 때문에 CouchDB, ElasticSearch 등의 데이터베이스도 GeoHash를 지원한다.
GeoHash는 빠르기는 하지만, 고정된 사각형안에 위치정보들이 들어가기 때문에 거리 기반의 쿼리를 내릴 경우 정확도가 떨어질 수 있다. Redis는 이 문제를 인접한 GeoHash 데이터까지 추가적으로 가져와서 연산하는 방식으로 해결 하고 있다. GeoHash 테스터를 이용해서 테스트해 볼 수 있다.
GeoHash의 또 다른 장점은 Consistent Hash를 이용한 분산처리가 쉽다는 점이다. 어떤 위치에 대한 질의가 있으면, 해당 질의를 처리 하는 특정노드로 라우팅 할 수 있다. 이러한 특징을 이용하면 각 지역별로 작동하는 고속의 위치 서비스를 개발 할 수 있다.
Contents
REDIS Geo API
주요 API
주변 맛집 찾기 시스템 개발
Redis와 GeoHashing
참고
Recent Posts
Archive Posts
Tags