php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 11.08.2011, 09:59  
Neuer Benutzer
 
Registriert seit: 11.08.2011
Beiträge: 6
PHP-Kenntnisse:
Fortgeschritten
owagott befindet sich auf einem aufstrebenden Ast
Standard mysql bilder langsam

Hallo zusammen,

in einer Datenbank sind Bilder abgelegt.
das auslesen und anzeigen eines 100kb bildes dauert 3 sekunden.

Php Datei Bild_anzeigen ist von der Struktur her so

PHP-Code:
mysql_open...
$id $_GET['id'];
$strQuery"select imgdata,imgtype from images where id=$id";
$result=mysql_query($strQuery);
$row=mysql_fetch_assoc($result);
header("Content-type: {$row['imgtype']}");
echo 
$row['imgdata'];
mysql_close 
in einer Zweiten Php Datei werden die imges Tags generiert.
Die Bilder werden nicht immer dargestellt oder nur teilweise dargestellt.
PHP-Code:
<img src=Bild_anzeigen.php?id=1>
<
img src=Bild_anzeigen.php?id=2>
<
img src=Bild_anzeigen.php?id=3>
<
img src=Bild_anzeigen.php?id=4>
<
img src=Bild_anzeigen.php?id=5
gibt es einen Tipp die Bilder schneller raus zu bekommen?
oder sollte ich die Bilder zuvor in Datei abspeichern, und diese dann anzeigen.
wie krieg ich den Bild Stream in datei?

Technik:
1 Rechner MySQL
1 Rechner Apache
1 Rechner Firefox
Gigabit Anbindung
owagott ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 11.08.2011, 10:16  
Erfahrener Benutzer
 
Registriert seit: 01.06.2011
Beiträge: 389
PHP-Kenntnisse:
Anfänger
achtelpetit befindet sich auf einem aufstrebenden Ast
Standard

Wenn ich Dich richtig verstehe, hast Du die Bilder als Binärdaten in der DB abgelegt.
Es ist klar, daß eine DB schwerfälliger wird, wenn die Datenmengen wachsen.
Sollte es unumgänglich sein, die Bilder so abzulegen, dann solltest Du wenigstens die Bilder in einer separaten Tabelle ablegen, die nichts enthält außer dem Bild selbst und der Id des Bildes. Alle anderen bildbezogenen Daten kommen in eine andere Tabelle. Es können dann Datensatzoperationen wie "suchen" auf der anderen Tabelle ausgeführt werden und in der Bildertabelle wird nur noch auf einen vorher selektierten DS zugegriffen.
Wenn es nicht gewichtige Gründe für diese Art der Bildspeicherung gibt, dann solltest Du die Bilder lieber im Dateisystem speichern und in der DB nur den Bildnamen.

Du sagst: 1 Rechner MySQL, 1 Rechner Apache
Hat das einen Grund, MySQL und Apache auf 2 verschiedenen Rechnern zu betreiben?
achtelpetit ist offline   Mit Zitat antworten
Alt 11.08.2011, 15:48  
Neuer Benutzer
 
Registriert seit: 11.08.2011
Beiträge: 6
PHP-Kenntnisse:
Fortgeschritten
owagott befindet sich auf einem aufstrebenden Ast
Standard

Es gibt eine separate Tabelle nur für Bilder.
Diese Tabelle ist unwahrscheinlich groß.
Normalerweise wird mit Fremdsoftware (Win32 exe) auf die Tabelle zugegriffen.
Diese Software macht innerhalb von Sekunden 10 bis 100 Bilder.

Es ist also unumgänglich die Bilder woanders abzulegen.

der Apache Server ist nur zu Testzwecke ausgelagert auf einem separaten Rechner so wenig wie möglich zu ändern. Never Touch a Running System

ich suche nach Möglichkeiten diesen Vorgang zu beschleunigen.
speziell optimierte SQL Statements oder das Zeit versetzte umlagern der Bilder aus der Datenbank in das Dateisystem.
mir ist es noch nicht gelungen den Stream in eine Datei zu speichern.

Im Moment verstehe ich nicht die Frage, warum dauert der Aufruf des Bilder über PHP -> MySQL -> Browser 3s
wenn der SQL Client in 0.091s 10 Bilder holt.

hier der code
PHP-Code:
<?
...
$link mysql_connect($hostname,$username,$password);
if(!
mysql_select_db("xxxxxxxxx"$link))
{
    die(
'Unable to connect or select database!');
}
$Index =  $_GET["id"];
$strQuery"SELECT * FROM xxxxxxxxx where index=".$Index.";";

$data =mysql_query($strQuery);
$row=mysql_fetch_assoc($data);
header("Content-type: image/bmp");
print 
$row['Image'];
?>
owagott ist offline   Mit Zitat antworten
Alt 11.08.2011, 15:53  
Moderator¹
 
Registriert seit: 28.03.2010
Beiträge: 7.470
PHP-Kenntnisse:
Fortgeschritten
ChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer Anblick
Standard

Zitat:
Zitat von owagott Beitrag anzeigen
Es gibt eine separate Tabelle nur für Bilder.
Diese Tabelle ist unwahrscheinlich groß.
Diese Aussage ist ebenso unwahrscheinlich „clever“

Indexe gesetzt? Worauf?

Zitat:
mir ist es noch nicht gelungen den Stream in eine Datei zu speichern.
Beileid.

Zitat:
Im Moment verstehe ich nicht die Frage, warum dauert der Aufruf des Bilder über PHP -> MySQL -> Browser 3s
wenn der SQL Client in 0.091s 10 Bilder holt.
Erläutere bitte nachvollziehbar, welche Zeitmessungen du wo und wie vorgenommen hast.
__________________
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
ChrisB ist offline   Mit Zitat antworten
Alt 11.08.2011, 16:22  
Erfahrener Benutzer
 
Registriert seit: 01.06.2011
Beiträge: 389
PHP-Kenntnisse:
Anfänger
achtelpetit befindet sich auf einem aufstrebenden Ast
Standard

Vielleicht bin ich ja nicht schlau genug, aber ich versteh' fast nix.
Zitat:
Normalerweise wird mit Fremdsoftware (Win32 exe) auf die Tabelle zugegriffen.
Was heißt normalerweise?
Zitat:
Diese Software macht innerhalb von Sekunden 10 bis 100 Bilder.
Ist es hier wichtig, in welchem Zeitraum welche Anzahl Bilder gemacht werden?
Zitat:
Es ist also unumgänglich die Bilder woanders abzulegen.
Woanders als wo?
Zitat:
ich suche nach Möglichkeiten diesen Vorgang zu beschleunigen.
Welchen Vorgang?
Jetzt schildere doch bitte mal in ein paar klaren Sätzen, wo der Schuh drückt.
Könnte es sein, daß es darum geht, die in der DB gespeicherten Bilder als jpgs oder tiffs oder was auch immer ins Dateisystem zu schreiben?
achtelpetit ist offline   Mit Zitat antworten
Alt 11.08.2011, 17:18  
Erfahrener Benutzer
 
Benutzerbild von lstegelitz
 
Registriert seit: 07.09.2009
Beiträge: 4.005
PHP-Kenntnisse:
Fortgeschritten
lstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nett
Standard

Zitat:
Zitat von owagott Beitrag anzeigen
Im Moment verstehe ich nicht die Frage, warum dauert der Aufruf des Bilder über PHP -> MySQL -> Browser 3s
wenn der SQL Client in 0.091s 10 Bilder holt.
Weil bei einem Aufruf aus dem Web heraus noch etwas mehr als nur der Datenbankprozess arbeiten muss: Webserver, PHP Code, Datenbanktreiber
__________________
Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.
lstegelitz ist offline   Mit Zitat antworten
Alt 12.08.2011, 10:10  
Neuer Benutzer
 
Registriert seit: 11.08.2011
Beiträge: 6
PHP-Kenntnisse:
Fortgeschritten
owagott befindet sich auf einem aufstrebenden Ast
Standard

Also ich spreche von einem gekapselten System.
Dieses System speichert Bilder in bmp Format in einer Datenbank ab.
Diese Bilder möchte ich darstellen.

Soweit alles klar?

Dabei, kommt es zu dem Phänomen, dass das Anzeigen eines Bildes sehr lange dauert. Das Anzeigen von mehr als einem Bild geling gar nicht oder nur Teilweise.

Soweit alles klar?

den relevanten Code der bisher arbeitet habe ich vorher gepostet.
In wie weit kann dieser beschleunigt werden?
owagott ist offline   Mit Zitat antworten
Alt 12.08.2011, 10:19  
Erfahrener Benutzer
 
Registriert seit: 01.09.2010
Beiträge: 4.561
PHP-Kenntnisse:
Fortgeschritten
eagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Mensch
Standard

nun also auch noch BMP ? .. dir ist schon klar, dass BMP aufgrund von nichtvorhandener Kompression so ziemlich die größtmöglichen Grafikdateien produziert für ein und das gleiche Ergebnis .. klar dass so ein Aufruf länger dauert, als bei einer klein komprimierten Jpeg / PNG / GIF-Grafik...

nichtsdestotrotz solltest du die Grafiken aus der Datenbank holen und im Dateisystem ablegen ... deine Bilder-Tabelle bremst sonst die restlichen Datenbank-Abfragen aus....
__________________
"Irren ist männlich", sprach der Igel und stieg von der Drahtbürste
eagle275 ist offline   Mit Zitat antworten
Alt 12.08.2011, 11:31  
Erfahrener Benutzer
 
Benutzerbild von lstegelitz
 
Registriert seit: 07.09.2009
Beiträge: 4.005
PHP-Kenntnisse:
Fortgeschritten
lstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nett
Standard

Zitat:
Zitat von owagott Beitrag anzeigen
Dabei, kommt es zu dem Phänomen, dass das Anzeigen eines Bildes sehr lange dauert. Das Anzeigen von mehr als einem Bild geling gar nicht oder nur Teilweise.

Soweit alles klar?
Das Phänomen ist schwammig beschrieben. "Sehr lange" und "gelingt nicht oder nur teilweise" sind nicht greifbare Formulierungen. Gehts ein bischen konkreter? Gibts Fehlermeldungen oder Timeouts? "Sehr lange" im Verhältnis zu was?

Geschwindigkeiten lassen sich erhöhen, indem Flaschenhälse gefunden & optimiert werden. Die gilt es aber erst zu finden.

Zwei Dinge, die mir auf Anhieb einfallen:
Nr. 1: Bilder gehören nicht in eine Datenbank
Nr. 2: Ein serverseitiger Cache kann deine Performance bereits deutlich erhöhen.

Ansonsten bleiben noch Faktoren übrig, die du nicht (oder nur marginal bzw. mit erheblichem Aufwand) beeinflussen kannst, z.B. Latenzzeiten, Systemauslastung, Bandbreiten und Datenmengen, um nur ein paar zu nennen.
__________________
Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.
lstegelitz ist offline   Mit Zitat antworten
Alt 12.08.2011, 16:36  
Neuer Benutzer
 
Registriert seit: 11.08.2011
Beiträge: 6
PHP-Kenntnisse:
Fortgeschritten
owagott befindet sich auf einem aufstrebenden Ast
Standard

Das Phänomen ist, wenn ein Bild dargestellt wird, so dauert der Weg über
Apache -> PHP -> MySQL -> Browser geschätzte 3 Sekunden pro Bild.
Die Abfrage der Daten hingegen in einem extern SQL Client weniger als eine Sekunge.

Das Zweite Phänomen, ist wenn drei Bilder nebeneinander per IMG Tag aufgerufen werden.
Wird also quasi parallel drei Anfragen und versucht das Bild darzustellen.
Das Phänomen äußert sich als
"x" kaum timeout, es dauert nur sehr lange,
es wird nur ein halbes Bild dargestellt, man kann teilweise den Aufbau des Bilder sehen.
Das Dritte Phänomen ist, der Browser hört nicht auf zu laden, selbst wenn alle Bilder dargestellt werden.

Der Flaschenhalt, den suche ich auch, alle Rechner haben Gigabit Anbindung
Der Datenbankserver hat einen starken Rechner
Der Webserver langweilt sich auch die ganze Zeit

[Zitat]
Nr. 2: Ein serverseitiger Cache kann deine Performance bereits deutlich erhöhen.
[/Zitat]

Zitat:
Zitat von lstegelitz Beitrag anzeigen
Nr. 2: Ein serverseitiger Cache kann deine Performance bereits deutlich erhöhen.
bezieht sich das auf den Webserver

Ach ja, die Bilddaten sind nur 100kb groß
owagott ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Bilder aus mysql datenbank auslesen Fab4guy PHP Einsteiger 8 22.05.2011 17:35
PHP Zugriff auf MySQL Community Server gewähren daemonTutorials Datenbanken 8 21.02.2011 12:28
[Erledigt] Problem MYSQL Bilder aus DB anzeigen alexalbion Datenbanken 20 08.09.2010 22:17
Bilder in MySQL speichern stayInside PHP-Fortgeschrittene 3 07.02.2010 20:46
Mysql - Distinct mit order by Abfrage - extrem langsam razorhunter Datenbanken 12 05.01.2010 14:50
Bilder in Tabelle einfügen Mysql oder direkt?! DKuhn PHP Tipps 2009 3 30.09.2009 10:14
MySQL Abfrage mit PHP extrem langsam kip Datenbanken 6 24.08.2009 11:11
Mysql - Statment unter Ver. 5.0.26 extrem langsam heohni Datenbanken 9 10.10.2008 12:04
MySQL Abfrage macht Seite langsam Datenbanken 11 19.10.2006 19:38
mysql / php Bilder Upload TomH27 PHP Tipps 2006 9 11.02.2006 23:30
MySQL to Access - INSERT INTO zu langsam bendigo Datenbanken 0 23.11.2005 16:33
Bilder in MySQL Datenbanken 5 03.04.2005 04:53
[Erledigt] Bilder mit Mysql verknüpfen Datenbanken 7 26.03.2005 11:15
[Erledigt] bilder aus mysql in html einbinden Datenbanken 4 30.01.2005 12:53
Problemme mit MySql -> sehr langsam Datenbanken 2 26.11.2004 07:54

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php bilder aus datenbank laden langsam, bildstream erhoehen, mysql_select_db dauert lange, imgsrc.ru langsam, img src php mysql, php mysql_select_db dauert lange

Alle Zeitangaben in WEZ +2. Es ist jetzt 13:33 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum