Sto scrivendo un'applicazione Web ad alta intensità di dati che viene fornita tramite apache. La mia domanda è su come organizzare al meglio l'elaborazione dato che ci sono più opzioni.
Ho a disposizione OpenLayers / JQuery / Javascript, PostGIS / Postgresql (con pgsql), python / psycopg2, php.
Il database contiene circa 3 milioni di righe e il prototipo attualmente funziona come segue:
L'utente fa clic su un punto nella finestra OpenLayers
Le coordinate vengono inviate come richiesta AJAX attraverso una funzione Python sul server
Attualmente la mia applicazione è apolide
Psycopg2 di Python viene utilizzato per richiamare una procedura memorizzata pgsql e un ampio set di valori WKT (e un campo dati) vengono restituiti al modulo python
Il campo dati viene utilizzato per classificare i record WKT in Python come segue: tutti i valori WKT sono classificati in uno dei 5 gruppi. Circa l'1% dei valori WKT viene effettivamente modificato.
I cinque set / gruppi di WKT sono bufferizzati per creare cinque poligoni distinti. Attualmente chiamo una procedura memorizzata nel database per farlo. Questo a sua volta utilizza solo ST_BUFFER. (Ho considerato l'utilizzo di Shapely ma non sono sicuro che ci sarà un vantaggio in termini di prestazioni poiché la libreria GEOS viene utilizzata in entrambi i casi ...)
Infine, i 5 valori di testo WKT sono racchiusi in una stringa JSON e rispediti a OpenLayers per il rendering in cinque livelli.
Sto scoprendo che i colli di bottiglia sono la ricerca spaziale iniziale e la fase di buffering finale.
Immagino che la domanda sia:
C'è un modo migliore per organizzare le cose? Ad esempio, TUTTO l'elaborazione dei dati dovrebbe essere eseguita in PostgreSQL (ad es. Con i cursori) e sarebbe una buona cosa in termini di manutenzione e prestazioni? Sarebbe meglio usare un server tile per evitare di passare lunghe stringhe WKT al client web? Come lo affronteresti?