Goedemiddag allemaal,
Ik ben bezig met een hobby projectje om de stats van een spel bij te houden voor een hele clan(~500 man).
Nu zijn er zat manieren om de raw data op te vragen in csv's dus dat is het probleem niet.
Ik heb nu echter een vreemd probleem bij het lezen van een csv.
De csv bevat maximaal 501 lines met een maximale linelengte van 300 chars, niets bijzonders dus.
Echter als ik de csv line voor line afwerk en opsla in de database kost dat ruim 30 seconden runtime van het script. Dit lijkt mij niet goed.
Daarnaast is het zo dat de gegevens zijn inserted in de database na een seconde of 3-4... dus wat is dat script de rest van de tijd aan het doen?!
het script gaat als volgt:
output:
Er zit wellicht nog wat rommel in de code, ik ben echt al een paar dagen hiermee bezig en google biedt helaas geen oplossing...
Ben ik nu ongelofelijk dom bezig?
Mvg,
Pmleader
Ik ben bezig met een hobby projectje om de stats van een spel bij te houden voor een hele clan(~500 man).
Nu zijn er zat manieren om de raw data op te vragen in csv's dus dat is het probleem niet.
Ik heb nu echter een vreemd probleem bij het lezen van een csv.
De csv bevat maximaal 501 lines met een maximale linelengte van 300 chars, niets bijzonders dus.
Echter als ik de csv line voor line afwerk en opsla in de database kost dat ruim 30 seconden runtime van het script. Dit lijkt mij niet goed.
Daarnaast is het zo dat de gegevens zijn inserted in de database na een seconde of 3-4... dus wat is dat script de rest van de tijd aan het doen?!
het script gaat als volgt:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
| <?php $start = microtime(true); $mysqli = new mysqli("localhost", "user", "pass", "tracker_test"); /* check connection */ if (mysqli_connect_errno()) { printf("Connect failed: %s\n", mysqli_connect_error()); exit(); } $dbconnect = microtime(true); if (($handle = fopen("http://services.runescape.com/m=clan-hiscores/members_lite.ws?clanName=Overloaded+XP", "r")) !== FALSE) { $csvget = microtime(true); $nn = 0; $naam=''; $rank=''; $xp=0; $kills=0; if (!($stmt = $mysqli->prepare("INSERT INTO list_test(naam, rank, xp, kills) VALUES (?, ?, ?, ?)"))) { echo "Prepare failed: (" . $mysqli->errno . ") " . $mysqli->error; } if (!$stmt->bind_param("ssii", $naam, $rank, $xp, $kills)) { echo "Binding parameters failed: (" . $stmt->errno . ") " . $stmt->error; } while (($data = fgetcsv($handle, 255, ",")) !== FALSE) { # Count the total keys in the row. $c = count($data); if ($nn > 500){ break; } if ($nn > 0) { for ($x = 0; $x < $c; $x++) { if ($x == 0) { $naam = $data[$x]; } if ($x == 1) { $rank = $data[$x]; } if ($x == 2) { $xp = $data[$x]; } if ($x == 3) { $kills = $data[$x]; } } # execute statement if (!$stmt->execute()) { echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error; } } $nn++; } $stmt->close(); echo $nn . " lines parsed."; $done = microtime(true); # Close the File. fclose($handle); } echo "<br><br>"; $end = microtime(true); echo ($end - $start) * 1000 . " ms totaal"; echo "<br><br>"; echo ($dbconnect - $start) * 1000 . " ms db connection"; echo "<br><br>"; echo ($csvget - $start) * 1000 . " ms csv ophalen"; echo "<br><br>"; echo ($done - $start) * 1000 . " ms csv verwerken"; ?> |
output:
code:
1
2
3
4
5
6
7
8
9
| 469 lines parsed. 31531.750917435 ms totaal 3.9360523223877 ms db connection 963.66000175476 ms csv ophalen 31531.699895859 ms csv verwerken |
Er zit wellicht nog wat rommel in de code, ik ben echt al een paar dagen hiermee bezig en google biedt helaas geen oplossing...
Ben ik nu ongelofelijk dom bezig?
Mvg,
Pmleader