Der Durchbruch

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 Import jetzt etwa um Faktor 40 schneller.

Es geht um die Zeile
SET AUTOCOMMIT=0;
ganz am Anfang und die Zeile
COMMIT;
ganz am Schluss. Die sorgen

  1. für Datenkonsistenz, weil ohne erfolgreichem COMMIT die ganze Transaktion ein Rollback bekommt, also danach wie nicht ausgeführt aussieht und
  2. für Tempo, weil nicht jede Zeile einzeln committed wird.

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.

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.

Kommentare

7 Kommentare zu “Der Durchbruch”

  1. Peter am September 29th, 2008 10:29

    So lustig ist das erstmal nicht – was meinst du wo alles drinsteht, bis das commit kommt? :-)

    Aber! und da hast du Recht, es gehört alles(!) in eine Transaktion, besonders dann – wenn man “appendiert” Daten einfügt – sonst Supergau!

    Bei “Basis dumps” kann man das auch weglassen, weil wenn etwas schief geht, kann mans ja nochmal machen.

    Schau mal auf dem Server, der hat kräftig geswapped heute nacht.

    Und zum Schema:
    mysqldump -d geostuff > schemaOnly.sql

    ist dein Freund.

    BTW: afaik haben wir auch ein paar myisam tabell noch da drin?

  2. Peter am September 29th, 2008 10:31

    Ah :-) und mach mal bei deinen Posts noch die Zeit dazu *G* – dass man sieht wann du ins Bett bist ;-)

  3. goblor am September 29th, 2008 11:40

    Naja, ich kann die Uhrzeit auch anzeigen und dann von Hand die Uhrzeit der Veröffentlichung bearbeiten.

    Die Speicherauslastung während der Transaktion blieb konstant niedrig. Ich habe es in “top” beobachtet und er schreibt wohl sehr schnell auf die Platte, man kann z.B. mit phpmyadmin auch zuschauen, wie die Zeilenzahl wächst. Wenn ich das richtig verstanden habe, werden die Tabellen aber gelockt und das macht den Geschwindigkeitsvorteil.

    Edit: Das Schema hat momentan keine MyIsam-Tabellen, weil die keine Fremdschlüssel beherrschen.

  4. Daniel am October 9th, 2009 16:04

    Hi,

    super das sich damit mal jemand beschäftigt und auch noch online stellt :) Kann man das importscript / DB Schema irgendwo ziehen?

  5. OpenStreetMap-Projekt: Teil1 – Openstreetmap-Daten in MySQL-Datenbank einlesen | goblor grübelt am October 18th, 2009 16:43

    [...] recht schnell als unnötig groß herausgestellt hat. Wirklich ordentlich beschrieben habe ich die dann folgende Lösung bis dato allerdings nicht, deshalb startet heute eine kleine Artikel-Serie zum Thema. [...]

  6. nurich am October 22nd, 2010 00:09
  7. nurich am October 22nd, 2010 00:13

    Tut er. Warum lese ich auch keinen Quellcode? Suche nach Commit hat doch schon geholfen :-)

Schreibe einen Kommentar