Diskussion:EOSMDBOne: Unterschied zwischen den Versionen
Aus Geoinformation HSR
Stefan (Diskussion | Beiträge) (→ToDos) |
Stefan (Diskussion | Beiträge) K (→Task List) |
||
(39 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 == |
− | * Attribut osm_version beim Import in Tabelle osm_poi hinzufügen. | + | |
− | * Werte von osm_version in Tabellen osm_all und osm_poi kontrollieren (bei osm_all sind alle leer). | + | ... |
− | * Tabelle osm_roads => löschen/streichen aus default-style? | + | |
− | * | + | * 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 == | ||
+ | |||
+ | Siehe auch [[Diskussion:PostGIS Terminal#Task List]]. | ||
+ | |||
+ | * Load-Skript / Schema: | ||
+ | ** 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>Tabelle osm_rels ist weg, verloren gegangen? => wieder herstellen.</s> | ||
+ | ** <s>Tabelle osm_roads => löschen/streichen aus default-style?</s> | ||
+ | ** <s>Umstellen des Download-Zeitpunkts von switzerland.osm.pbf ab Geofabrik von zurzeit nach 3 Uhr neu auf 4:04 Uhr.</s> | ||
+ | * 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 == | ||
− | tbd. | + | 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 [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
Inhaltsverzeichnis
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
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();