오픈 소스 Python / PostGIS 프로토 타입을위한 최고의 디자인


9

아파치를 통해 전달되는 데이터 집약적 웹 응용 프로그램을 작성 중입니다. 내 질문은 여러 옵션이있을 때 처리를 가장 잘 준비하는 방법에 관한 것입니다.

OpenLayers / JQuery / Javascript, PostGIS / Postgresql (pgsql 포함), python / psycopg2, php가 있습니다.

데이터베이스에는 약 3 백만 개의 행이 있으며 현재 프로토 타입은 다음과 같이 실행됩니다.

  • 사용자가 OpenLayers 창에서 특정 지점을 클릭

  • 좌표는 서버의 파이썬 함수에 AJAX 요청으로 전송됩니다.

  • 현재 내 응용 프로그램은 상태 비 저장입니다

  • Python의 psycopg2는 pgsql 저장 프로 시저를 호출하는 데 사용되며 지연된 WKT 값 세트 (및 데이터 필드)가 Python 모듈로 다시 리턴됩니다.

  • 데이터 필드는 다음과 같이 파이썬에서 WKT 레코드를 분류하는 데 사용됩니다. 모든 WKT 값은 5 개 그룹 중 하나로 분류됩니다. WKT 값의 약 1 %가 실제로 수정됩니다.

  • 5 개의 WKT 세트 / 그룹은 5 개의 별개의 다각형을 만들기 위해 버퍼링됩니다. 현재 데이터베이스에서 저장 프로 시저를 호출 하여이 작업을 수행합니다. 차례로 ST_BUFFER 만 사용합니다. (Shapely 사용을 고려했지만 GEOS 라이브러리가 어느 경우 에나 사용되므로 성능상의 이점이 있는지 확실하지 않습니다 ...)

  • 마지막으로 5 개의 WKT 텍스트 값이 JSON 문자열로 래핑되고 OpenLayers로 다시 전송되어 5 개의 레이어로 렌더링됩니다.

병목 현상이 초기 공간 검색 및 최종 버퍼링 단계라는 것을 알았습니다.

나는 질문이 다음과 같다고 생각한다.

물건을 정리하는 더 좋은 방법이 있습니까? 예를 들어, 모든 데이터 처리는 PostgreSQL에서 수행해야합니까 (예 : 커서 사용) 유지 관리 및 성능 측면에서 좋은 것입니까? 긴 WKT 문자열을 웹 클라이언트에 전달하지 않도록 타일 서버를 사용하는 것이 더 좋습니까? 어떻게 해결하겠습니까?


버퍼는 항상 같은 거리 또는 사용자 입력을 기준으로합니까? 파이썬이나 원본 테이블에서 제출 한 데이터에 대해 저장 프로 시저를 버퍼링합니까? 또한 달성하려는 것에 대한 아이디어를 갖는 것이 유용합니다.
Matthew Snape

Matthew-주행 시간 다각형을 만들려고합니다. 오목 다각형에 대해 알고 있지만 주로 정확도를 높이기 위해 이런 식으로 시도하고 싶었습니다. 다각형은 200m의 MultiLinestring 버퍼입니다 (즉, 도로). 나는 현재 데이터베이스의 모든 도로를 사전 버퍼링한다는 아이디어를 가지고 놀고 있지만 여전히 병합해야합니다. \ n #
John Steedman

좀 더 일반적으로 Google은 물론 Google의 빠른 속도는 아니지만 오늘날의 사용자의 기대로 인식 할 수있는 반응 형 웹 사용자 인터페이스와 매우 집중적 인 지리 처리의 균형을 유지하는 아키텍처를 찾고 싶습니다! 이것은 몇 명의 고급 사용자를위한 것입니다.
John Steedman

답변:


3

버퍼링 병목

ST_Buffer를 사용할 때 더 낮은 num_seg_quarter_circle 옵션을 추가하여 결과 모양의 복잡성을 줄일 수 있습니다. 버퍼링 및 후속 작업에서 처리량을 줄여야합니다.

PostGIS 문서에서 :

여기에 이미지 설명을 입력하십시오

일반적으로 PostGIS에서는 올바르게 인덱스 된 기존 테이블에 대해 쿼리를 실행하면 성능이 향상됩니다. 이를 통해 여러 최적화 (예 : 클러스터링)에 쉽게 액세스 할 수 있습니다. 별도로 변경되는 1 %를 처리하고 마지막에 둘을 병합하는 것을 고려하십시오.


2

아키텍처에 대해 전혀 생각하지 않고 모든 웹 매핑 응용 프로그램에 대해 미리 많은 처리 작업을 수행하려고합니다. 즉, 가능한 경우 버퍼를 미리 계산해야하고 모든 데이터가 출력 SRS 등에 있어야합니다. 분명히 일부 데이터와 계산은 동적이어야합니다.

파이썬 이외에도 MapServer와 Geoserver를보고 계산을 수행하고 출력을 생성하는 것이 좋습니다. 둘 다 이미지 타일 또는 GeoJSON 출력을 생성 할 수 있습니다. 두 응용 프로그램 모두 PostGIS를 백엔드로 사용할 수 있습니다.


고마워, 데이빗 그것은 내가 나 자신을 향해 표류하고있는 좋은 정책처럼 들린다. 이미지 타일에 대해 GeoServer를 살펴 보겠습니다. 나는 이것을 위해 과거에 python / mapnik을 사용했습니다.
John Steedman

내가 찾은 또 다른 것은 저장 프로 시저를 통해 행을 반환하는 것이 매우 (매우) 느리다는 것입니다.
John Steedman
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.