Schrift
[thread]3805[/thread]

Große Datenbank mit Bildern?: mysql



<< >> 9 Einträge, 1 Seite
Froschpopo
 2007-05-08 01:20
#35425 #35425
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Ich betreibe eine Webseite mit über 200.000 Fotos.
Alle Fotos ergeben einen 2,1 GB großen Ordner.
Nun möchte ich den Fotos Beschreibungen, Tags und Timestamps zuordnen.
Macht es Sinn, die Fotos in der Datenbank abzulegen?
Die Struktur wäre dann folgende:
Code: (dl )
Id, Tags, Beschreibung, Datum, Autor, Datei (Longblob)

Ich hatte bisher leider nur Erfahrung mit Datenbanken ohne binäre Spaltentypen.
Nun würde mich mal interessieren, wie sich denn so eine Konstruktion in etwa auf den Speicher bzw. die Geschwindigkeit auswirkt?

Bisher war die Datenbank immer kleiner als der Arbeitsspeicher des Servers (2 GB). Mit den binären Spalten würde die Datenbank bald erstmals den verfügbaren Arbeitsspeicher überschreiten.

DIe Alternative zur Datenbank wäre noch,auf die dateien im Dateisystem zu verwalten und die Infos in die Metaangaben zu schreiben.

Ich würde nur sehr ungern in der Datenbank auf Files verlinken. Dies würde die Wartung erschweren, weil ich ständig sicherstellen müsste, ob die in der DB verlinkte Datei auch auf der Festplatte existiert.

Gehen wir doch einfach mal von einer korrekten Verwendung aus, also keine Indexes auf LOB's usw.\n\n

<!--EDIT|Froschpopo|1178573265-->
frankes
 2007-05-08 01:36
#35426 #35426
User since
2005-04-02
140 Artikel
BenutzerIn

user image
Es spricht eigentlich nichts dagegen, die Bilder mit in der Datenbank zu speichern.

Du solltest nur auf die maximale Tabellengröße achten, die aber bei modernen Systemen kein Problem sind: Beispiel MySQL Referenz 5.1

Da du deine Bilder, wenn sie in der Datenbank sind, mittels eines Scripts ausgeben musst (Header beachten), kann es noch sein, dass dein Webhoster eine Laufzeitbeschränkung für Scripte hat. - Diese kann sich insofern negativ auswirken, dass manche Besucher bei großen Bilddateien und geringer Bandbreite über die Laufzeit hinaus kommen und die Übertragung des Bildes abgebrochen wird.
Froschpopo
 2007-05-08 01:51
#35427 #35427
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Huhu! Danke für die rasche Antwort :)
Habe hier mal einen Entwurf:
Code: (dl )
1
2
3
4
5
6
7
8
9
CREATE TABLE fotos (
id INT(4) NOT NULL AUTO_INCREMENT PRIMARY KEY,
description CHAR(50),
bin_data LONGBLOB,
filename CHAR(50),
header ENUM('JPEG','PNG','GIF'),
tags VARCHAR(200),
autor VARCHAR(30)
);


Später bekommt "tags" dann einen FULLTEXT.

Der Link ist auch recht Hilfreich. Wenn ich die 4 TB Grenze überschritten habe bin ich eh Millionär ;)
habe ein schickes Rack von Thomas-Krenn hier direkt neben mir stehen, insofern brauch ich mir über Limits wenig sorgen zu machen.
Einzig mein Wissen setzt mir leider manchmal Maßstäbe :)
Ansonsten kann ich auch über mein 50 Mbit static DSL nicht meckern
:D

Aber ich werde jetzt einfach mal das Experiment wagen... Dann sitz ich halt mal ne Nacht lang dran ;)\n\n

<!--EDIT|Froschpopo|1178584095-->
Froschpopo
 2007-05-08 04:27
#35428 #35428
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Neuster Stand:
Ich habe nun mal exakt 100.000 Bilder in die Datenbank eingelesen.

Folgende Ergebnisse:
Code: (dl )
SELECT bin_data FROM fotos WHERE id = 6323

1 row in set (0.03sec) # Bin zufrieden

Zweites Ergebnis:
Code: (dl )
SELECT bin_data FROM fotos WHERE filename = 'urlaub3'

1 row in set (12.3 sec) # horror!!!!!!!!!!!!

Fazit: Die Ausgabe beim Zugriff über den Primärschlüssel ist wirklich sehr gut und schneller als die Ausgabe über das Dateisystem.

Das ursprüngliche Ziel war ja mal, dass ich von der "ORDER BY"-Funktionalität und den WHERE-Möglichkeiten profizieren wollte.
Z.b. möchte ich mir alle Dateien von einem bestimmten Tag oder von einem bestimmten User ausgeben lassen.
In der Praxis funktioniert das aber nicht wirklich befriedigend da Spalten wie "autor" nicht UNIQUE machen kann, schließlich soll ein Autor auch mehrere Fotos hochladen dürfen.

Allerdings bin ich von der Performance beim Zugriff über den Primärschlüssel so sehr erstaunt, dass ich noch nicht vollständig aufgeben möchte.

Meine letzte Hoffnung sind nun Änderungen an der mySQL-Konfiguration.

Schaade hab extra meine Nacht geopfert :(\n\n

<!--EDIT|Froschpopo|1178584349-->
Froschpopo
 2007-05-08 07:01
#35429 #35429
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Ok Boys, ich war wohl etwas müde!
Ich lieg grad im Bett und versuch einzuschlafen als mir plötzlich einfällt, dass es ja neben Primär, unique und fulltext auch noch den ollen Normalo-INDEX gibt :D :D :D
Bei Datenbanken im GByte Bereich reduziert dies die Abfragezeit von 14.88 sec auf 0.01 sec

bin ich geilo oder was.
jetzt is nixmehr mit schlafen, jetzt wird expandiert ! Alles neu, alles frisch, schnell fertigmachen und dann das werbebudget aufstocken :D\n\n

<!--EDIT|Froschpopo|1178593453-->
frankes
 2007-05-08 16:25
#35430 #35430
User since
2005-04-02
140 Artikel
BenutzerIn

user image
"...habe ein schickes Rack von Thomas-Krenn hier direkt neben mir stehen, insofern brauch ich mir über Limits wenig sorgen zu machen.
... Ansonsten kann ich auch über mein 50 Mbit static DSL nicht meckern "

Na, davon kann meinereins leider nur Träumen. :D

Da du deine Bilder nun eh über ein Script aus gibst, kannst
du ja mal Versuche mit autom. generierten Thumbs (GD oder ImageMagick) machen.

Könnte nach einer Suchauswahl mit mehreren Bildern doch die Übertragung nochmals beschleunigen.

Ansonsten schön, dass alles zu deiner Zufriedenheit funktioniert.
ptk
 2007-05-09 00:58
#35431 #35431
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Versuch doch CPAN:MogileFS::Server. Das ist für verteilte Bilderdatenbanken optimal.
Strat
 2007-05-09 14:53
#35432 #35432
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=ptk,08.05.2007, 22:58]Versuch doch CPAN:MogileFS::Server. Das ist für verteilte Bilderdatenbanken optimal.[/quote]
wow, die doku zu MigileFS::Server ist ja ausfuehrlich...

Quote
Brad Fitzpatrick > mogilefs-server-2.15 > MogileFS::Server
Download: mogilefs-server-2.15.tar.gz

Annotate this POD
Module Version: 2.15 Source

* NAME
* SYNOPSIS

NAME ^

MogileFS::Server - MogileFS (distributed filesystem) server
SYNOPSIS ^

$s = MogileFS::Server->server;
$s->run;

as ist alles... toll
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
ptk
 2007-05-09 22:52
#35433 #35433
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Typischerweise verwendet man beim Server nur die Skripte, die dabei sind: mogstored und mogilefsd. Für die Doku sollte man auf die im Pod referenzierte Webseite gehen. Die Clientseite CPAN:MogileFS::Client scheint mir auf dem ersten Blick ordentlich dokumentiert zu sein.\n\n

<!--EDIT|ptk|1178738202-->
<< >> 9 Einträge, 1 Seite



View all threads created 2007-05-08 01:20.