es geht darum, dass preise und bestände eines lieferanten in einen online shop automatisch eingelesen werden. die daten sollen effizient aktualisiert werden. somit hat meine tabelle das feld status. wenn dieser den wert 0 hat, muss der datensatz im shop aktualisiert werden. nachdem ich den datensatz eingelesen habe, setze ich status auf 1, damit ein script welches paralell läuft das gleiche produkt nicht auch aktualisiert. hier mein php ausschnitt in verkürzter fassung:
Code: Alles auswählen
while (true)
{
// nächstes relevante produkt zum updaten einlesen (weches sich verändert hat und bereits am längsten wartet)
$sql = "select id, art_id from SUPPLIERS where status = 0 order by update_time asc limit 1";
$res = mysql_query($sql);
$num = mysql_num_rows($res);
// wenn alle produkte durch sind, abbrechen
if ($num == 0)
break;
// produkt einlesen
$row = mysql_fetch_assoc($res);
$id = $row['id'];
$art_id = $row['art_id'];
// datensatz als bearbeitet markieren, damit es im falle von mehreren threads nicht erneut bearbeitet wird
$sql = "update SUPPLIERS set status = 1 where id = $id";
mysql_query($sql);
// daten verarbeiten
update_product($art_id);
echo $art_id . " verarbeitet\n";
}
wenn die einzeln nacheinander laufen, läuft alles problemlos, sind auch einige tausend datensätze die angepasst werden müssen, also kein grund vorzeitig abzubrechen.
denke mal es liegt daran dass ein wert liest bevor der andere was geschrieben hat, wobei ich nicht genau nachvollziehen kann, wieso der einfach irgendwann abbricht.
gibt es eine möglichkeit dagegen etwas zu tun, ohne großartig ressourcen zu verschwenden? die tabelle läuft auf myisam und innodb kommt leider aus schlechten erfahrungen und unwissen nicht in frage.
phil