Zurück   Flashforum > Flash und Server > PHP und MySQL

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 29-03-2006, 12:30   #1 (permalink)
peoplesinstinctivetravel
 
Benutzerbild von ran2
 
Registriert seit: Aug 2002
Ort: konstanz
Beiträge: 775
dateien als binary in mysql oder lieber nicht ?

Hallo zusammen,

überlege grade hin und her ob ich einen internen webbasierten dateiupload lieber per .htaccess schützen soll , bzw die upgeloadeten dateien.
so dass man sie per direkt link nicht downloaden kann.

eine möglichkeit wäre ja auch die dateien als binaries in eine mysql db zu stopfen... da würde mich interessieren wie groß die belastung der datenbank durch sowas ist... ob es was bringt eine andere datenbank zunehmen als die das cms verwendet. es handelt sich eigentlich im wesentlichen um pdfs jpgs und docs.

hat jemand mit dieser methode erfahrungen ?? würde mich über erfahrungswerte / tips freuen...

vielen dank!!
ran2 ist offline   Mit Zitat antworten
Alt 29-03-2006, 12:38   #2 (permalink)
schnarchnase
 
Registriert seit: Jan 2002
Ort: konstanz
Beiträge: 2.953
ein paar aktuelle benchmarks würden mich auch interessieren - der tipp von früher, das abspeichern von BLOBs würde zu der datenbank zu viel leistung abverlangen, ist heutzutage u.U. fraglich. sollte ich heut zeit haben, mach ich selber ein paar benchmarks.
__________________

perlen vor die säue.
rechtschreibfan ist offline   Mit Zitat antworten
Alt 29-03-2006, 12:49   #3 (permalink)
peoplesinstinctivetravel
 
Benutzerbild von ran2
 
Registriert seit: Aug 2002
Ort: konstanz
Beiträge: 775
sehr interessant. wäre cool wenn du ne tendenz posten würdest...
denke in meinem fall ist es mittlerweile praktikabel... sind nur 3 leute die momentan auf den bereich zugriff haben sollen...
und wie gesagt nur .pdf, jpgs...

und auch nicht solche massen...
-> bringt es eigentlich was wenn ich dafür dann ne extra db anlege??

danke auf jeden fall !
ran2 ist offline   Mit Zitat antworten
Alt 29-03-2006, 13:09   #4 (permalink)
wuschelkopp
 
Registriert seit: Aug 2004
Beiträge: 1.468
ich denke nicht, dass es gut ist, ne neuen DB anzulegen, da du somit 2 MySQL verbindungen aufbauen müsstest! Einfach ne neue Tabelle erstellen!

Oder du speicherst Dateiname inkl. id in ner DB, die Dateien liegen dann in einem bestimmten durch htaccess geschütztem Verzeichnis. An die Dateien kommst Du, indem Du dann einfach an ein PHP-Wrapper die ID des jeweiligen Files übergibst!
__________________
listening to techno & minimal :>
firstlord18 ist offline   Mit Zitat antworten
Alt 29-03-2006, 13:34   #5 (permalink)
peoplesinstinctivetravel
 
Benutzerbild von ran2
 
Registriert seit: Aug 2002
Ort: konstanz
Beiträge: 775
dann müsste ich ja immer das password eingeben, das ist ja schon bisschen unkomfortabel, wenn ich als user eines login bereichs nochmal das pw eingeben ist das schon bisschen doof. oder verstehe ich was falsch ?
ran2 ist offline   Mit Zitat antworten
Alt 29-03-2006, 13:52   #6 (permalink)
wuschelkopp
 
Registriert seit: Aug 2004
Beiträge: 1.468
nein, musst du nicht

grober ansatz (ohne sicherheitsmechanismen bzw prüfung der eingabedaten des users etc)

wrapper.php:
PHP-Code:
$res mysql_query('select filename from filetable where id = '.(int)$_GET['id']);
$row mysql_fetch_assoc($res);

readfile('pfadZuDenDateien/'.$row['filename']);
exit; 
db-tabelle:
Code:
id                |            filename
-------------------------------
1                              bla.doc
2                              foo.pdf
und dann das ganze so aufrufen:

PHP-Code:
<a href="wrapper.php?id=1">download bla.doc</a
und das verzeichnis, in dem die dateien liegen halt noch per htaccess schützten!
__________________
listening to techno & minimal :>
firstlord18 ist offline   Mit Zitat antworten
Alt 29-03-2006, 14:04   #7 (permalink)
peoplesinstinctivetravel
 
Benutzerbild von ran2
 
Registriert seit: Aug 2002
Ort: konstanz
Beiträge: 775
check grad nicht wie das funktioniert, dass dann wenn ich die file im browser dann in meinem gesicherten bereich downloaden will kein htaccess eingabe mehr kommt... liegt das an dem php wrapper oder wie kommt es dass ich das password dann nicht mehr brauche ...

nachdem was du sagst müsste es ja dann genau so klappen wie ich will nämlich dass ich nur derjenige der direkt auf die datei geht das htaccess pass eingeben müsste... das wäre ja optimal...
ran2 ist offline   Mit Zitat antworten
Alt 29-03-2006, 14:26   #8 (permalink)
wuschelkopp
 
Registriert seit: Aug 2004
Beiträge: 1.468
direkt auf die datei gehen geht garnicht, aber das könnte man auch implementieren...

aber man muss bei mir kein passwort eingeben, da php zugriff auf die datei hat, diese somit einließt und einfach mit dem richtigen header (der bei mir noch fehlt oben im code) an deinen browser sendet!
__________________
listening to techno & minimal :>
firstlord18 ist offline   Mit Zitat antworten
Alt 29-03-2006, 20:38   #9 (permalink)
Nagelneuer User
 
Benutzerbild von hazy fantazy
 
Registriert seit: Dec 2005
Beiträge: 924
Es ist doch gar keine Frage, dass das Speichern eines Blobs keinen Sinn macht, weil der ja dann wie durch eine Pipeline aus dem Filesystem zur DB zum WebServer läuft, während ein File direkt zum Webserver fliesst. Durchsuchen kann man ihn auch nicht gross, so what?

Ich bin auf die Benchmarks gespannt.
mfg .h
__________________
The fact that you've got "Replica" written on the side of your gun and the fact that I've got "Desert Eagle written on the side of mine ... :D
hazy fantazy ist offline   Mit Zitat antworten
Alt 29-03-2006, 21:11   #10 (permalink)
Kaffee...
 
Benutzerbild von x!sign.dll
 
Registriert seit: May 2004
Ort: de/en
Beiträge: 433
was heißt da benchmark?
files vom webserver direkt zu saugen ist ganzklar performanter.
vorallem wenn du z.B. ein portal auf die DB aufsetzt und dann noch die Files als Blob... phew... das gibt Einbußen...
x!sign.dll ist offline   Mit Zitat antworten
Alt 29-03-2006, 23:46   #11 (permalink)
schnarchnase
 
Registriert seit: Jan 2002
Ort: konstanz
Beiträge: 2.953
Zitat:
Zitat von internatshocker
was heißt da benchmark?
files vom webserver direkt zu saugen ist ganzklar performanter.
vorallem wenn du z.B. ein portal auf die DB aufsetzt und dann noch die Files als Blob... phew... das gibt Einbußen...
das würde ich so erstmal nicht sehen.

1. die datenbank braucht man bei zugriffsgeschützten dingen eh - d.h. man könnte in einem query die zugriffsberechtigung überprüfen UND gleichzeitig das bild holen. -> nur eine datenbank-abfrage statt "abfrage + disk touches".
2. gerade das mysql query cache ist nicht zu verachten - 'pages' von identischen queries werden von der datenbank so lange wie möglich im RAM gehalten, d.h. subsequente anfragen geben das ergebnis aus dem RAM aus, statt jedes mal die festplatte zu nerven. der apache kann hier nichts cachen, und das dateisystem auch nicht - denn die zugriffsberechtigung muss auf jeden fall überprüft werden.
3. die safe_mode-probleme fallen weg (hoffentlich wird's mit php6 besser).
4. backup: alle files sind in einem einzigen sql-dumpfile, xml-file o.ä... keine dateien, ordner, zeug UND ein sql-dump. alles an einem ort.

die springenden punkte sind (ohne dass ich bis jetzt dazugekommen wäre, einen richtig guten und repräsentativen benchmark zu machen):
- es hängt vom verfügbaren RAM ab, ob die eine oder die andere lösung besser ist.
- es hängt auch davon ab, ob das query cache an ist oder nicht.
- es hängt auch davon ab, wie viele parallelzugriffe man bedienen können will, und ob man eine datei überhaupt auf einmal im hauptspeicher halten kann, oder ob die datei so groß ist, dass man z.b. ans memory-limit von php stößt.
- mit welcher lösung fühlt man sich wohler? kann man eher das dateisystem derart optimieren, dass es nahezu genauso schnell reagiert wie die datenbank? womit hat man persönlich mehr erfahrung und weiß im ernstfall schneller, was zu tun ist, wenn was fehlschlägt?
- wie viele user greifen gleichzeitig auf die selbe ressource zu, damit dieser RAM-cache-effekt seine volle wirkung entfaltet?

grundsätzlich würde ich erstmal sagen, dass man mit der filesystem-variante sicherlich eh auf der sicheren seite ist, dass die db-variante aber durchaus ihre vorteile haben "könnte", vorausgesetzt, das ganze wird klug angesetzt und man kann auch an der datenbank und vor allem an den abfragen rumfeilen.
__________________

perlen vor die säue.
rechtschreibfan ist offline   Mit Zitat antworten
Alt 30-03-2006, 00:12   #12 (permalink)
Nagelneuer User
 
Benutzerbild von hazy fantazy
 
Registriert seit: Dec 2005
Beiträge: 924
Ein Cache lohnt sich doch auch für Daten, die möglicherweise über 50 Joins mühsam zusammengesucht wurden, viel eher als für ein blödes Bild, das nur aus Bequemlichkeit des Admins in der DB steckt. Ein nackter Performancetest wäre auf jeden Fall trotzdem interessant. Welche Last erzeugt ein 1MB Bild vom Filesystem und aus der DB.

Wenn man mal kurz googlet, sieht man jedenfalls gleich, dass alle bekannten DBs Blobs unterstützen. Also werden sie ja wohl auch benutzt. Ein Argument ist auch nicht von der Hand zu weisen. Wenn man z.B. Millionen von Bildern hat, wird es mit dem Filesystem kompliziert, weil dessen Performance häufig auf eine bestimmte Anzahl von Dateien pro Verzeichnis optimiert ist, 1024, 4096 oder ähnliches. Auch das Argument "einfaches Backup" ist nicht ganz verkehrt. Wobei ich mich gerade frage, ob man auch ein inkrementelles Datenbankbackup erstellen kann oder ob man immer alles speichern muss. Bei sehr grossen Datenbanken kann das kompliziert und teuer werden.

mfg. h
__________________
The fact that you've got "Replica" written on the side of your gun and the fact that I've got "Desert Eagle written on the side of mine ... :D

Geändert von hazy fantazy (30-03-2006 um 00:44 Uhr)
hazy fantazy ist offline   Mit Zitat antworten
Alt 30-03-2006, 09:12   #13 (permalink)
Zeus
Gast
 
Beiträge: n/a
Das CMS Typo3 nutzt Blobs extensiv und hat keinerlei Perfomanceverluste dadurch. Es gibt einige Gründe, die dafür sprechen. Und andere dagegen.

Großformatige Dinge (filesize) würde ich sicherlich nicht in der Datenbank ablegen wollen (sagen wir mal größer als 1 MB). Das hängt aber wieder von vielen anderen Faktoren wie etwa RAM, Prozesser und so weiter des Servers ab.

Wenn die Strategie stimmt, sind Blobs kein Thema.

Z
  Mit Zitat antworten
Alt 30-03-2006, 09:33   #14 (permalink)
schnarchnase
 
Registriert seit: Jan 2002
Ort: konstanz
Beiträge: 2.953
ok, jetzt interessiert's mich endgültig auch

also: um einen ordentlichen benchmark zu machen, würde ich sagen, wird ein interface implementiert, das alle speichersysteme implementieren müssen. so kann man jede implementierung mit immer den selben aktionen testen.

PHP-Code:
interface FileHandler {
    public function 
save$originalFileName );
    public function 
fetch$fileID );
    public function 
move$fromID$toID );
    public function 
copy$fromID $toID );
    public function 
delete$fileID );    
    public function 
exists$fileID );    


braucht's noch mehr aktionen? sonst fang ich an, MysqlBlob und Disk reinzuhacken.
__________________

perlen vor die säue.

Geändert von rechtschreibfan (30-03-2006 um 09:49 Uhr)
rechtschreibfan ist offline   Mit Zitat antworten
Alt 30-03-2006, 10:51   #15 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
*händerreib*
Ich bin gespannt, endilch bekommt man mal was von dir zu sehen, erhoffe mir viel zu lernen.
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)
Janoscharlipp ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

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

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



Alle Zeitangaben in WEZ +1. Es ist jetzt 14:10 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele