login  Naam:   Wachtwoord: 
Registreer je!
 Forum

grote XML in database krijgen

Offline NLZ - 11/08/2009 19:12 (laatste wijziging 11/08/2009 19:18)
Avatar van NLZNieuw lid Ik zit met het volgende probleem.
Heb een bestand met ong. 300.000 producten in.

het is een .xml bestand, (kan het ook als .csv ophalen).

Nu is de bedoeling om deze producten in een mysql database te krijgen.
Ik had al een scriptje met een xml feed waarin telkens 10 items staan, dat ik deze in de database kan stoppen zonder probleem.

Maar omdat dit bestand nu zo groot is, blijft gewoon de pagina hangen zeg maar, en even later de browser ook. Maar wat is een goede oplossing om dit in de database te krijgen. Het zou eigenlijk in stukken opgedeeld moeten worden ofzo, dan het 1 voor 1 er in gaat.

Of gewoon in het algemeen, een zeer groot XML bestand in een MySQL database te krijgen.

Ik had ook geprobeerd het te downloaden als .csv maar dan moet je kiezen voor Kolom separator, tekstbepaler, Veld separator, Sub veld separator.

En deze staan standaard op:
Kolom separator: |
Tekstbepaler: "
Veld separator: ;
Sub veld separator: :

Maar als ik deze zo laat staan lukt het niet om deze via phpmyadmin te importen. Ofja bij phpmyadmin krijg ik error dat het bestand te groot is bij uploaden.
Dus had ik iets gedownload genaamd: Bigdump, maar dan ziet hij de velden niet met die seperator |.

Dusja, ik geraak er niet uit

9 antwoorden

Gesponsorde links
Offline Martijn - 11/08/2009 20:09
Avatar van Martijn Crew PHP via simplexml() uitlezen, en een $query="" opbouwen, en aan het einde zet je 1 grote query aan 

je kunt meerdere dingen zo doen:
  1. $query = "INSERT INTO producten (naam) ";
  2. $query.= "('".$xml->product[0]->product1."')";
  3. $query.= "('".$xml->product[0]->product2."')";
Offline jc2 - 12/08/2009 00:11
Avatar van jc2 PHP interesse Ik denk dat DS het ook zo bedoelt, maar ik zeg het maar even zoals ik denk:

1. Je upload het xml bestand naar je server
2. Je leest het bestand uit
3. Via een for- of foreachlus upload je telkens een deel van de code
4. Sleep() regelt de tussenpauzes om een databaseoverload te voorkomen
5. Het zal misschien iets langer duren, maar dan zal het bestand wel helemaal in je database staan
Offline NLZ - 12/08/2009 16:35
Avatar van NLZ Nieuw lid ok, dat helpt al een stuk vooruit ja.
En @jc2

hoe kan ik dan een deel van de code nemen in die lus.
Heb je hiervoor een codevoorbeeldje ofzo hoe je het in stukjes kan zetten?

Offline Martijn - 12/08/2009 16:51
Avatar van Martijn Crew PHP je moet t helemaal niet met sleep doen. En gewoon 1 query mysql kan iets in deze zin aan:

  1. INSERT INTO tabelnaam (kolom1, kolom2) VALUES
  2. ('waarde 1 1','waarde 2 1'),
  3. ('waarde 1 2','waarde 2 2'),
  4. ('waarde 1 3','waarde 2 3'),
  5. ('waarde 1 4','waarde 2 4')

daar voert ie dus 4 regels uit, dus als je die query uitvoert, kom je vanzelf uit op 1 grote query, maar dat is er maar 1 dus dat zal ie een stuk leuker vinden. Mogelijkheid 2 is dat je het in tweeen splits, en dan in twee queries, dan zou een sleep kunnen
Offline NLZ - 12/08/2009 17:21 (laatste wijziging 13/08/2009 11:31)
Avatar van NLZ Nieuw lid Maar gaat die dat dan ook aankunnen voor zo'n 25 velden, en zo'n 300.000 regels?

En zou ik het beste het bestand in de browser runnen, of via een cronjob door de server 1x laten runnen?
Offline nemesiskoen - 13/08/2009 21:40
Avatar van nemesiskoen Gouden medaille

PHP expert
Als het te groot is:
http://www.navicat.com/ downloaden
xml file importen
to sql omzetten
en dan die sql uitvoeren in uw phpmyadmin, desnoods in stappen van 10000 queries
Offline NLZ - 16/08/2009 14:05
Avatar van NLZ Nieuw lid
nemesiskoen schreef:
Als het te groot is:
http://www.navicat.com/ downloaden
xml file importen
to sql omzetten
en dan die sql uitvoeren in uw phpmyadmin, desnoods in stappen van 10000 queries

Ik heb dit geprobeerd, maar dan krijg ik error: Out of memory.
Offline thomasje - 17/08/2009 07:31
Avatar van thomasje MySQL beginner Ik weet niet wat het uiteindelijk moet worden maar ik ben met zo zelfde iets bezig. Ik doe het gewoon met php maar dan per webwinkel of campagne. Hele grote webwinkels van 300.000 producten doe ik meestal per groepering.
Offline Berten - 17/08/2009 14:22
Avatar van Berten PHP beginner Heb je
MySQL.com: http...-data.html geprobeerd.

Als het 1 file is die je in 1 tabel wil importeren doe ik het altijd via die functie
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.198s