Ich schreibe eine datenintensive Webanwendung, die über Apache bereitgestellt wird. Meine Frage ist, wie die Verarbeitung am besten arrangiert werden kann, da es mehrere Optionen gibt.
Ich habe OpenLayers / JQuery / Javascript, PostGIS / Postgresql (mit pgsql), Python / Psycopg2, PHP zur Verfügung.
Die Datenbank enthält ungefähr 3 Millionen Zeilen und der Prototyp läuft derzeit wie folgt:
Der Benutzer klickt auf einen Punkt im OpenLayers-Fenster
Die Koordinate wird als AJAX-Anforderung an eine Python-Funktion auf dem Server gesendet
Derzeit ist meine Bewerbung zustandslos
Pythons psycopg2 wird verwendet, um eine gespeicherte pgsql-Prozedur aufzurufen, und ein größerer Satz von WKT-Werten (und ein Datenfeld) werden an das Python-Modul zurückgegeben
Das Datenfeld wird verwendet, um die WKT-Datensätze in Python wie folgt zu kategorisieren: Alle WKT-Werte werden in eine von 5 Gruppen eingeteilt. Etwa 1% der WKT-Werte werden tatsächlich geändert.
Die fünf Sätze / Gruppen von WKT werden gepuffert, um fünf verschiedene Polygone zu erstellen. Ich rufe derzeit eine gespeicherte Prozedur in der Datenbank auf, um dies zu tun. Dies wiederum verwendet nur ST_BUFFER. (Ich habe überlegt, Shapely zu verwenden, bin mir aber nicht sicher, ob es einen Leistungsvorteil gibt, da in beiden Fällen die GEOS-Bibliothek verwendet wird ...)
Schließlich werden die 5 WKT-Textwerte in eine JSON-Zeichenfolge eingeschlossen und zum Rendern als fünf Ebenen an OpenLayers zurückgesendet.
Ich stelle fest, dass die Engpässe die anfängliche räumliche Suche und die letzte Pufferstufe sind.
Ich denke die Frage ist:
Gibt es eine bessere Möglichkeit, Dinge zu arrangieren? Sollte beispielsweise die gesamte Datenverarbeitung in PostgreSQL erfolgen (z. B. mit Cursorn), und ist dies eine gute Sache in Bezug auf Wartung und Leistung? Wäre es besser, einen Kachelserver zu verwenden, um zu vermeiden, dass lange WKT-Zeichenfolgen an den Webclient übergeben werden? Wie würden Sie es ansprechen?