php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2008

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 15.12.2008, 16:35  
Erfahrener Benutzer
 
Registriert seit: 29.09.2008
Beiträge: 155
hoctar befindet sich auf einem aufstrebenden Ast
Standard MySQL Query mit pcntl_fork()

Hi ^^
ich starte mit der funktion pcntl_fork() mehrere Prozesse, dessen output möchte ich gerne in einer Datenbank speichern.
"mysql_query" scheint da wohl nicht zu funktionieren. Hat jemand eine Idee ?
hoctar ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 15.12.2008, 16:37  
Moderator
 
Benutzerbild von cycap
 
Registriert seit: 13.02.2008
Beiträge: 6.816
PHP-Kenntnisse:
Fortgeschritten
cycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nett
Standard

@hoctar: Du wirst auffällig. Du musst dringend an der Qualität deiner Postings arbeiten, vor allem beim eröffnen neuer Threads.
cycap ist offline  
Alt 15.12.2008, 17:41  
Erfahrener Benutzer
 
Registriert seit: 16.07.2005
Beiträge: 1.007
PHP-Kenntnisse:
Fortgeschritten
brian johnson befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von cycap Beitrag anzeigen
@hoctar: Du wirst auffällig. Du musst dringend an der Qualität deiner Postings arbeiten, vor allem beim eröffnen neuer Threads.
besonders wers wagt mit php zu forken, sollte das auf die reihe kriegen...
__________________
PHP4?!?>>>Aktuelle PHP Version: 5.2.11 || 5.3.0
Suse 11.2 *vorfreude*
brian johnson ist offline  
Alt 15.12.2008, 19:59  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.989
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Wobei die Betonung auf PHP liegt. Photocase - Bauer sucht Frau
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline  
Alt 16.12.2008, 11:29  
Erfahrener Benutzer
 
Registriert seit: 29.09.2008
Beiträge: 155
hoctar befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von brian johnson Beitrag anzeigen
besonders wers wagt mit php zu forken, sollte das auf die reihe kriegen...
Das hilft mir echt weiter -.-

Mein Script sieht in etwa so aus:
PHP-Code:
$pids = array();
$j 0;
$csv fopen('datei.csv''r');
while(
$data fgetcsv($csv32';'))
 {
  
$j++;
  
$pids[$j] = pcntl_fork();
  
  if(!
$pids[$j]) 
   {
     
$eintrag "INSERT INTO test (id, zeit) VALUES ('$data[0]', 'now()')";
     
mysql_query($eintrag);
   }

for(
$i 0$i $j$i++) {
  
pcntl_waitpid($pids[$i], $statusWUNTRACED);

aber leider funktioniert das so nicht, weil der child die verbindung schließt.

Ich habe mir schon überlegt für jeden Prozess eine neue DB verbindung aufzubauen. Würde das so gehen ? Habt ihr noch andere Möglichkeiten ?
hoctar ist offline  
Alt 16.12.2008, 11:49  
Moderator
 
Benutzerbild von robo47
 
Registriert seit: 03.09.2004
Beiträge: 11.792
PHP-Kenntnisse:
Fortgeschritten
robo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz sein
Standard

Kannst du begründen warum du forkst ?
Aktuell denke ich dass du nen Haufen Overhead was RAM-Verbrauch + CPU-Last angeht hast, nur durch das forken eines kleinen insert-querys.

Wenn deine daten schon als csv vorliegen und die datenmenge wirklich groß ist, wäre es vielleicht sinnvoller die Daten direkt mit mysqls LOAD DATA INFILE einzulesen das dürfte performanter sein (notfalls vorformatieren der csv damit es passt).

dein 'now()' in deinem query wird übrigends nicht ausgeführt sondern so in die DB eingetragen ... ich weis ja nicht ob das der sinn der sache ist. Wenn du das NOW() trotzdem brauchst, kannst du ja die ids auslesen aus der CSV und dann ein

UPDATE test SET zeit = NOW() WHERE id IN (hier die gesammelten ids);

drüberjagen nachdem alles drin ist.
robo47 ist offline  
Alt 16.12.2008, 11:49  
Moderator
 
Benutzerbild von robo47
 
Registriert seit: 03.09.2004
Beiträge: 11.792
PHP-Kenntnisse:
Fortgeschritten
robo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz sein
Standard

Kannst du begründen warum du forkst ?
Aktuell denke ich dass du nen Haufen Overhead was RAM-Verbrauch + CPU-Last angeht hast, nur durch das forken eines kleinen insert-querys.

Wenn deine daten schon als csv vorliegen und die datenmenge wirklich groß ist, wäre es vielleicht sinnvoller die Daten direkt mit mysqls LOAD DATA INFILE einzulesen das dürfte performanter sein (notfalls vorformatieren der csv damit es passt).

dein 'now()' in deinem query wird übrigends nicht ausgeführt sondern so in die DB eingetragen ... ich weis ja nicht ob das der sinn der sache ist. Wenn du das NOW() trotzdem brauchst, kannst du ja die ids auslesen aus der CSV und dann ein

UPDATE test SET zeit = NOW() WHERE id IN (hier die gesammelten ids);

drüberjagen nachdem alles drin ist.
robo47 ist offline  
Alt 16.12.2008, 11:59  
Erfahrener Benutzer
 
Registriert seit: 29.09.2008
Beiträge: 155
hoctar befindet sich auf einem aufstrebenden Ast
Standard

In der datei.csv stehen nur ids, die ich benutze um in einer anderen Datei Textabschnitte auszulesen. Ich speichere diese Abschnitte in der DB. Damit das nicht alles nacheinander, sondern parallel ablaufen kann benutze ich if forks.
hoctar ist offline  
Alt 16.12.2008, 12:16  
Moderator
 
Benutzerbild von robo47
 
Registriert seit: 03.09.2004
Beiträge: 11.792
PHP-Kenntnisse:
Fortgeschritten
robo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz seinrobo47 kann auf vieles stolz sein
Standard

mysql kann das doch eh nicht parrallel verarbeiten, im endeffekt wandern die inserts auch nacheinander in die Tabelle bevor du sie verwenden kannst.

schau dir mal den link zu load data infile an, wenn du zugang zu ner shell und damit zu mysql-console hast anstatt über php zu gehen, ist das wohl die schnellste lösung, ansonsten das query über php verwenden.
robo47 ist offline  
Alt 16.12.2008, 12:45  
Erfahrener Benutzer
 
Registriert seit: 29.09.2008
Beiträge: 155
hoctar befindet sich auf einem aufstrebenden Ast
Standard

ok danke für die tips

Wie könnte man die Prozesse die gleichzeitig laufen auf z.B. 10 begrenzen ? Gibts da zu irgend eine pcntl funktion ?
hoctar ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
mysql query browser + umlaute gugu Datenbanken 10 28.03.2009 19:15
MySQL Query zum Ersetzen von sonderbaren Umlauten Carino Datenbanken 13 14.05.2007 18:08
MySQL Query anzahl JanM PHP Tipps 2006 3 12.07.2006 19:36
Mysql Query mitloggen cycap Datenbanken 1 03.04.2006 21:36
MySQL Query Browser c01001 Datenbanken 6 14.01.2006 22:13
Lost connection to MySQL server during query in ... ? Alpha Centauri Datenbanken 0 24.10.2005 11:09
verschiedene Query Ergebnisse in MySQL 4.0.x und 4.1.x Datenbanken 3 18.09.2005 15:57
Suche Tipps für Persormance-Steigerung (Geld für Nützliches) Beitragsarchiv 18 16.08.2005 10:57
Lost connection to MySQL server during query bicpi PHP-Fortgeschrittene 17 02.08.2005 11:42
mysql_query meldet Fehler, MySQL Query Browser nicht Datenbanken 3 04.05.2005 17:15
mysql query... alle datensäze älter als x tage löschen... Sclot Datenbanken 2 05.03.2005 23:04
[Erledigt] Datenbank im MySQL Query Browser PHP Tipps 2005 0 07.02.2005 13:54
mysql query fehler Datenbanken 6 19.01.2005 23:44
mysql update query mit mehreren Tabellen funktioniert nicht PHP-Fortgeschrittene 5 08.01.2005 16:29
mysql Fehler - query was empty Anuschka Datenbanken 2 01.09.2004 00:28

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
pcntl_fork mysql, pcntl_fork() php 5.3, pcntl_fork und datenbankverbindung, php pcntl_fork mysql, mysql pcntl_fork, zend framework pcntl_fork mysql, http://www.php.de/php-tipps-2008/49840-mysql-query-mit-pcntl_fork.html, pcntl_fork()

Alle Zeitangaben in WEZ +2. Es ist jetzt 20:33 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum