Multithreading PHP

Einfach per Kommata die einzelnen Werte-Blöcke (in Klammern) trennen.
Mein Test-Code war:


test1.php:
PHP:
<?php

$connection = mysqli_connect('***','***','***','***') or die('ERROR');

$text = str_repeat('ABCDE', 51);
$limit = 1000;

$time1 = array(microtime(true));
for ( $i=0; $i<$limit; $i++ )
{
  mysqli_query($connection, 'INSERT INTO big_table (sometext) VALUES (\''.$text.'\')') or die(mysqli_error($connection));
}
$time1[] = microtime(true);

echo $time1[1]-$time1[0] . '|' . memory_get_usage();

?>
test2.php:
PHP:
<?php

$connection = mysqli_connect('***','***','***','***') or die('ERROR');

$text = str_repeat('ABCDE', 51);
$limit = 1000;

$time2 = array(microtime(true));
$queries = 'INSERT INTO big_table (sometext) VALUES (\''.$text.'\')';
for ( $i=0; $i<$limit; $i++ )
{
  $queries .= ',(\''.$text.'\')';
}
mysqli_query($connection, $queries) or die(mysqli_error($connection));
$time2[] = microtime(true);

echo $time2[1]-$time2[0] . '|' . memory_get_usage();


?>
 
Danke!
Das werd ich auf jedenfall so umsetzen.
Werde auch noch gucken, ob ich das mit dem Aufteilen vernünftig realisiert bekomme.
 
Die Sache mit dem Aufteilen:
20 PHP Prozesse sind doch für einen schnellen Server kein Problem, da dass ja nichts rechtenintensives ist, oder?
Auch wenn ich das wie obig beschrieben mache; erst alle sammeln dann Updaten; dürfte den MySQl Server nicht in die Knie ziehen oder?
 
Sollte es nicht, nein...
Allerdings ist es eine gute Frage, ob es nicht gescheiter wäre 5 Mal je 4Prozesse laufen zu lassen, wenn du eh alle SQL-Querys auf einmal durchführst, indem du sie vorher sammelst. Das dürfte doch schneller gehen und spart Ressourcen. Probier einfach bisschen rum...
 
Ich überlege gerade, wie ich die Sache mit dem Aufteilen am besten realisiere;
Meine Überlegungen:
1. Hauptscript wird von Cronjob aufgerufen.
2. Hauptscript zählt alle Einträge in Datenbank(count(id) oder SQL_CALC_FOUND_ROWS)
3. Die Einträge durch eine vordefinierte Zahl teilen, wieviele Prozesse man haben möchte
z.B. 20 Prozesse vordefiniert: 100:20=5
Was mach ich aber bei einer Zahl von 37.845?
4. Das Unterscript mit entsprechenden Parametern aufrufen:
1. Prozess
Code:
php -f script.php 1 5
2. Prozess
Code:
php -f script.php 6 10
Das ganze geht bis zu den 20 Prozessen.
1 = StartID
2 = EndID
5. Halt wie jetzt schon in dem Unterscript alle updaten.

Währe das so gut realisiert, hat jemand noch eine verbesserung/bessere Idee?
 
Ich weiß nicht, ob dass bei PHP mit exec() oder shell_exec() oder der Variante mit den Backticks möglich ist, aber normalerweise kann man Prozesse im Hintergrund ausführen lassen, in dem man am Ende noch ein Und-Zeichen "&" einfügt, also in deinem Fall
Code:
php -f script.php 6 10 &

Kurzinformation (in Englisch): http://unixhelp.ed.ac.uk/shell/jobz2.html
 
Also Insert am schluss ausführen beschleunigt das Skript dermaßen.
Bin jetzt von 5 auf 2Sekunden runter nur durch optimieren des Inserts.
Wie sieht es jetzt mit den Updates aus?
Gibt es da auch so ne' Art multiupdate?
 
Zurück