[PHP/MySQL] Database transfer: tips?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • BlueAce
  • Registratie: November 2002
  • Laatst online: 09-01-2021
Voor een high-traffic site (ik geloof 750k uniek per maand) ben ik bezig met de nieuwere versie. Het hele systeem is op de schop gegaan, want dat mocht wel eens na 3 jaar ;)

De nieuwe database structuur verschilt enorm van de huidige, en daarom heb ik een import script geschreven wat de gegevens uit de oude database opvraagt, en deze wegschrijft in de nieuwe. Logisch natuurlijk dat dit lang duurt (duizenden queries) maar mijn vraag is dan: wat is de beste manier om dit te doen?

Ik laat nu simpelweg het script draaien in m'n browser, maar soms wil er dan nog wel eens een time-out optreden, en het is me tot dusver nog niet gelukt om het script van begin tot eind te draaien. "set_time_limit(0);" helpt daar ook niet bij.

Heeft iemand hier toevallig ervaring mee of weet iemand een snellere/betere manier? Alvast bedankt.

Acties:
  • 0 Henk 'm!

  • sjroorda
  • Registratie: December 2001
  • Laatst online: 14:31
set_time_limit(0) zou toch echt moeten werken. Wellicht kan je proberen het script eens van command line te runnen, dan heb je ook niet de kans dat je in de browser per ongeluk op escape drukt o.i.d..

Een andere oplossing is het in gedeeltes verwerken van de data: ofwel per tabel, ofwel per ID-range (0-1000, 1001-2000, ...). E.e.a. is natuurlijk afhankelijk van de complexiteit of het haalbaar is.

Acties:
  • 0 Henk 'm!

Verwijderd

Waarom moet het dan per se met PHP? Je kunt het ook in Perl schrijven. Maar goed, met PHP kun je ook prima shell scripts schrijven, en die time limit is er wel af te halen.

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Dat soort dingen moet je niet via een browser doen, gewoon via de shell/console/prompt (hoe je het ook wilt noemen :P)
Want ook daar kan je prima PHP scriptjes uitvoeren :)

php script.php

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Ikzelf zou dit niet online via een php scriptje doen. Je huidige db exporteren, dit (eventueel met php) locaal omzetten naar de nieuwe db en vervolgens deze gegenereerde dump via de console importeren in de nieuwe database.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 16:36
Ik heb een soortgelijk probleem gehad met een script dat advertenties telt op google op basis van een woordenlijst (vraag niet waarom). Ik heb het toen opgelost met een script in een iframepje dat de boel in stappen van X woordcombinaties per keer afliep. Met javascript kun je dan statusberichten uitpoepen naar je "hoofdscherm" en redirecten naar de volgende stap.

Regeren is vooruitschuiven


Acties:
  • 0 Henk 'm!

  • SinergyX
  • Registratie: November 2001
  • Laatst online: 19:18

SinergyX

____(>^^(>0o)>____

De import/export functie van VBB (tijdje terug alweer) had hier netjes een per page timer voor.

Deze liet gewoon per tabel een (voorafingestelde) x aantal records doen, daarna <next> clicken en ging hij weer verder. Zelf heb ik mijn dbase (toendertijd bt simpel gedaan met copy/paste in een VB mysql proggie, daarmee leek je haast geen timeout te krijgen, echter mijn server (waarop mysql draaien) trok het na 5 minuten 100% Cpu niet meer.

Ik zou eens meer rondkijken richting die VBB convert script.

Nog 1 keertje.. het is SinergyX, niet SynergyX
Im as excited to be here as a 42 gnome warlock who rolled on a green pair of cloth boots but was given a epic staff of uber awsome noob pwning by accident.


Acties:
  • 0 Henk 'm!

  • BlueAce
  • Registratie: November 2002
  • Laatst online: 09-01-2021
Ik ga eerst maar proberen via LIMIT m'n query in stukken te hakken. Hopelijk scheelt dat iets in load. Bedankt allemaal, ik laat het nog wel weten.

Acties:
  • 0 Henk 'm!

  • ripexx
  • Registratie: Juli 2002
  • Laatst online: 17:49

ripexx

bibs

BlueAce schreef op dinsdag 29 maart 2005 @ 16:20:
Ik ga eerst maar proberen via LIMIT m'n query in stukken te hakken. Hopelijk scheelt dat iets in load. Bedankt allemaal, ik laat het nog wel weten.
Load is volgens mij absoluut geen issue ;) Immers doe je een conversie maar eenmaal. Verder is het vaak niet eens nodig om dit via scripts te doen. Met een beetje kennis van SQL zal je al een eind komen en dat kan je via de command line zo doen. Zelfs regexen enz zijn mogelijk dus...

En als je het perse in PHP wil doen , dan via de command line. Kan wel in de browser maar waarom zou je als je het ook direct kan. Indien je geen shell toegang hebt dan is een webbrowser wel een oplossing maar niet aan te raden.

buit is binnen sukkel


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Als je het per se in de browser wil doen, dan moet je kijken dat je om de zoveel tijd wel iets van data naar de browser stuurt. Op die manier verbreekt de browser niet de verbinding (en dat is wat er hier fout ging, vermoed ik).

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • BlueAce
  • Registratie: November 2002
  • Laatst online: 09-01-2021
ripexx schreef op dinsdag 29 maart 2005 @ 20:04:
[...]Load is volgens mij absoluut geen issue ;)
Je spreekt uit ervaring zie ik -_- Vorige keer dat ik een database conversie uitvoerde via de browser werd ik door de host gebelt met de vraag waarom er stoom uit de server kwam. Niet zo vreemd ook... 1+1=2
Erkens schreef op dinsdag 29 maart 2005 @ 15:45:Dat soort dingen moet je niet via een browser doen, gewoon via de shell/console/prompt (hoe je het ook wilt noemen :P)
Want ook daar kan je prima PHP scriptjes uitvoeren :)
php script.php
Bovenstaande opmerking werkte natuurlijk perfect, maar ik was weer te koppig om het gelijk te proberen :P Het scriptje draait nu zoals het zou moeten zonder time-out. Gezien het aantal queries was het deze keer onmogelijk om het anders te doen.

Bedankt allemaal :)

Acties:
  • 0 Henk 'm!

Verwijderd

BlueAce schreef op vrijdag 01 april 2005 @ 15:05:
[...]
Gezien het aantal queries was het deze keer onmogelijk om het anders te doen.

Bedankt allemaal :)
Dan heb je de post van Janoz over het hoofd gezien.
Pagina: 1