<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>goblor grübelt &#187; osm2sql</title>
	<atom:link href="http://goblor.de/wp/tag/osm2sql/feed/" rel="self" type="application/rss+xml" />
	<link>http://goblor.de/wp</link>
	<description>Ein unabhängiges Denker-Blog aus Karlsruhe</description>
	<lastBuildDate>Tue, 13 Apr 2010 10:19:02 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>OpenStreetMap-Projekt: Teil1 &#8211; Openstreetmap-Daten in MySQL-Datenbank einlesen</title>
		<link>http://goblor.de/wp/2009/10/16/openstreetmap-projekt-teil-1-openstreetmap-daten-in-mysql-datenbank-einlesen/</link>
		<comments>http://goblor.de/wp/2009/10/16/openstreetmap-projekt-teil-1-openstreetmap-daten-in-mysql-datenbank-einlesen/#comments</comments>
		<pubDate>Fri, 16 Oct 2009 18:40:24 +0000</pubDate>
		<dc:creator>goblor</dc:creator>
				<category><![CDATA[Digital]]></category>
		<category><![CDATA[Forschung und Technik]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[OpenStreetMap]]></category>
		<category><![CDATA[OSM-Projekt]]></category>
		<category><![CDATA[osm2sql]]></category>

		<guid isPermaLink="false">http://goblor.de/wp/?p=959</guid>
		<description><![CDATA[Schon vor über einem Jahr habe ich mich etwas ausführlicher mit dem Projekt OpenStreetMap beschäftigt. Damals ging es um das Einlesen der Daten in eine eigene Datenbank und es gab schonmal ein HowTo, dessen Datenbankschema sich aber recht schnell als unnötig groß herausgestellt hat. Wirklich ordentlich beschrieben habe ich die dann folgende Lösung bis dato [...]]]></description>
			<content:encoded><![CDATA[<p>Schon vor über einem Jahr habe ich mich etwas ausführlicher mit dem Projekt OpenStreetMap beschäftigt. Damals ging es um das Einlesen der Daten in eine eigene Datenbank und es gab schonmal ein <a title="HowTo: OpenStreetMap-Daten in MySQL-Datenbank importieren" href="http://goblor.de/wp/2008/09/25/howto-openstreetmap-daten-in-mysql-datenbank-importieren/">HowTo</a>, dessen Datenbankschema sich aber recht schnell als unnötig groß herausgestellt hat. Wirklich ordentlich beschrieben habe ich die <a title="Der Durchbruch" href="http://goblor.de/wp/2008/09/29/der-durchbruch/">dann folgende Lösung</a> bis dato allerdings nicht, deshalb startet heute eine kleine Artikel-Serie zum Thema.</p>
<div class="imagebox"><div class="image"><a href="http://goblor.de/wp/wp-content/uploads/2009/10/schema1.png"><img class="size-full wp-image-962" title="schema1" src="http://goblor.de/wp/wp-content/uploads/2009/10/schema1.png" alt="Datenbankschema für OpenStreetMap-Daten" width="774" height="656" /></a></div><div class="imgcaption">Datenbankschema für OpenStreetMap-Daten</div></div>
<p>Im ersten Teil soll es darum gehen die Openstreetmap-Daten in eine MySQL-Datenbank einzulesen.<span id="more-959"></span> Später wird eine Möglichkeit gezeigt, aus den Daten einen gerichteten Graphen z.B. für eine Wegsuche zu erstellen, danach wird eine Wegsuche realisiert.</p>
<p>Aber zunächst müssen die Daten eingelesen werden. Benötigt wird:</p>
<ul>
<li>Eine funktionierende Installation eines MySQL-Servers (&gt; Version 5.0) mit ordentlich Speicherplatz (Ich rede hier mindestens von Gigabyte-Zahlen für Baden-Württemberg, ganz Deutschland dürfte im Bereich um die 10GB liegen) und Administrations-Umgebung</li>
<li>Eine funktionierende Java-Installation. Das von mir für den Import geschriebene Skript gibt eine SQL-Befehlskette auf der Standardausgabe aus, mit der Bash (Linux-Kommandozeile) lässt sich das direkt in eine MySQL-Verbindung schicken.</li>
</ul>
<p>Als erstes wollen wir einen Blick auf die Openstreetmap-Daten werfen. Sie liegen im XML-Format vor und können auch auszugsweise z.B. <a title="OpenStreetMap-Daten bei Geofabrik herunterladen" href="http://download.geofabrik.de/osm/">bei Geofabrik heruntergeladen</a> werden. Ich habe mir für das Projekt die Daten von Baden-Württemberg (baden-wuerttemberg.osm) heruntergeladen.</p>
<p>Wenn man die knapp 80MB große bz2-Datei entpackt hat, liegen ca.1 GB Daten auf der Festplatte. In die kann man mal reinschauen (aber bitte mit einem Tool, das Zeilenweise liest, z.B. &#8220;less&#8221;). Eine Analyse dieser Datei und ein Blick auf diese <a title="wiki.openstreetmap.org: Data Primitives" href="http://wiki.openstreetmap.org/wiki/XML_Schema">zwar veraltete, aber für diesen Zweck ausreichende Wikiseite</a> führte mich zum Datenbankschema, wie in der Grafik.</p>
<p><a title="SQL-Skript zur Erzeugung des Datenbankschemas aus der Grafik" href="http://goblor.de/wp/wp-content/uploads/2009/10/osm-schema.sql.txt">Hier</a> ist die zugehörige <a title="SQL-Skript zur Erzeugung des Datenbankschemas aus der Grafik" href="http://goblor.de/wp/wp-content/uploads/2009/10/osm-schema.sql.txt">MySQL-Import-Datei</a>.</p>
<p>Nachdem man eine Datenbank angelegt hat kann das oben gezeigte Schema erzeugt werden. Jetzt fehlt natürlich noch der Datenimport. Dafür entstand nach <a title="OpenStreetMap-Daten nach MySQL (Die Zweite)" href="http://goblor.de/wp/2008/09/28/openstreetmap-daten-nach-mysql-die-zweite/">mehreren</a> <a title="Rechner an der Grenze" href="http://goblor.de/wp/2008/09/25/rechner-an-der-grenze/">Versuchen</a> ein Java-Programm, das aus einer *.osm-Datei einen entsprechenden Import herstellt.</p>
<p>Der <a title="osm2sql: Java-Programm um aus *.osm einen MySQL-Import zu erzeugen" href="http://goblor.de/wp/wp-content/uploads/2009/10/osm2sql.java">Quellcode des Java-Programms</a> lässt sich <a title="osm2sql: Java-Programm um aus *.osm einen MySQL-Import zu erzeugen" href="http://goblor.de/wp/wp-content/uploads/2009/10/osm2sql.java">hier herunterladen</a>. Seine Benutzung ist einfach. Das Programm erwartet einen Parameter mit dem Pfad/Dateinamen einer *.osm-Datei und erzeugt daraus einen MySQL-Input auf dem Std-Out. Nach dem Kompilieren von osm2sql sollte sich (zumindest auf der Linux-Bash) mit einem entsprechend angepassten Befehl der Art</p>
<p><code>java osm2sql baden-wuerttemberg.osm | mysql --host=localhost --database=osm --user=osm --password=abc</code></p>
<p>die Datenbank füllen lassen. Jetzt kann man normalerweise erst mal einen Tee kochen gehen. Ein wenig Zeit sollte man dem Datenbankserver schon gönnen.</p>
<p>Kommentare und Hinweise zum Thema sind hier nicht nur erlaubt, sondern ausdrücklich erwünscht.</p>


<p>Ähnliche Artikel:<ol><li><a href='http://goblor.de/wp/2008/09/25/howto-openstreetmap-daten-in-mysql-datenbank-importieren/' rel='bookmark' title='Permanent Link: HowTo: OpenStreetMap-Daten in MySQL-Datenbank importieren'>HowTo: OpenStreetMap-Daten in MySQL-Datenbank importieren</a></li>
<li><a href='http://goblor.de/wp/2008/09/28/openstreetmap-daten-nach-mysql-die-zweite/' rel='bookmark' title='Permanent Link: OpenStreetMap-Daten nach MySQL (Die Zweite)'>OpenStreetMap-Daten nach MySQL (Die Zweite)</a></li>
<li><a href='http://goblor.de/wp/2009/10/17/openstreetmap-projekt-teil2-%e2%80%93-von-den-rohdaten-zum-gerichteten-graphen/' rel='bookmark' title='Permanent Link: OpenStreetMap-Projekt: Teil2 – Von den Rohdaten zum gerichteten Graphen'>OpenStreetMap-Projekt: Teil2 – Von den Rohdaten zum gerichteten Graphen</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://goblor.de/wp/2009/10/16/openstreetmap-projekt-teil-1-openstreetmap-daten-in-mysql-datenbank-einlesen/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Abstandsmessung optimieren</title>
		<link>http://goblor.de/wp/2008/10/02/abstandsmessung-optimieren/</link>
		<comments>http://goblor.de/wp/2008/10/02/abstandsmessung-optimieren/#comments</comments>
		<pubDate>Thu, 02 Oct 2008 00:26:37 +0000</pubDate>
		<dc:creator>goblor</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[osm2sql]]></category>
		<category><![CDATA[Stored Procdures]]></category>

		<guid isPermaLink="false">http://goblor.de/wp/?p=128</guid>
		<description><![CDATA[Gestern habe ich die Deutschland-Daten auf dem Server importiert. Das hat exzellent und ohne Abbruch geklappt. Direkt aus dem osm2sql in die Datenbank gepiped. Auch wenn fritsch Befürchtungen wegen des Arbeitsspeichers hatte. Die Swap-Größe hat sich seit 2 Tagen nicht verändert.
Heute haben wir uns mal dem Zeit-Problem bei der Entfernungsberechnung zwischen zwei Städten gewidmet. Wir [...]]]></description>
			<content:encoded><![CDATA[<p>Gestern habe ich die Deutschland-Daten auf dem Server importiert. Das hat exzellent und ohne Abbruch geklappt. Direkt aus dem osm2sql in die Datenbank gepiped. Auch wenn fritsch Befürchtungen wegen des Arbeitsspeichers hatte. Die Swap-Größe hat sich seit 2 Tagen nicht verändert.</p>
<p>Heute haben wir uns mal dem Zeit-Problem bei der Entfernungsberechnung zwischen zwei Städten gewidmet. Wir haben mit 10 bis 20 Sekunden pro Abfrage begonnen. Fritsch hat dann heute Mittag beschlossen, die Indizes auf ein anderes Format zu ändern. Weg von <code>BTREE</code> hin zu <code>HASH</code>. Auch wenn das laut <a title="MySQL :: MySQL 5.1 Referenzhandbuch :: 13.1.4 CREATE INDEX" href="http://dev.mysql.com/doc/refman/5.0/en/create-index.html">MySQL 5.0-Referenz</a> gar nicht geht, hat uns das etwa eine Vervierfachung der Geschwindigkeit gebracht auf etwa 4 Sekunden.<span id="more-128"></span></p>
<p>Bisher hatten wurde ein View eingesetzt, der für alle Stadt-Kombinationen den Abstand berechnen konnte. Die Städte wurden dann per <code>WHERE</code> in der Abfrage eingeschränkt. Dumm nur, das die <a title="Orthodrome - Wikipedia" href="http://de.wikipedia.org/wiki/Orthodrome">Abstandsberechnung</a> recht aufwändig ist, weil sie 6 trigonometrische Funktionen auf einmal durchführt. Offenbar wurden die für jede Zeile berechnet, auch wenn die Zeile am Ende nicht ausgegeben wurde.</p>
<p>Deshalb habe ich mich heute abend nach fritschs <a title="Fritsch Place - Heute - Waterboarding in der WG" href="http://fritsch.fruehberger.net/index.php?option=com_content&amp;task=view&amp;id=117&amp;Itemid=37">&#8220;Ich waterboarde mich selbst&#8221;-Aktion</a> nochmal hingesetzt und eine Stored Procedure geschrieben, die zunächst 2 Tabellen erzeugt, in denen jeweils die Daten zu den beiden eingegebenen Städten stehen und erst dann eine Berechnung durchführt. Damit bin ich jetzt auf unter 0,5 Sekunden runter, was durchaus akzeptabel ist. Interessanterweise macht es auch praktisch keinen zeitlichen Unterschied, ob ich mir die Entfernungen von Bremen nach Heidelberg ausgeben lasse oder alle Entfernungen von Bre* nach Hei*. Obwohl das 125 Zeilen mehr ergibt.</p>
<p>Ein paar Probleme gibts aber doch noch:</p>
<ul>
<li>Bisher habe ich das Thema Encoding noch nicht betrachtet. Auf der Kommandozeile mit mysql werden Unicode-Zeichen fehlerhaft ausgegeben und auch die Eingabe ebensolcher Namen funktioniert nicht.</li>
<li>PhpMyAdmin scheint nicht mit Stored Procedures umgehen zu können.</li>
<li>Eine Stored Procedure ist einfach keine Tabelle und kein View und unkomfortabler zu nutzen.</li>
</ul>
<p>P.S.: Wie man Stored Procedures in MySQL schreibt, habe ich mir in <a title="MySQL - Using Stored Procedures Tutorials" href="http://www.brainbell.com/tutorials/MySQL/Using_Stored_Procedures.htm">diesem Tutorial</a> angeeignet.</p>


<p>Ähnliche Artikel:<ol><li><a href='http://goblor.de/wp/2009/10/17/openstreetmap-projekt-teil2-%e2%80%93-von-den-rohdaten-zum-gerichteten-graphen/' rel='bookmark' title='Permanent Link: OpenStreetMap-Projekt: Teil2 – Von den Rohdaten zum gerichteten Graphen'>OpenStreetMap-Projekt: Teil2 – Von den Rohdaten zum gerichteten Graphen</a></li>
<li><a href='http://goblor.de/wp/2008/09/28/es-scheint-zu-funktionieren/' rel='bookmark' title='Permanent Link: Es scheint zu funktionieren'>Es scheint zu funktionieren</a></li>
<li><a href='http://goblor.de/wp/2008/09/29/der-durchbruch/' rel='bookmark' title='Permanent Link: Der Durchbruch'>Der Durchbruch</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://goblor.de/wp/2008/10/02/abstandsmessung-optimieren/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Der Durchbruch</title>
		<link>http://goblor.de/wp/2008/09/29/der-durchbruch/</link>
		<comments>http://goblor.de/wp/2008/09/29/der-durchbruch/#comments</comments>
		<pubDate>Mon, 29 Sep 2008 00:04:46 +0000</pubDate>
		<dc:creator>goblor</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[InnoDB]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[osm2sql]]></category>

		<guid isPermaLink="false">http://goblor.de/wp/?p=118</guid>
		<description><![CDATA[Irgendwie hab ich ja das Gefühl mich zumindest ein bisschen schämen zu müssen. Vor zweieinhalb Jahren habe ich einmal gelernt, was Transaktionen bei Datenbanken sind. Wenn ich das Wissen parat gehabt hätte, wäre der Import schon gestern komplett fertig geworden.
Nach genau 2 Zeilen in der Import-Datei und damit auch 2 Zeilen im osm2sql ist der [...]]]></description>
			<content:encoded><![CDATA[<p>Irgendwie hab ich ja das Gefühl mich zumindest ein bisschen schämen zu müssen. Vor zweieinhalb Jahren habe ich einmal gelernt, was Transaktionen bei Datenbanken sind. Wenn ich das Wissen parat gehabt hätte, wäre der Import schon gestern komplett fertig geworden.</p>
<p>Nach genau 2 Zeilen in der Import-Datei und damit auch 2 Zeilen im osm2sql ist der Import jetzt etwa um Faktor 40 schneller.<span id="more-118"></span></p>
<p>Es geht um die Zeile<br />
<code>SET AUTOCOMMIT=0;</code><br />
ganz am Anfang und die Zeile<br />
<code>COMMIT;</code><br />
ganz am Schluss. Die sorgen</p>
<ol>
<li>für Datenkonsistenz, weil ohne erfolgreichem <code>COMMIT</code> die ganze Transaktion ein Rollback bekommt, also danach wie nicht ausgeführt aussieht und</li>
<li>für Tempo, weil nicht jede Zeile einzeln committed wird.</li>
</ol>
<p>Jetzt kann ich beruhigt ins Bett gehen, denn auch der Import von Dateien im zweistelligen Gigabyte-Bereich dürfte in halbwegs realistischer Zeit erfolgen. Ein Nachteil ist, dass diese Funktion bei MySql nur mit der Datenbank-Engine InnoDB funktioniert.</p>
<p>Fehlt noch der Export der jetzt installierten Fremdschlüssel, die erstaunlicherweise alle sofort funktioniert haben, in eine Schema-Datei, dann werd ich wohl mal ein großes Planet-File auf die DB loslassen.</p>


<p>Ähnliche Artikel:<ol><li><a href='http://goblor.de/wp/2009/10/16/openstreetmap-projekt-teil-1-openstreetmap-daten-in-mysql-datenbank-einlesen/' rel='bookmark' title='Permanent Link: OpenStreetMap-Projekt: Teil1 &#8211; Openstreetmap-Daten in MySQL-Datenbank einlesen'>OpenStreetMap-Projekt: Teil1 &#8211; Openstreetmap-Daten in MySQL-Datenbank einlesen</a></li>
<li><a href='http://goblor.de/wp/2008/10/02/abstandsmessung-optimieren/' rel='bookmark' title='Permanent Link: Abstandsmessung optimieren'>Abstandsmessung optimieren</a></li>
<li><a href='http://goblor.de/wp/2008/09/25/howto-openstreetmap-daten-in-mysql-datenbank-importieren/' rel='bookmark' title='Permanent Link: HowTo: OpenStreetMap-Daten in MySQL-Datenbank importieren'>HowTo: OpenStreetMap-Daten in MySQL-Datenbank importieren</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://goblor.de/wp/2008/09/29/der-durchbruch/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Datenimport nach 10 Stunden</title>
		<link>http://goblor.de/wp/2008/09/28/datenimport-ncah-10-stunden/</link>
		<comments>http://goblor.de/wp/2008/09/28/datenimport-ncah-10-stunden/#comments</comments>
		<pubDate>Sun, 28 Sep 2008 10:04:47 +0000</pubDate>
		<dc:creator>goblor</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[OpenStreetMap]]></category>
		<category><![CDATA[osm2sql]]></category>
		<category><![CDATA[SAX]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://goblor.de/wp/?p=103</guid>
		<description><![CDATA[
goblor@gemajehova:/media/data/tosort/OSM$ mysql -u root -p geostuff &#60; importstuff.sql
Enter password:
ERROR 1054 (42S22) at line 7055199: Unknown column 'nodeid' in 'field list'
goblor@gemajehova:/media/data/tosort/OSM$ wc -l importstuff.sql
7078488 importstuff.sql

Was sagt uns obige Ausgabe?
Richtig, der Datenimport hat nicht geklappt und der tödliche Fehler trat kurz vor Schluss auf. Nachdem ich jetzt ein wenig danach geschaut habe, ärgert er mich echt&#8230; Der [...]]]></description>
			<content:encoded><![CDATA[<p><code><br />
goblor@gemajehova:/media/data/tosort/OSM$ mysql -u root -p geostuff &lt; importstuff.sql<br />
Enter password:<br />
ERROR 1054 (42S22) at line 7055199: Unknown column 'nodeid' in 'field list'<br />
goblor@gemajehova:/media/data/tosort/OSM$ wc -l importstuff.sql<br />
7078488 importstuff.sql<br />
</code></p>
<p>Was sagt uns obige Ausgabe?<span id="more-103"></span></p>
<p>Richtig, der Datenimport hat nicht geklappt und der tödliche Fehler trat kurz vor Schluss auf. Nachdem ich jetzt ein wenig danach geschaut habe, ärgert er mich echt&#8230; Der Fehler besteht aus einem falschen Spaltennamen &#8211; Tippfehler.</p>
<p>Ein anderer Fehler ist auch noch passiert, da wurde ein falscher Tabellenname genutzt. Die ganzen Fehler sind korrigiert und das Spiel kann von neuem starten. &#8211; Wird wohl bis heute Abend dauern.</p>


<p>Ähnliche Artikel:<ol><li><a href='http://goblor.de/wp/2008/09/28/openstreetmap-daten-nach-mysql-die-zweite/' rel='bookmark' title='Permanent Link: OpenStreetMap-Daten nach MySQL (Die Zweite)'>OpenStreetMap-Daten nach MySQL (Die Zweite)</a></li>
<li><a href='http://goblor.de/wp/2008/09/29/der-durchbruch/' rel='bookmark' title='Permanent Link: Der Durchbruch'>Der Durchbruch</a></li>
<li><a href='http://goblor.de/wp/2009/10/16/openstreetmap-projekt-teil-1-openstreetmap-daten-in-mysql-datenbank-einlesen/' rel='bookmark' title='Permanent Link: OpenStreetMap-Projekt: Teil1 &#8211; Openstreetmap-Daten in MySQL-Datenbank einlesen'>OpenStreetMap-Projekt: Teil1 &#8211; Openstreetmap-Daten in MySQL-Datenbank einlesen</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://goblor.de/wp/2008/09/28/datenimport-ncah-10-stunden/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OpenStreetMap-Daten nach MySQL (Die Zweite)</title>
		<link>http://goblor.de/wp/2008/09/28/openstreetmap-daten-nach-mysql-die-zweite/</link>
		<comments>http://goblor.de/wp/2008/09/28/openstreetmap-daten-nach-mysql-die-zweite/#comments</comments>
		<pubDate>Sat, 27 Sep 2008 23:44:38 +0000</pubDate>
		<dc:creator>goblor</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[OpenStreetMap]]></category>
		<category><![CDATA[osm2sql]]></category>
		<category><![CDATA[Parser]]></category>
		<category><![CDATA[SAX]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://goblor.de/wp/?p=96</guid>
		<description><![CDATA[
Im letzten Artikel haben wir festgestellt, dass das Datenbankschema, das von &#8220;osmosis&#8221; erzeugt wird, nicht so der Bringer ist, deshalb habe ich mir erlaubt mit großer Hilfe und Sachverstand meines Freundes fritsch ein eigenes Datenbankschema zu entwerfen und natürlich auch gleich noch den dazu fälligen Parser zu schreiben.
Ich habe heute viel dabei gelernt (nur kein [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://goblor.de/wp/wp-content/uploads/2008/09/sqltransverse.png"><img class="alignright size-full wp-image-109" title="sql-output-thumb" src="http://goblor.de/wp/wp-content/uploads/2008/09/sql-output-thumb.png" alt="" width="288" height="180" /></a></p>
<p>Im <a title="HowTo: OpenStreetMap-Daten in MySQL-Datenbank importieren" href="http://goblor.de/wp/?p=88">letzten Artikel</a> haben wir festgestellt, dass das Datenbankschema, das von &#8220;osmosis&#8221; erzeugt wird, nicht so der Bringer ist, deshalb habe ich mir erlaubt mit großer Hilfe und Sachverstand meines Freundes fritsch ein eigenes Datenbankschema zu entwerfen und natürlich auch gleich noch den dazu fälligen Parser zu schreiben.<span id="more-96"></span></p>
<p>Ich habe heute viel dabei gelernt (nur kein <a title="Fakultät für Mathematik - Elementare Zahlentheorie (Sommersemester 2008)" href="http://www.mathematik.uni-karlsruhe.de/iag3/lehre/elemzahl2008s/">EZT</a> &#8211; Gruß an tacco):</p>
<ol>
<li>Versuche <strong>niemals</strong> selbst XML zu parsen. Es sieht ganz einfach aus und endet im Desaster.</li>
<li>Versuchs wirklich nicht!</li>
<li>Benutze lieber einen fertigen Parser, dem du mitgibst, was er mit den Tags anfangen soll.</li>
</ol>
<p>Vor ein paar Tagen haben wir festgestellt, dass 400MB XML mit Xalan etwa 3 GB RAM brauchen, wenn sie zu einem DOM-Baum aufgebaut werden. Ein kleiner Test mit einer Perl-XML-Klasse, die eben dieses macht, hat heute fritschs neuerdings 8GB RAM in Sekundenschnelle komplett gefüllt. Deshalb bleibt nur sequentielles Lesen der Daten übrig. Java bietet dafür einen Sax-Parser, mit dem das ganz gut ging.</p>
<p>Mit etwas Quellcode war dann auch recht zügig eine SQL-Ausgabe erzeugt. Das Debugging dauerte aber Stunden, denn wenn in Zeile 1.500.745 des SQL-Imports ein Fehler auftaucht, merkt das MySQL erst nach etwa 1 Stunde. Eigentlich brauch ichs gar nicht zu erwähnen, es ist mehrfach passiert. Man braucht dann auch echt lustige Konstrukte:<br />
<code><br />
elementstring.replaceAll("\\\\","\\\\\\\\").replaceAll("'","\\\\'")<br />
</code><br />
Das kommt vom doppelt escapen. Einmal für den Java-String, und einmal für den RegExp. So bedeuten 4 Backslashes genau einen Backslash im zu durchsuchenden String.</p>
<p>Jetzt ist unser Server im dritten Durchgang beschäftigt und irritiert uns mit äußerst ungenauen Größenangaben der Tabellen. Mal sehen an welcher Stelle der 7.078.487 Zeilen er heute Nacht rausfliegt. Aktuell sind wir etwa bei Zeile 1.000.000.</p>


<p>Ähnliche Artikel:<ol><li><a href='http://goblor.de/wp/2009/10/16/openstreetmap-projekt-teil-1-openstreetmap-daten-in-mysql-datenbank-einlesen/' rel='bookmark' title='Permanent Link: OpenStreetMap-Projekt: Teil1 &#8211; Openstreetmap-Daten in MySQL-Datenbank einlesen'>OpenStreetMap-Projekt: Teil1 &#8211; Openstreetmap-Daten in MySQL-Datenbank einlesen</a></li>
<li><a href='http://goblor.de/wp/2008/09/25/howto-openstreetmap-daten-in-mysql-datenbank-importieren/' rel='bookmark' title='Permanent Link: HowTo: OpenStreetMap-Daten in MySQL-Datenbank importieren'>HowTo: OpenStreetMap-Daten in MySQL-Datenbank importieren</a></li>
<li><a href='http://goblor.de/wp/2008/09/25/rechner-an-der-grenze/' rel='bookmark' title='Permanent Link: Rechner an der Grenze'>Rechner an der Grenze</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://goblor.de/wp/2008/09/28/openstreetmap-daten-nach-mysql-die-zweite/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
