Thread Was kann sql vertragen? (20 answers)
Opened by olruebe01 at 2006-01-19 23:17

olruebe01
 2006-01-19 23:17
#33917 #33917
User since
2006-01-19
192 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich habe eine Problematik, bzw. eine Frage.

Ich habe einen Bilderdienst, bei dem Bilder auf meinem Server gespeichert und dann per <IMG TAG> bei eBay eingebunden werden. Der Aufruf der Bilder erfolgt hierbei über ein Script, dass überprüft, ob das Bild angezeigt werden darf oder nicht und ggf. sonst ein Fehlerbild ausgibt.

Ich mache das bisher über Perl. Die Auktionsnummer wird hierbau aus dem Refferer gelsen.

Code: (dl )
1
2
 
if (!-e "blacklist/$auktionsnummer.dat") {print "location: bildpfad.jpg"} else {print "locationFehlerbild.jpg"}


Das funzt auch. Nun ist mein Server ziemlich an der Belastungsgrenze und man hat mir geraten, mich mal mit SQL zu beschäftigen. Nun habe ich als erstes mal alle Auktionsnummern der gesperrten Auktionen in eine SQL DB geschrieben. Zum Test sind nur ca. 350 Einträge drin.

Nun wird bei jedem Aufruf eines Bildes in der DB nachgesehen, ob die Auktionsnummer eingetragen ist. Wenn ja -> Fehlerbild, sonst korrektes Bild.
Auch das funktioniert, wenn ich es selber teste. Wenn ich das Script aber richtig in den Dienst stelle, legt es meinen Server lahm und es geht nichts mehr. load average steigt auf über 150, FTP kaum noch möglich, etc...

Mein Gedanke nun: Kann es sein, dass sql zu langsam ist? Ist vielleicht meine vorherige Idee bie Bessere?

Es sind ständig so um die 15.000 Auktionen aktiv, die jeweils zwischen 3 und 12 Fotos von mir integriert haben. Und: Bei nur EINEM Aufruf einer Auktion mit 12 Bildern, folgt ja auch 12 mal die Abfrage - für jedes Bild eben. Allerdings ist dies auch bei der anderen Version der Fall. JEDES aufgerufene Bild erzeugt die Abfrage, ob es angezeigt werden darf oder nicht.

Über sql mache ich das so?

Code: (dl )
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
69
70
71
72
73
74
75
76
77
78
#!/usr/bin/perl -w

use CGI::Carp qw(fatalsToBrowser);
# Dateiflock
use Fcntl qw(:DEFAULT :flock);
use CGI qw(:standard);
use CGI;


use DBI;
my $datenbank = "blacklist";
my $datenbankhost = "localhost";
my $datenbankuser = "xxxebe";
my $datenbankpw = "xxxxte";


######  Übergebene Werte efassen
if ($ENV{'REQUEST_METHOD'} eq 'GET')
{
       $querystring = $ENV{'QUERY_STRING'};}

@arrnameval = split(/&/, $querystring);
foreach $namval (@arrnameval)
{
   ($nam, $val) = split(/=/, $namval);
   $val =~ tr/+/ /;
   $val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
   $FORMDATA{$nam} = $val;
}





##### Auktionsnummer über referer
if ($FORMDATA{Bild}){  ermitteln
       $querystring = $ENV{HTTP_REFERER};

if ($querystring =~ "&amp;") {$querystring =~ s/amp;//;}
if ($querystring !~ "QQitemZ") {
@arrnameval = split(/&/, $querystring);
} else {
@arrnameval = split(/QQ/, $querystring);
}

foreach $namval (@arrnameval)
{
if ($querystring !~ "QQitemZ") {
   ($nam, $val) = split(/=/, $namval);} else {
($nam, $val) = split(/Z/, $namval);}

   $val =~ tr/+/ /;
   $val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
if ($nam eq "item"){
   $FORMDATA{item} = $val;
}
}
}



$item=$FORMDATA{item};
$fehlermeldung = "<li>Fehler bei der Datenbankverbindung aufgetreten. Bitte ueberpruefen Sie die Angaben";

$dbh = DBI->connect("DBI:mysql:$datenbank:$datenbankhost","$datenbankuser","$datenbankpw") || fehlerausgabe($fehlermeldung);

$sth = $dbh->prepare("SELECT item FROM `blacklist` WHERE item = '$item'");
$sth->execute or die DBI->errstr;
$ergebnis =  $sth->fetchrow_array(); #Wenn EIN Ergebnis erwartet wird
$dbh->disconnect; # DB Connect beenden



if ($ergebnis) {
print "Location: ../grafics/keinBild.gif\n\n";}
else {
print "Location: http://abcde.de/userdaten/$FORMDATA{User}/$FORMDATA{Galerie}/$FORMDATA{Bild}tn.jpg\n\n";
}



Oder mache ich etwas falsch? Ich habe seit ca. 4 Stunden Erfahrung mit sql, so dass natürlich auch diese Möglichkeit besteht :-)
Nur: Im test, also wenn ich es allein versuche, haut alles hin. Erst, wenn hunderte Zugriffe kommen, lahmt es...

Schonam vielen Dank!!

View full thread Was kann sql vertragen?