피드로 돌아가기
Dev.toDatabase
원문 읽기
PostGIS CRS 최적화와 Redis GEO 도입으로 쿼리 속도 400배 개선
Spatial Search Performance: How I Got 100x Faster Queries With PostGIS and Redis GEO
AI 요약
Context
PostGIS GIST 인덱스를 사용함에도 10,000개 데이터셋에서 반경 1km 검색 쿼리가 8초 소요되는 성능 병목 발생. WGS84(SRID 4326) 좌표계의 도(degree) 단위 계산 방식이 인덱스 효율을 저하시키는 구조적 한계 확인.
Technical Solution
- 저장용 WGS84(4326)와 쿼리용 Web Mercator(3857) 좌표계를 분리한 Dual-column 전략 채택
- 미터(meter) 단위의 정밀한 거리 계산을 위해 ST_Transform을 통한 Projected Coordinate System 적용
- Redis GEO를 활용한 1차 Candidate ID 필터링 레이어 구축으로 DB I/O 부하 감소
- Redis에서 추출한 ID 기반으로 Postgres에서 PK Look-up을 수행하는 2단계 조회 아키텍처 설계
- 빈번한 핫존(Hot Zone) 쿼리에 대해 JSON 결과물을 5분간 캐싱하는 전략 적용
- 데이터 정합성 확보를 위해 Postgres 데이터를 원천으로 Redis GEO 인덱스를 재구축하는 복구 스크립트 구현
실천 포인트
1. PostGIS 사용 시 ST_DWithin의 거리 단위가 degree인지 meter인지 확인
2. 빈번한 반경 검색 쿼리 발생 시 Redis GEO를 통한 ID 기반 Pre-filtering 검토
3. SRID 4326 데이터를 3857 등 Projected CRS로 변환한 전용 컬럼 및 GIST 인덱스 생성 고려
4. EXPLAIN ANALYZE를 통해 Spatial Index가 실제로 사용되는지 상시 검증