Große WLDGE Dateien einlesen

Aus kvwmap
Version vom 5. September 2006, 13:39 Uhr von Markus Hentschel (Diskussion | Beiträge)

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

--Pkorduan 16:57, 21. Apr 2006 (CEST)

Liebe kvwmap-Nutzer,

es gab in der Vergangenheit einige Performanceprobleme beim Einlesen der ALB-Grunddatenbestände in die Postgres-Datenbank. Es gibt zwar Optimierungsmöglichkeiten, die größte dürfte das Schreiben in Textdateien sein und dann das Einlesen nicht über einzelne INSERTS sondern über COPY, das ist aber vom Programmiertechnischen her und vom Aufbau der ALB nur mir großem Aufwand möglich. Das heißt es dauert eben seine Zeit. Problem ist aus meiner Sicht, dass das Ganze dann immer über einen http-Request läuft. Ich schlage daher für alle, bei denen es noch nicht geklapt hat den ALB-Grundbestand einzulesen, vor die Konstante DBWRITE in der config.php auf 0 zu setzen.

define('DBWRITE',1);  ->  define('DBWRITE',0);

Dann den Einlesevorgang zu starten und nach erfolgter Fertig-Meldung den Dump in die Datenbank einzulesen.

Achtung: Wenn die Konstante DBWRITE = 0 gesetzt wird, kann kvwmap nicht mehr in die 
MySQL schreiben! Die Folgen kann man sich ausmalen. Deswegen
1. die Dump-Erzeugung nur dann durchführen, wenn niemand auf das System zugreift und 
2. die Konstante nach erfolgter Fertig-Meldung unbedingt wieder auf DBWRITE = 1 setzen.

Hierbei reduziert sich der Aufwand auf dem Server auf das Schreiben der log-Datei und dieser ist linear, der Zeitverbrauch nimmt also nicht zu je mehr Daten schon in der Datenbank sind, weil ja keine mehr eingelesen werden.

z.B. WLDGE_Dump_postgresql_20060116165634.sql

Diese Datei kann man dann anschließend vom Terminal aus starten und zwar mit dem Terminal Client psql. Der Aufruf sieht in etwa so aus:

/usr/local/bin/psql -U kvwmap -f /www/kvwmap/logs/WLDGE_Dump_postgresql_20060116165634.sql kvwmapsp145

Vergewissern Sie sich jedoch vorher ob Ihr Programm psql auch unter /usr/local/bin steht. Bei einigen steht es auch unter /usr/local/pgsql/bin oder so. Hinter –U steht der Benutzer, der in die Datenbank, die ganz hinten steht schreiben darf. Nun, hier könnte also ein Prozess im Hintergrund laufen, der dann auch ein bischen länger dauern darf, ohne, dass der Web-Server warten muss oder ein php-Skript ausgeführt werden muss. Soviel zu Alternativen zum Einlesen großer WLDGE-Dateien. Noch ein Hinweis. Bei allen wo es noch zu Fehlern beim Einlesen in die postgres kommt, bitte prüfen ob die Tabellen alb_flurstuecke und alb_x_flurstuecke identische sind. Auch der Datentyp von koordrw und koordhw.