GeoDjango + PostGIS를 사용하여 공간 순위 지정 응용 프로그램을 개발 중입니다. 기본적으로 쿼리 경계 상자 내의 모든 지오메트리를 검색하고, 내가 만든 사용자 지정 함수를 사용하여 유사도 점수를 계산 한 다음 가장 많이 점수가 지정된 도형을 반환합니다.GeoDjango : GEOS Geometry 작업의 속도 향상
현재 각 쿼리의 왕복 시간은 매우 느립니다. 실행 프로파일 러는 내 유사성 기능 내에서 GEOSGeometry
작업 (즉, 교차, 합집합, 포함 등)으로 호출되는 병목 현상이 threadsafe.py
임을 보여줍니다. 단일 쿼리의 예제는 profiler result입니다. GEOSGeometry
의 스레드 안전 특성이 성능 문제를 일으키는 원인 인 것처럼 보입니다. 개별적으로, 40ms가 걸리는 작업은 그리 큰 문제는 아니지만 쿼리와 비교할 모양의 수가 보통 ~ 1000 개이므로 40ms 작업으로 최대 40 초가 소요됩니다.
따라서 제 질문은 처리 시간을 최소화하기 위해 함수를 최적화 할 수있는 방법입니다. 내 초기 아이디어 중 일부는 다음과 같습니다 이러한 개체가 과도하고 다른 스레드에 공유되지 않는 한
-
는
- . 가능한 많은 시간이 소요되는 이상적인 경우입니다.
threadsafe.py
- treadsafe가 아닌 다른 지오메트리 API를 사용하십시오.
-
오브젝트 레벨 대신 PostGIS 레벨에서 공간 조작을 수행하십시오. 이렇게하면 코드가보기 흉하게 보이게됩니다.(업데이트 :.이 옵션은 작동하지 않습니다 만 SQL 쿼리의 오버 헤드도 느린 동작합니다.)
GEOSGeometry
의 theadsafety 검사를 피하기 온/오프십시오
당신의 생각은 무엇입니까?
않는 긴처럼 긴 위도 사용하고 LAT 없습니다. 'GDALGeometry'는 threadsafe.py에 의지하는 것으로 나타 났고 결과적으로 더 나쁜 결과를냅니다. – ejel