phpbar.de logo

Mailinglisten-Archive

PDF Dokumente in MySQL speichern? Datenbankdesign

PDF Dokumente in MySQL speichern? Datenbankdesign

stepken mysql_(at)_lists.phpcenter.de
Fri, 30 Mar 2001 17:20:22 +0200


> Das zu loesende Problem ist identisch mit der Frage, wie man in Datenbanken
> mit Bildern oder anderen Binaerdateien umgehen sollte. Und wie so oft, kann
> man das nicht eindeutig beantworten, es haengt von den Umstaenden ab.
>
> Meistens wird es sinnvoller, einfacher und performanter sein, die Dateien
> in das Filesystem des Servers zu legen (d.h. einfach als Datei in ein
> Verzeichnis speichern) und in der DB lediglich die Metainformationen der
> Dateien zu halten (Dateiname, Pfad, Mime-Type, Groesse, was-weiss-ich...).

Wenn man sich den Datenflußplan in der Maschine bei einer Speicherung in
 MySQL überlegt, dann wird schnell klar, warum die Datenablage in der 
Datenbank quatsch ist:

50 MB auf Platte anlegen:
[root_(at)_bine test]# time dd if=/dev/zero of=testdatei bs=1024 count=50000
50000+0 Records ein
50000+0 Records aus
0.09user 1.65system 0:08.28elapsed 21%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (118major+19minor)pagefaults 0swaps

==> 5 MB /Sekunde etwa

50 MB auf Festplatte kopieren:
[root_(at)_bine test]# time cp testdatei testdatei1
0.07user 2.50system 0:26.19elapsed 9%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (109major+17minor)pagefaults 0swaps

==> 2 MB / Sekunde etwa

50 MB mit ftp über localhost kopieren:
ftp> mget testdatei
mget testdatei? y
200 PORT command successful.
150 Opening BINARY mode data connection for testdatei (51200000 bytes).
226 Transfer complete.
51200000 bytes received in 25 secs (2e+03 Kbytes/sec)
ftp>                            

==> 2 MByte / Sekunde.

Wenn also z.B. ein Bild von 50 MByte Größe zunächst über Sockets (oder 
loopback Interface) von der Festplatte in MySQL eingelesen werden muß, danach 
an Apache übergeben wird, und dann wieder an die Netzwerkkarte übergeben 
werden muß, dann ist die RAM - Bandbreite es internen BUS gleich 3 - fach 
belastet. Die Auslieferung einer 50 MByte Datei dauert dann ca. eine Minute. 
Wenn der Apache die Datei jedoch direkt von der Platte ausliefern kann, ist 
der RAM-BUS nur 2 -fach belastet.
Das Limit bei Intel-Systemen liegt bei 58 MByte /Sekunde, da der 2nd Level 
Cache (eigentlich ja 200 MByte/Sekunde) dauernd page miss hat, wegen des 
Multitasking. Teure COMPAQ Intel Systeme mit 4 Prozessoren und EV6 BUS sind 
da auch nur Blender, da die XEON auch bei ca. 200 MByte/Sekunde zu machen, 
bzw. bei page miss auch auf ca. 50-60 MByte /Sekunde herunterbrechen.

Abhilfe schafft hier nur eine DEC ALPHA mit 1.6 GByte/Sekunde BUS, einer 
Datenbank mit der Möglichkeit der "RAW Sockets", also der Möglichkeit des 
Direktzugriffs auf eine Festplatte. Hierbei können die UDMA Subsysteme 
wertvolle Arbeit leisten. Ein solches System liefert die Daten auch 
schneller, weil der RAM-BUS 256 Bit breit ist, und nicht 16 Bit, wie bei 
Intels "RAMBUS". Ich habe es ausprobiert und mit COMPAQ PROLIANT Systemen (4 
Prozessor XEON) verglichen. Eine einzige DEC 1-CPU liefert die Daten viel, 
viel schneller....und kostet bei Quant-X nur ein Bruchteil.....
Mit einem PROMISE EIDE UDMA-100 RAID-1 Controller auf RedHat 7.0 (Treiberdisk 
verfügbar) gehen die Daten mit ca. 53 MByte/Sekunde in die DEC hinein - und 
aus der Netzwerkkarte wieder hinaus.  Etwa Faktor 40-50 gegenüber einem 
Pentium III 550 (XEON) ....... 

Ich persönlich teste gerade sapdb (http://www.sapdb.com) aus, ist ADABAS-D 
mit Informix und ORACLE 7.1 - kompatibilität (ist auch GPL) .....die 
Performance ist recht gut ....

Wer Intel's von Aldi einsetzt, muß sich klar darüber sein, daß diese Systeme 
für Spiele optimiert sind, und nicht zum Schaufeln von großen Datenmengen, 
wie z.B. SPARC's von http://www.skyblue.de ....oder ALPHA's von www.Quant-X.de


> Manchmal kann es aber auch sinnvoll sein, auch BLOBS direkt in der DB zu
> halten, z.B. wenn man gezwungen ist, ausschliesslich ueber ein DB-Frontend
> zuzugreifen, keine Schreib- und Leserechte auf das Filesystem des Servers
> hat etc. pp. Schoen ist dann auch, dass die Dateien auch von einem
> Datenbank-Backup erfasst werden.

Das ist relativ egal, außerdem ist ein Backup von Datenbanken recht aufwändig.

Gru/3, Guido Stepken

> Gruss,
> bd
>
>
> ---
> *** Weitere Infos zur Mailingliste und MySQL unter http://www.4t2.com/mysql

-- 
Linux is like a wigwam - No GATES, no WINDOWS and there is a APACHE inside ..
Have fun !

---
*** Weitere Infos zur Mailingliste und MySQL unter http://www.4t2.com/mysql 



php::bar PHP Wiki   -   Listenarchive