PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   MySQLi/PDO/(MySQL) (http://www.selfphp.de/forum/forumdisplay.php?f=22)
-   -   Performance bei mysql und blobs (http://www.selfphp.de/forum/showthread.php?t=11422)

farion 21.09.2005 20:32:32

Performance bei mysql und blobs
 
hallo

Ich habe eine Datenbank, mit mehreren Tabellen sagen wir
tab1,tab2,tab3.

In tab3 sind jetzt jedemenge Blobs gespeichert (Ein virtuelles Dateisystem). Wirkt sich das geschwindigkeitstechnisch auch auf tab1 und tab2 aus?
Im Prinzip hat ja jede Tabelle ihre eigenen Dateien im Datenbankverzeichnis (frm, MYD und MYI), es sollte also nur tab3 langsam werden (Da die entsprechende Datendatei recht gross ist)

Ist das so richtig? Und weiss jemand wie das bei postgre aussieht?

Thx4help
farion

Stevie B. 21.09.2005 21:48:33

AW: Performance bei mysql und blobs
 
Hallo farion,

um erstmal auf Deine Frage zu antworten: Nein, das wirkt sich nicht auf die übrigen Tabellen aus, solange natürlich keine Beziehungen aufgerufen werden.

Aber um die Performance Deiner Datenbank zu erhöhen, würde ich die Dateien nur als String mit einem eindeutigen Schlüssel in der Datenbank ablegen. Die Dateien selbst packst Du in einen Ordner auf Deinem Server.
Das Auslesen der Datenbank geht ruck zuck und belastet auch Deine Transferrate nicht so sehr. Die eigentlichen Dateien werden nur bei Gebrauch/Download abgerufen.

Gruß,
Stevie B.

farion 22.09.2005 13:24:58

AW: Performance bei mysql und blobs
 
Okay danke erstmal.

Der Hintergedanke ist folgender - ich habe eine Benutzerverwaltung und die Dateien sollen dazu Rechte zugeteilt bekommen. Das würde so halt schön gehen.
Wenn ich die Dateien auf die Festplatte speichere, so muss ich ja dafür sorgen, dass sie nicht über zB.: www.domain.de/bild.jpg aufgerufen werden können, da ich so ja die Rechte nicht überprüfen könnte. Wie aber zeige ich sie dann an. Bei Bildern geht das noch mit dem image-funktionen, aber wenn ich irgendetwas anderes wie pdf, binärdatei etc habe...

Gruss Farion

xabbuh 22.09.2005 13:38:15

AW: Performance bei mysql und blobs
 
Zitat:

Zitat von farion
Bei Bildern geht das noch mit dem image-funktionen, aber wenn ich irgendetwas anderes wie pdf, binärdatei etc habe...

Wenn mich nicht alles täuscht, müsste es so funktionieren:
PHP-Code:

<?php
    $type 
mime_content_type($file);
    
header('Content-Type: ' $type);
    
readfile($file);
?>

Oder du bietest die Datei zum Download an: http://php-faq.de/q/q-datei-download.html

farion 22.09.2005 15:36:05

AW: Performance bei mysql und blobs
 
ja so gehts, es steht in der Datenbank, ob eine Datei als Download ausgegeben werden soll.

Code:

<?php session_start();

        require("config.php");
        require("inc/functions/std.inc");
        sql_connect();
        require ("inc/classes/Query.inc");

        //Template
        require ("inc/classes/Template.inc");

        //Rechtemanagement
        require ("inc/classes/User.inc");
        require ("inc/classes/Group.inc");
        require ("inc/classes/RightsMgm.inc");

        //Skinsupport
        require ("inc/classes/Skin.inc");
        $GLOBALS[skin] = new Skin();

function send404(){
        header ( "HTTP/1.0 404 Not Found" );
        $tmpl = new Template("./skins/".$GLOBALS[skin]->getSkin()."/tmpl/status",null);
        $tmpl->set_file("main","404.tmpl");
        $tmpl->parseout("main");
}

function send403(){
        header ( "HTTP/1.0 403 Forbidden" );
        $tmpl = new Template("./skins/".$GLOBALS[skin]->getSkin()."/tmpl/status",null);
        $tmpl->set_file("main","403.tmpl");
        $tmpl->parseout("main");
}

if(isset($_GET[id])){
        $GLOBALS[rights] = new RightsMgm();
        $query = new Query("SELECT * FROM ".$GLOBALS[sql_prefix]."dateisys WHERE id = '".$_GET[id]."'");
        if($query->numRows()){
                if($daten->type == "dir")
                        send404();
                else{
                        $daten = $query->fetch_object();
                        if(checkRights($GLOBALS[rights]->getUser(),$daten->rechte,$daten->user_id,$daten->group_id) >= 1){
                       
                        header("Content-type: ".$daten->type);
                        if($daten->download == 1)
                                header("Content-Disposition: attachment; ".$daten->name);
                        @readfile($GLOBALS[datadir]."".$daten->name);
                        }else
                                send403();
                       
                }
        }else
                send404();
 
}else
        send404();
?>

Da sind jetzt halt noch ein paar includes, sollte aber selbsterklärend sein.
Auf jedenfall kann ich so jetzt überprüfen ob die Datei vorhanden ist und ob der momentane User Rechte hat die Datei anzusehen.

Gruss farion


Alle Zeitangaben in WEZ +2. Es ist jetzt 15:25:05 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.