große DB Tabelle ergänzen (Machbarkeit)
ralphi
- programmiertechnik
Hallo Leute,
ich möchte gerne eine Tabelle, einer ‘dicken’ DB bei Strato ergänzen.
Die DB (iploc) besteht aus 2 Tabellen. Wo in einer (Tabelle1) die IP-Adressbereiche stehen und in der Anderen die dazugehörige Länderkennung.
Ich benötige die Länderkennung für ein regionales Bestellsystem (zur Abholung), um Bots aus USA & Co fernzuhalten.
Jetzt möchte ich die Länderkennung mit in die Tabelle1 aufnehmen, um die Abfrage zu beschleunigen.
Mein Problem:
Mit SSH, benötige ich für ca. 500 Datensätze gut 15 min und wird dann gestoppt. D.h. ich müsste die Ausführung des Progs alle 15 min manuell neu anstoßen.
Bei 567.382 Datensätzen, hieße das 1.135 mal ausführen – geht gar nicht :-|
Jetzt hab ich versucht, den Prozess mit file_get_contents() , cron anzustoßen – macht er nicht :-(
Auf $data = file_get_contents("http://ipinfo.io/".$ip."/json");
Kann ich nicht zugreifen, weil die ausgehende IP der Stratoserver anscheinend von mehreren genutzt wird –> Limit erreicht.
Hat irgendjemand eine Idee?
Das Prog:
<?php
error_reporting(E_ALL);
include "config.php";
echo date ("H:i:s")."\n";
$startzeit = time();
$sql = "SELECT * FROM city2014 WHERE status = 0 ORDER BY locId ;";
$res = mysql_query( $sql);
$anz = mysql_num_rows($res);
$i=0;
while($row = mysql_fetch_array($res)) {
echo $i ." - ";
$sql = "SELECT * FROM block2014 WHERE locId = " . $row['locId'] . " ;";
$res2 = mysql_query( $sql);
$anz = mysql_num_rows($res2);
$row2 = mysql_fetch_array($res2);
if ( strlen ($row2['country']) < 2 ) {
$sql = "UPDATE block2014 SET country = '" . $row['country'] . "' , city = '" . $row['city'] . "' WHERE locId = " . $row['locId'] . " ;";
mysql_query( $sql);
echo $sql . '<br>\n';
}else{
echo $row['locId'] . ' schon vorhanden\n';
} // prüfen
$sql = "UPDATE city2014 SET status = 1 WHERE locId = " . $row['locId'] . " ;"; // als erledigt markieren
mysql_query( $sql);
$i++;
// wie lange brauch ich
$vergangen = (time() - $startzeit);
echo "xxx--".date ("H:i:s", $vergangen)."--xx--".$vergangen."--xxx";
} // alle durch (schön wärs)
echo "ende\n";
exit;
?>
Viele Grüße aus LA
Hallo,
Mein Problem / dicke Tabelle
Bei 567.382 Datensätzen, hieße das 1.135 mal ausführen – geht gar nicht :-|
soweit ich informiert bin, ist das nicht wirklich eine große Tabelle.
Hat irgendjemand eine Idee?
Das Prog:
[...]
scheint eine Aufgabe wahrnehmen zu sollen, die bestimmt von der DB effizienter erledigt wird.
Leider hab ich schon zu lange nichts mehr mit DBs zu tun gehabt, aber da geht bestimmt was...
Gruß
Kalk
Hi,
scheint eine Aufgabe wahrnehmen zu sollen, die bestimmt von der DB effizienter erledigt wird.
Leider hab ich schon zu lange nichts mehr mit DBs zu tun gehabt, aber da geht bestimmt was...
daran hab ich gar nicht mehr gedacht. Klar müsste das mit SQL gehen :-)
Ich google mich mal durch.
Viele Grüße aus LA
manchmal sieht man den Wald..
UPDATE block2014 SET block2014.country =
(SELECT city2014.country FROM city2014
WHERE city2014.locId = block2014.locId)
1285323 Datensätze betroffen. (Die Abfrage dauerte 40.6858 Sekunden)
War ne doofe Frage von mir -> kann gelöscht werden. ;-) Bin halt doch noch Anfänger.
Viele Grüße aus LA
Hallo,
War ne doofe Frage von mir
sowas gibt's nicht.
kann gelöscht werden.
nö, da machstu jetzt einen Hilfreichstern an meine erste Antwort und dann wird irgendwann archiviert.
Bin halt doch noch Anfänger.
Das wird sich in deinem Fall ja zwar mal ändern, aber die Anfänger ansich wachsen ja nach.
Gruß
Kalk
Grundlage für Zitat #1993.