LOAD DATA INFILE vs UPDATE INSERT

oliverb

Mitglied
mySQL 5.5

Moin zusammen,

ich habe mal wider eine Frage an die Profis unter Euch:

Ich bekomme von meinen Lieferanten alle 15 Minuten Preisdaten als CSV gesendet. Diese importiere ich für jeden Lieferanten in einen eigenen Table. Vorher wird wird von mir die entsprechende Table aber immer geleert:

<code>
TRUNCATE TABLE table_name
LOAD DATA INFILE 'data.csv' INTO TABLE table_name;
</code>

Woran ich micht aktuell störe ist, dass ich jedes mal die Tabelle erst komplett leeren muss und es dadurch einen kleinen Moment gibt, in dem die entsprechende Table leer ist. Für einen Webshop eben irgendwie blöd. Viel lieber würde ich den Import mit einem UPDATE INSERT machen. Das geht aber wohl nicht in Verbindung mit einem LOAD DATA INFILE.

Was seht Ihr hier als Lösung?

Idee 1
Einen TMP_Table generieren, dort die Daten importieren und dann den LIVE-Table löschen und anschließend den TMP-Table umbenennen?

Idee 2
Die Daten in den TMP-Table kopieren und anschließend von dort aus einen UPDATE INSERT in den LIVE Table?

Möglichkeit 1 scheint etwas besser als meine bisher verwendete Methode mit dem TRUNCATE, da der Ausfall geringer ist. Bei Möglichkeit 2 sehe ich das Problem, dass nicht mehr vorhandene Artikel - welche nach dem LOAD DATA INFILE im TEMP-Table nicht mehr vorhanden sind, weil es einige Produkte eventuell nicht mehr gibt und von den Lieferanten daher auch nicht mehr übermittelt werden - während dem UPDATE INSERT im LIVE Table nicht gelöscht werden!?!

Bitte klärt mich auf wie das die PROFIS machen würden. Ich möchte den "Ausfall" beim Import so gering wie möglich halten. Ich für jede Idee dankbar!
 
Zuletzt bearbeitet:
Hi

Bei Lösung 1 hast du doch auch das Problem, dass einen Moment lang nichts da ist (nicht einmal die Tabellenstruktur)

Und bei Lösung zwei muss man eben mit einer weiteren Anweisung die überflüssigen IDs leeren. Ca. so:
SQL:
DELETE FROM table1 WHERE idspalte NOT IN (SELECT idspalte FROM TABLE2)
vorausgesetzt die Idspaltenwerte können nicht NULL sein.
 
Hi,

warum arbeitest du nicht mit Transaktionen?
Transaktion starten, Tabelle leeren, neue Daten laden, Commit.

Soweit ich das Transaktions-System verstehe sollte so die Tabelle für andere Transaktionen / Clients nie leer sein.

Was machst du, wenn das angelieferte CSV Fehler enthält und nicht importiert werden kann?
In deinem Beispiel hast du die Tabelle bereits geleert (auch mit dem Sub-Select oben) und kannst die Daten nicht mehr so einfach wiederherstellen. Mit Transaktionen wäre das einfach nur ein "rollback" und du hast wieder den alten Stand.

Grüsse,
BK
 
Zuletzt bearbeitet:
Habe ich leider keinerlei Erfahrung damit. Es hört sich aber interessant an. Kann das jemand bestätigen und aus Erfahrung berichten?
 

Neue Beiträge

Zurück