Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[MySQL] CSV import, enkel de wijzigingen updaten

Pagina: 1
Acties:

  • Poestie
  • Registratie: Januari 2006
  • Laatst online: 18-01 08:09
Ik zit met volgende casus, waarbij ik niet meteen een pasklaar antwoord weet. Ik ben niet zo een guru als het op databanken aankomt, dus ik hoop dat hier iemand mij op weg kan helpen om dit zo goed mogelijk aan te pakken.

Ik krijg drie maal daags een reeks CSV-bestanden aangeleverd met een heel pak data in, dewelke ik in een MySQL-databank moet steken. De bestanden bevatten echter steeds alle data opnieuw, ongeacht of deze gewijzigd zijn of niet. Er is ook geen kolom aanwezig met een timestamp om te zien wanneer de row het laatste werd geupdate.

Ik zoek dus een manier om uit deze CSV-bestanden steeds alle actuele data op een efficiënte en handelbare manier in mijn MySQL-tabellen te pompen. Dit moet dan nog eens drie maal daags gebeuren, liefst op een zo kort mogelijke tijd.

Ik kan de aanwezige data en informatie in de CSV-bestanden niet aanpassen of beïnvloeden, deze worden zo aangeleverd zonder ik hier enige invloed op heb. Sommige CSV-bestanden zijn maar enkele honderden KB's groot, andere lopen op tot 20 MB met meer dan 300.000 rows. Row per row gaan vergelijken en desgevallen updaten lijkt mij iets te hevig voor de performance, of valt dit wel mee?

Ik besef dat de aangeleverde vorm van data verre van ideaal is, maar ik moet het er mee doen. Heeft er iemand ervaring met dergelijke gevallen of enkele tips hoe ik dit qua servercapaciteit het beste aan pak?

Alvast bedankt!

  • Kalentum
  • Registratie: Juni 2004
  • Laatst online: 09:05
Het meest eenvoudig en minst foutgevoelig is om alles bij elke import opnieuw in te lezen.

MySQL heeft de mogelijkheid om snel CSV bestanden in te lezen. Dus je zou kunnen proberen om het importscript te laten werken met LOAD DATA.

Door de data eerst in tijdelijke tabellen te plaatsen kun je de import laten lopen terwijl database queries nog de oude data gebruiken. Op het moment dat de import klaar is hernoem je de tabellen en wordt de nieuwe data gebruikt.

  • eM.
  • Registratie: Mei 2010
  • Laatst online: 23-10 10:44

eM.

Toevallig laatst ook zoiets. Ik kreeg ook geen timestamp mee, en moest precies per rij weten welke velden gewijzigd waren. Daarnaast moest er ook nog nabewerking plaatsvinden. Uiteindelijk opgelost door een checksum te maken van elke rij die je importeert en deze te vergelijken bij de volgende import. Niet echt ideaal, maar het werkt.