Estou escrevendo um aplicativo Web com uso intensivo de dados que é entregue através do apache. Minha pergunta é sobre a melhor forma de organizar o processamento, pois existem várias opções.
Tenho à minha disposição OpenLayers / JQuery / Javascript, PostGIS / Postgresql (com pgsql), python / psycopg2, php.
O banco de dados contém cerca de 3 milhões de linhas e o protótipo atualmente é executado da seguinte maneira:
O usuário clica em um ponto na janela OpenLayers
A coordenada é enviada como uma solicitação AJAX para uma função python no servidor
Atualmente, meu aplicativo não tem estado
O psycopg2 do Python é usado para chamar um procedimento armazenado pgsql e um amplo conjunto de valores WKT (e um campo de dados) são retornados ao módulo python
O campo de dados é usado para categorizar os registros WKT em python da seguinte maneira: todos os valores WKT são categorizados em um dos 5 grupos. Cerca de 1% dos valores WKT são realmente modificados.
Os cinco conjuntos / grupos de WKT são armazenados em buffer para criar cinco polígonos distintos. Atualmente, chamo um procedimento armazenado no banco de dados para fazer isso. Por sua vez, apenas usa ST_BUFFER. (Eu considerei usar o Shapely, mas não tenho certeza de que haverá uma vantagem de desempenho, pois a biblioteca GEOS é usada nos dois casos ...)
Finalmente, os 5 valores de texto WKT são agrupados em uma sequência JSON e enviados de volta ao OpenLayers para renderização em cinco camadas.
Estou descobrindo que os gargalos são a pesquisa espacial inicial e o estágio final de armazenamento em buffer.
Eu acho que a pergunta é:
Existe uma maneira melhor de organizar as coisas? Por exemplo, TODO o processamento de dados deve ser feito no PostgreSQL (por exemplo, com cursores) e isso seria bom em termos de manutenção e desempenho? Seria melhor usar um servidor de mosaico para evitar a transmissão de longas seqüências WKT para o Web client? Como você abordaria isso?