[PHP-mySQL] - Hele rits query's verwerken

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo,

Ik heb nu al een tijdje een ringtone site, maar wil de content van mijn contentproviders in mijn eigen database proppen om mijn bezoekers van een grotere hoeveelheid content te kunnen voorzien en ook zoekopdrachten te kunnen verbeteren. Nu is het zo dat ik bij één voorzien word met mySQL query's. Dit is heel leuk, maar ik heb geen zin om iedere keer in phpmyadmin te kruipen en die bestanden te uploaden. Ik wil dus zelf een scriptje schrijven die de query's uit de tekstbestanden inleest en uitvoerd. Dit is mijn script:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// verbinding met de db maken
include ("db.inc.php");
// url txt bestand met query's
$url = 'logos.txt'; 
// Bestand in een variabele zetten
$lines_array = file($url); 
// Variabele opbreken in een array
$lines_string = implode('', $lines_array); 
// ; teken verwijderen om te voorkomen dat ie begint te zeuren na de eerste regel
ereg_replace(";", "", $lines_string);
// De query's uitvoeren
  $result = mysql_query($lines_string[0]);
// Geef mogelijke error weer
  echo mysql_error();
// Verbinding met database verbreken
  mysql_close();
// Melden dat je klaar bent
  echo "Done";


Dit zijn een paar van de query's waarvan er iets meer dan 12.000 uitgevoerd moeten worden:

PHP:
1
2
3
INSERT INTO logos (logoid,sectionid,newdate) VALUES (100,103,'2002-12-8');
INSERT INTO logos (logoid,sectionid,newdate) VALUES (101,103,'2002-12-8');
INSERT INTO logos (logoid,sectionid,newdate) VALUES (102,103,'2002-12-8');


Eerst kreeg ik iedere keer de melding dat hij de 60 seconden overschrijdt, dus heb ik het bestand in twee stukken geknipt. Nu krijg ik iedere keer de error:

Lost connection to MySQL server during queryDone

Nu vermoed ik dat hij na alles afgewerkt te hebben de rest van de php code ook als query ziet.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

Heb je daar geen shel access? Dan kun je je bestandje met queries namelijk veel makkelijker loslaten op je DB.

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!

Verwijderd

Topicstarter
ja met SSH2, maar ik heb dat nog nooit bestudeerd. Daarnaast wil ik een crontab proberen te maken dat hij automatisch iedere week de txt file met updates van de server van de contentprovider pakt en uitvoerd.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb SSH shell access nu. Welk commando moet ik aanroepen om hele bestanden in te laden?

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

man mysql
of als dat niet werkt
mysql --help

Acties:
  • 0 Henk 'm!

  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
Als dat niet lukt: je kan na 500 queries een redirect doen naar het bestand met bijvoorbeeld query.php?done=500 en dat je dan de volgende 500 queries doet enz.... misschien een beetje omslachtig maarja....

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
dat laatste klinkt het best, ik ga lekker rotzooien dit weekend en als ik weer eens echt vast zit komt dat wel weer voorbei ;)

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier


Haha :)

Volgens mij is de manier van mij/janoz toch echt veel simpeler ;)
Als in: 1 commando uitvoeren en thats it, op je server... En ja, dat is in zo'n enge dos-achtige-shell :P

http://www.mysql.com/doc/en/mysqldump.html

onderaan ergens staat het wel uitgelegd.

Acties:
  • 0 Henk 'm!

  • wustenveld
  • Registratie: Februari 2002
  • Laatst online: 07-07 13:36
Mee eens, via shell is het beste. Je kunt ook met het php commando exec zo'n shell commando uitvoeren, dat doe ik in een applicatie die ik aan het schrijven ben voor postnuke (pnBible). Daar moeten in een keer zo'n 32000 records gevuld worden in een database. Met het script wat ik toen heb gemaakt die gebruik maakt van de shell vul ik de tabel binnen een of twee seconden.

Dit heb ik met hulp van got bedacht, op [rml][ PHP / MySQL]Automatisch grote tabel vullen (4MB)[/rml] vind je de thread die daar over ging.

[ Voor 17% gewijzigd door wustenveld op 23-01-2003 09:47 . Reden: ff linkje toevoegen ]


Acties:
  • 0 Henk 'm!

  • Sn3akz
  • Registratie: November 2000
  • Laatst online: 05-08 13:55
Of een MySQL managament progje (PHPMyAdmin, MySQLFront) en daar de txt file inladen.. lijkt me idd niet zo moeilijk dit...

Acties:
  • 0 Henk 'm!

  • supakeen
  • Registratie: December 2000
  • Laatst online: 09-09 14:42
Sn3akz schreef op 23 January 2003 @ 09:48:
Of een MySQL managament progje (PHPMyAdmin, MySQLFront) en daar de txt file inladen.. lijkt me idd niet zo moeilijk dit...
Via shell inladen is simpelerer aangezien je het dan kan crontabben :) Maar voor crontabs moet je zozo in de shell :P

Acties:
  • 0 Henk 'm!

  • wustenveld
  • Registratie: Februari 2002
  • Laatst online: 07-07 13:36
phpmyadmin is nog steeds geen shell, dan laad je een tekstbestand vanaf je lokale pc in regel voor regel. Als je het tekstbestand op de server knalt, is de verwerkingstijd veeeeel sneller.

Acties:
  • 0 Henk 'm!

  • Arjan A
  • Registratie: November 2000
  • Laatst online: 11:25

Arjan A

Cenosillicafoob

Als je de nieuwe php gebruikt (4.3.0) kun je ook php scripts vanaf je shell aanroepen. Ik heb gisteravond op die manier nog 200.000 records naar mysql gepompt.

Canon EOS | DJI M2P
Fotoblog · Mijn werk aan jouw muur


Acties:
  • 0 Henk 'm!

  • Sn3akz
  • Registratie: November 2000
  • Laatst online: 05-08 13:55
wustenveld schreef op 23 January 2003 @ 10:37:
phpmyadmin is nog steeds geen shell, dan laad je een tekstbestand vanaf je lokale pc in regel voor regel. Als je het tekstbestand op de server knalt, is de verwerkingstijd veeeeel sneller.
True :)

Maar het is wel simpeler als je niet weet hoe shell access werkt en/of je niet met de MySQL client om kan gaan..

Acties:
  • 0 Henk 'm!

  • Anders
  • Registratie: December 2000
  • Laatst online: 13-09 18:52
Sn3akz schreef op 23 januari 2003 @ 09:48:
Of een MySQL managament progje (PHPMyAdmin, MySQLFront) en daar de txt file inladen.. lijkt me idd niet zo moeilijk dit...
Dat helpt in dit geval natuurlijk helemaal niks, omdat je dan nog steeds met je timeout(s) zit.
phpmyadmin is nog steeds geen shell, dan laad je een tekstbestand vanaf je lokale pc in regel voor regel.
Welnee. Ook bij PHPMyAdmin stuur je eerst alles naar de server (via een textarea of een input type=file), en pas als alles op de server binnen is wordt alles verwerkt. Het wordt niet regel voor regel van je computer ingelezen. In beide gevallen komt het er op neer dat de queries eerst naar de servergestuurd moeten worden, en de tijd die daarvoor nodig is speelt welbeschouwd geen rol in deze discussie.

Natuurlijk heb jij bij PHPMyAdmin wel te maken met een verwerking via PHP (met alle timeouts van dien), waar je het bij een shell direct door MySQL kunt laten doen.

[ Voor 53% gewijzigd door Anders op 23-01-2003 15:40 ]

Ik spoor veilig of ik spoor niet.


Acties:
  • 0 Henk 'm!

  • Sn3akz
  • Registratie: November 2000
  • Laatst online: 05-08 13:55
Anders schreef op 23 januari 2003 @ 15:36:
[...]

Dat helpt in dit geval natuurlijk helemaal niks, omdat je dan nog steeds met je timeout(s) zit.
MySQL Front dus niet. Is een applicatie, je heb dan rechtstreeks verbinding met je MySQL server (mits je gemachtigd bent om te connecten van een andere locatie dan localhost uiteraard :) ) PHPMyAdmin was idd dom om te zeggen.. sorry :)

Acties:
  • 0 Henk 'm!

  • EgoH
  • Registratie: Oktober 2001
  • Laatst online: 08:00
Ik raad je aan toch je shell acces te gaan gebruiken.
Connect bijvoorbeeld met putty en gebruik de volgende commands:
Voor exporteren:
mysqldump -u username -p database_name > sql_file.sql

Voor importeren:
mysql -u username -p database_name < sql_file.sql

de sql file moet je dan natuurlijk eerst even via ftp uploaden

Acties:
  • 0 Henk 'm!

  • chem
  • Registratie: Oktober 2000
  • Laatst online: 11-09 11:19

chem

Reist de wereld rond

ik zou zoiets doen
code:
1
0 0 * * * /usr/local/mysql/bin/mysql -u user -ppasswd databasenaam < /home/user/incoming/file.sql

En ja, zo is je loginnaam zichtbaar voor andere users van dezelfde bak :)

Klaar voor een nieuwe uitdaging.


Acties:
  • 0 Henk 'm!

  • Apollo_Futurae
  • Registratie: November 2000
  • Niet online
Verwijderd schreef op 22 januari 2003 @ 10:31:
Dit zijn een paar van de query's waarvan er iets meer dan 12.000 uitgevoerd moeten worden:
PHP:
1
2
3
INSERT INTO logos (logoid,sectionid,newdate) VALUES (100,103,'2002-12-8');
INSERT INTO logos (logoid,sectionid,newdate) VALUES (101,103,'2002-12-8');
INSERT INTO logos (logoid,sectionid,newdate) VALUES (102,103,'2002-12-8');
het zal waarschijnlijk al flink helpen als je dit eerst verandert in
PHP:
1
2
INSERT INTO logos (logoid,sectionid,newdate)
VALUES (100,103,'2002-12-8'),(101,103,'2002-12-8'),(102,103,'2002-12-8');

dan heb je 1 query ipv 12000 :)

Pas de replâtrage, la structure est pourrie.


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 12:56
Das idd een heel goed begin ja, of je geen time-out krijgt bij 12000 inserts weet ik niet maar dit is wel een heel stuk optimaler!

Acties:
  • 0 Henk 'm!

  • wustenveld
  • Registratie: Februari 2002
  • Laatst online: 07-07 13:36
--
de queries eerst naar de servergestuurd moeten worden, en de tijd die daarvoor nodig is speelt welbeschouwd geen rol in deze discussie
--

phpmyadmin handelt het tekstbestand regel voor regel af. Ik heb die 32000 records met phpmyadmin proberen te doen maar na een minuut of 5 snel mee opgehouden omdat het te langzaam duurde. Nadat ik het scriptje voor verwerken van een tekstbestand in combinatie met shell commando's klaar had was het een kwestie van een seconde. Als phpmyadmin net zo snel werkt volgens jou vind ik mijn praktijk-ervaringen toch een beetje raar

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Top,

Het lukt me nu om het via shell te doen. Nu alleen nog zover komen dat ik de crontabs aan het werk krijg en dan kan ik er voor zorgen dat mijn site automatisch up to date blijft :-D

Acties:
  • 0 Henk 'm!

Verwijderd

of om de 500 query <? sleep(1); ?>

Acties:
  • 0 Henk 'm!

  • Helmet
  • Registratie: Januari 2002
  • Laatst online: 21-08 15:00
Verwijderd schreef op 26 January 2003 @ 15:24:
of om de 500 query <? sleep(1); ?>
dan zit ie nog met het probleem dat op zijn server een script maar maximaal 30 of 60 secs mag draaien :(

ik heb de action=500 ?action=510
ook wel eens gebruikt voor een e-mailscriptje

Icons are overrated

Pagina: 1