Om te voorkomen dat ik de server onnodig belast wil ik op een efficiente manier xml feeds naar de mysql database schrijven. Ook om geheugen problemen te voorkomen. Dit script zal uiteindelijk via een cronjob (dagelijks/uurlijks) lopen.
Volgens mij werkt het zo het beste;
- In een array heb ik de feed url's staan en deze feeds probeer ik zo klein mogelijk te houden. Bijv door niet alle producten in een grote feed in 1 keer op te halen, maar met een aparte categorie-feed.
- Met een foreach-loop ga ik door de feeds.
- Binnen de foreach-loop maak ik een object aan xmlFeed.
- Ik kopieer het xml bestand naar de server met bijv xmlFeed->DownloadXML.
- Ik verwerk het xml bestand lokaal met xmlFeed->VerwerkXML (evt met een property dat de xml structuur aangeeft). En met gebruik van simplexml_load_file(). Alle producten in het xml bestand ga ik toevoegen aan 1 grote query string en voer deze uit. Daarbij moet gekeken worden naar de titel van een product. Dus ik dacht aan een INSERT INTO producten (titel, prijs) VALUES (appelsap, 2) ON DUPLICATE KEY UPDATE prijs = (2). Dus als appelsap er al in staat alleen prijs aanpassen.
De reden om 1 grote query string te nemen is om niet duizenden insert queries te gaan doen ivm belasting op de server.
- Als de gegevens in de database zijn geschreven verwijder ik het lokale xml bestand (misschien overbodig). En gooi ik het object weg met object = null (misschien is er een betere manier?)
- De foreach-loop pakt de volgende en begint opnieuw (evt eerst statistieken in de db zetten oid).
Is dit de juiste manier van verwerken of zijn er nog dingen waar ik niet aan heb gedacht?
Volgens mij werkt het zo het beste;
- In een array heb ik de feed url's staan en deze feeds probeer ik zo klein mogelijk te houden. Bijv door niet alle producten in een grote feed in 1 keer op te halen, maar met een aparte categorie-feed.
- Met een foreach-loop ga ik door de feeds.
- Binnen de foreach-loop maak ik een object aan xmlFeed.
- Ik kopieer het xml bestand naar de server met bijv xmlFeed->DownloadXML.
- Ik verwerk het xml bestand lokaal met xmlFeed->VerwerkXML (evt met een property dat de xml structuur aangeeft). En met gebruik van simplexml_load_file(). Alle producten in het xml bestand ga ik toevoegen aan 1 grote query string en voer deze uit. Daarbij moet gekeken worden naar de titel van een product. Dus ik dacht aan een INSERT INTO producten (titel, prijs) VALUES (appelsap, 2) ON DUPLICATE KEY UPDATE prijs = (2). Dus als appelsap er al in staat alleen prijs aanpassen.
De reden om 1 grote query string te nemen is om niet duizenden insert queries te gaan doen ivm belasting op de server.
- Als de gegevens in de database zijn geschreven verwijder ik het lokale xml bestand (misschien overbodig). En gooi ik het object weg met object = null (misschien is er een betere manier?)
- De foreach-loop pakt de volgende en begint opnieuw (evt eerst statistieken in de db zetten oid).
Is dit de juiste manier van verwerken of zijn er nog dingen waar ik niet aan heb gedacht?