Diskussion:EOSMDBOne: Unterschied zwischen den Versionen

Aus Geoinformation HSR
Wechseln zu: Navigation, Suche
K (Task List)
 
(29 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
 +
== Knowhow ==
 +
 +
* Negative OSM-IDs sind
 +
* Extraktion eines Planet-File-Subsets und periodisches Aktuell-halten: http://oegeo.wordpress.com/2012/03/06/a-self-updating-openstreetmap-database-of-us-bridges-a-step-by-step-guide/
 +
 +
== Abbildung auf node/way/relation ==
 +
 +
...
 +
 +
* http://www.openstreetmap.org/api/0.6/node/2147480969
 +
* http://www.openstreetmap.org/api/0.6/way/35177096/full
 +
* http://www.openstreetmap.org/api/0.6/relation/301636/full
 +
 
== Task List ==
 
== Task List ==
  
 
Siehe auch [[Diskussion:PostGIS Terminal#Task List]].
 
Siehe auch [[Diskussion:PostGIS Terminal#Task List]].
  
* <s>Nightly-Update-Skript wieder aktivieren.</s>
 
 
* Load-Skript / Schema:
 
* Load-Skript / Schema:
** <s>Attribut osm_version beim Import in Tabelle osm_poi hinzufügen.</s>
+
** Performance Optimization durch UNION ALL statt UNION? --[[Benutzer:Stefan|Stefan]] 08:10, 11. Dez. 2014 (CET)
 +
** <s>Attribut osm_version beim Import in Tabelle osm_poi hinzufügen.</s>  
 +
** <s>Werte von osm_version sind leer!</s> (war ein osm2pgsql-Versions-Problem)
 +
** Tabelle geometry_columns ist outdated! Tabellen osm_all und osm_poi in geometry_columns "registrieren" (mittels "SELECT Populate_Geometry_Columns();") und geometry_columns read-only zugreifbar machen.
 +
** Die Views osm_all_v,osm_poi_v nicht auflisten in about-db-query.php und Permissions entziehen.
 
** <s>Inhalte/Werte von osm_version in Tabellen osm_all und osm_poi kontrollieren (bei osm_all sind alle leer).</s>
 
** <s>Inhalte/Werte von osm_version in Tabellen osm_all und osm_poi kontrollieren (bei osm_all sind alle leer).</s>
 
** <s>Tabelle osm_rels ist weg, verloren gegangen? => wieder herstellen.</s>
 
** <s>Tabelle osm_rels ist weg, verloren gegangen? => wieder herstellen.</s>
 
** <s>Tabelle osm_roads => löschen/streichen aus default-style?</s>
 
** <s>Tabelle osm_roads => löschen/streichen aus default-style?</s>
** Ev. doch Indexe auf osm_all und osm_poi zu erstellen versuchen? (für SAler)
+
** <s>Umstellen des Download-Zeitpunkts von switzerland.osm.pbf ab Geofabrik von zurzeit nach 3 Uhr neu auf 4:04 Uhr.</s>
** Tabellen osm_all und osm_poi in geometry_columns "registrieren" (mittels "SELECT Populate_Geometry_Columns();") und geometry_columns read-only zugreifbar machen.
+
* Mit ALTER ROLE... die CONNECTION LIMIT herabsetzen (z.B. auf 5?): http://www.postgresql.org/docs/current/static/sql-alterrole.html
* Dokumentation (vgl. unten) kontrollieren und ggf. ergänzen.
+
* Connection Pooling: pgpool oder pgbouncer (oder ganz etwas anderes)? Siehe  http://wiki.postgresql.org/wiki/Replication,_Clustering,_and_Connection_Pooling#Connection_Pooling_and_Acceleration
 +
* about-db-query.php:
 +
** Rückgabe Datum und neu Zeit (Aktualisieren PostGIS Terminal und OpenPOIMap)  
 +
** Signalisieren, dass DB offline ist (Aktualisieren PostGIS Terminal und OpenPOIMap)  
 +
** Rückgabe der Tabellen untereinander auf einzelnen Zeilen
  
 
== Feature Requests ==
 
== Feature Requests ==
  
* Speed, speed, speed...
+
Feature Requests:
** Test sobald 9.1 insalliert (und GiST unterstützt wird): Unlogged Tables. Beschleunigen die Lade-Phase (INSERT).
+
* Mit wget testen, ob neuer Extrakt bei Geofrabrik vorhanden ist und dann gleich starten.
** Fast GiST index build
+
* Bei Tabelle osm_poi doppelte Einträge elimineren, die z.T. von den Daten kommen, z.T. durch das Skript entstehen:
 +
** tbd.
 +
** Schritt 1: Finden gleichartiger Tags:
 +
  SELECT DISTINCT ta.osm_id, ta.gtype, tb.osm_id, tb.gtype, ST_Distance(ta.way,tb.way), ST_AsText(ta.way)
 +
  FROM osm_poi ta, osm_poi tb
 +
  WHERE ta.osm_id!=tb.osm_id
 +
  AND ta.tags @> hstore('amenity', 'bicycle_parking')
 +
  AND tb.tags @> hstore('amenity', 'bicycle_parking')
 +
  AND ST_DWithin(ta.way,tb.way,7)
 +
  AND ST_Contains(mapextent(), ta.way)
 +
  ORDER BY 1
 +
** Schritt 2: Löschen...
 +
 
 +
Ideen (grössere Requests):
 +
* Inkrementeller Update?
 +
* Tests mit [http://postgresql.1045698.n5.nabble.com/pg-prewarm-td5549608.html pg_prewarm] (Alternative [https://github.com/klando/pgfincore pgfincore] UNIX-only ), um Memory "aufzuwärmen"!
 +
 
 +
Speed, speed, speed...  
 +
* AUTOVACUUM / AUTOANALYSE abschalten
 +
* Sobald 9.1 installiert ist:
 +
** Unlogged Tables
 +
** Beschleunigen der Lade-Phase (Fast INSERTs). Fast GiST index build. (ab 9.1)
 +
** WAL-Log abschalten (ab 9.1)
 +
* Ab 9.3? Falls GiST unterstützt wird: Index-only Scans (vgl. pgsql-hackers.postgresql.org)
 +
* QGIS verlangt Unique Id's, also für jede Tabelle
 +
  ALTER TABLE planet_osm_point ADD COLUMN pid serial;
 +
  ALTER TABLE planet_osm_point ADD CONSTRAINT pid_pkey_point PRIMARY KEY (pid);
 +
 
 +
== Monitoring ==
 +
 
 +
Kontrolle der Dateninhalte (Werte von osm_version fehlen):
 +
  select osm_id, name, osm_version, tags->'version' as version, tags from osm_point
 +
  where name is not null
 +
  order by osm_id desc
 +
  limit 10
 +
 
 +
Neuster Eintrag in der EOSMDBone:
 +
  select max(id) from osm_nodes; !! Aufruf am 26.10, 21 Uhr
 +
  => 1479411461
 +
  EOSMDBone enthält kein Datum, daher http://www.openstreetmap.org/browse/node/1479411461
 +
  => Bearbeitet am Montag, 24. Oktober 2011, 19:28 Uhr
  
 
== Documentation ==
 
== Documentation ==

Aktuelle Version vom 11. Februar 2015, 17:37 Uhr

Knowhow

Abbildung auf node/way/relation

...

Task List

Siehe auch Diskussion:PostGIS Terminal#Task List.

  • Load-Skript / Schema:
    • Performance Optimization durch UNION ALL statt UNION? --Stefan 08:10, 11. Dez. 2014 (CET)
    • Attribut osm_version beim Import in Tabelle osm_poi hinzufügen.
    • Werte von osm_version sind leer! (war ein osm2pgsql-Versions-Problem)
    • Tabelle geometry_columns ist outdated! Tabellen osm_all und osm_poi in geometry_columns "registrieren" (mittels "SELECT Populate_Geometry_Columns();") und geometry_columns read-only zugreifbar machen.
    • Die Views osm_all_v,osm_poi_v nicht auflisten in about-db-query.php und Permissions entziehen.
    • Inhalte/Werte von osm_version in Tabellen osm_all und osm_poi kontrollieren (bei osm_all sind alle leer).
    • Tabelle osm_rels ist weg, verloren gegangen? => wieder herstellen.
    • Tabelle osm_roads => löschen/streichen aus default-style?
    • Umstellen des Download-Zeitpunkts von switzerland.osm.pbf ab Geofabrik von zurzeit nach 3 Uhr neu auf 4:04 Uhr.
  • Mit ALTER ROLE... die CONNECTION LIMIT herabsetzen (z.B. auf 5?): http://www.postgresql.org/docs/current/static/sql-alterrole.html
  • Connection Pooling: pgpool oder pgbouncer (oder ganz etwas anderes)? Siehe http://wiki.postgresql.org/wiki/Replication,_Clustering,_and_Connection_Pooling#Connection_Pooling_and_Acceleration
  • about-db-query.php:
    • Rückgabe Datum und neu Zeit (Aktualisieren PostGIS Terminal und OpenPOIMap)
    • Signalisieren, dass DB offline ist (Aktualisieren PostGIS Terminal und OpenPOIMap)
    • Rückgabe der Tabellen untereinander auf einzelnen Zeilen

Feature Requests

Feature Requests:

  • Mit wget testen, ob neuer Extrakt bei Geofrabrik vorhanden ist und dann gleich starten.
  • Bei Tabelle osm_poi doppelte Einträge elimineren, die z.T. von den Daten kommen, z.T. durch das Skript entstehen:
    • tbd.
    • Schritt 1: Finden gleichartiger Tags:
 SELECT DISTINCT ta.osm_id, ta.gtype, tb.osm_id, tb.gtype, ST_Distance(ta.way,tb.way), ST_AsText(ta.way)
 FROM osm_poi ta, osm_poi tb
 WHERE ta.osm_id!=tb.osm_id
 AND ta.tags @> hstore('amenity', 'bicycle_parking')
 AND tb.tags @> hstore('amenity', 'bicycle_parking')
 AND ST_DWithin(ta.way,tb.way,7)
 AND ST_Contains(mapextent(), ta.way)
 ORDER BY 1
    • Schritt 2: Löschen...

Ideen (grössere Requests):

  • Inkrementeller Update?
  • Tests mit pg_prewarm (Alternative pgfincore UNIX-only ), um Memory "aufzuwärmen"!

Speed, speed, speed...

  • AUTOVACUUM / AUTOANALYSE abschalten
  • Sobald 9.1 installiert ist:
    • Unlogged Tables
    • Beschleunigen der Lade-Phase (Fast INSERTs). Fast GiST index build. (ab 9.1)
    • WAL-Log abschalten (ab 9.1)
  • Ab 9.3? Falls GiST unterstützt wird: Index-only Scans (vgl. pgsql-hackers.postgresql.org)
  • QGIS verlangt Unique Id's, also für jede Tabelle
 ALTER TABLE planet_osm_point ADD COLUMN pid serial;
 ALTER TABLE planet_osm_point ADD CONSTRAINT pid_pkey_point PRIMARY KEY (pid);

Monitoring

Kontrolle der Dateninhalte (Werte von osm_version fehlen):

 select osm_id, name, osm_version, tags->'version' as version, tags from osm_point
 where name is not null
 order by osm_id desc
 limit 10

Neuster Eintrag in der EOSMDBone:

 select max(id) from osm_nodes; !! Aufruf am 26.10, 21 Uhr
 => 1479411461 
 EOSMDBone enthält kein Datum, daher http://www.openstreetmap.org/browse/node/1479411461
 => Bearbeitet am Montag, 24. Oktober 2011, 19:28 Uhr

Documentation

Allgemeines

  • Nightly Update: Einrichten eines Cron-Jobs, der einmal pro Nacht die Schweiz neu einspielt. -- realisiert


Security Features

Siehe auch die Security Features auf Diskussion:PostGIS_Terminal.

GRANTS: Rechte entziehen, damit User Tables und Views nicht erzeugen oder löschen können!

 Schema nicht PUBLIC? Test: create table customer (id serial, name text); drop table customer; !!!
 Konfigurieren PostgreSQL Server (postgresql.conf parameters): Disabling autovacuum daemon, fsync=off etc.


Data Features

  • Ev. Zusätzliche Views, Tabellen und Indexes anlegen.
  • Prüfen was schneller ist: DROP osm_node und all das CREATE... oder TRUNCATE TABLE osm_node und INSERT...
  • Associative Array: hstore (-h Parameter bei osm2pgsql) -- realisiert

Zusätzliche Tables, Views und Indexes:

 ----------
 -- osm_all
 CREATE OR REPLACE VIEW osm_all_v (id, name, tags, gtype, osm_version, way) AS 
 SELECT osm_id, name, tags, 'pt', osm_version, way
 FROM osm_point
 UNION
 SELECT osm_id, name, tags, 'ln', osm_version, way
 FROM osm_line
 UNION
 SELECT osm_id, name, tags, 'po', osm_version, way
 FROM osm_polygon
 
 CREATE OR REPLACE TABLE osm_all AS (SELECT * FROM osm_all_v);
 
 CREATE INDEX osm_all_name_idx
 ON osm_all(name) WITH (FILLFACTOR=100);
 CREATE INDEX osm_all_tags_idx
 ON osm_point USING gist(tags) WITH (FILLFACTOR=100); -- Kann "FEHLER:  invalid hstore value found" ergeben!
 -- CLUSTER osm_poi USING ; --?
 
 ----------
 -- osm_poi
 CREATE OR REPLACE VIEW osm_poi_v (id, name, tags, gtype, osm_version, way) AS 
 SELECT osm_id, name, tags, 'pt', osm_version, way
 FROM osm_point
 UNION
 SELECT osm_id, name, tags, 'po', osm_version, ST_Centroid(way)
 FROM osm_polygon
 
 CREATE OR REPLACE TABLE osm_poi AS (SELECT * FROM osm_poi_v);
 
 CREATE INDEX osm_poi_name_idx
 ON osm_poi(name) WITH (FILLFACTOR=100);
 CREATE INDEX osm_poi_tags_idx
 ON osm_poi USING gist(tags) WITH (FILLFACTOR=100); -- Kann "FEHLER:  invalid hstore value found" ergeben!
 -- CLUSTER osm_poi USING ; --?
 ----------------
 -- Cleanup DB...
 VACUUM FREEZE ANALYZE;  -- das kann dauern...

Funktion, die möglichst effizient schaut, ob Daten in der einer Tabelle sind (z.B. als Basis für einen RESTful-Aufruf eines externen Monitors):

 CREATE OR REPLACE FUNCTION osm_point_not_empty() RETURNS boolean AS '
 SELECT EXISTS (SELECT osm_id FROM osm_point LIMIT 1 OFFSET 100000); ' LANGUAGE SQL;
 -- Undo: DROP FUNCTION osm_point_not_empty();
 -- Test: SELECT osm_point_not_empty();