Bilder u. sonstige Medien - Datenablage im Filesystem statt Datenbank

Hallo zusammen,

ich habe da eine Idee, die sich für mich gar nicht übel anhört, aber möge mich doch bitte jemand stoppen, falls es sich um totalen Blödsinn handelt.

Das Szenario: Ich habe einen Webshop, ausschließlich mit Einzelstücken. Zu jedem dieser Artikel gibt es eine eindeutige Artikelnummer, 4 bis 6 Fotos, hinzu kommt meistens mindestens eine Tondatei als MP3, ggf. noch ein PDF usw. usf.
Nun möchte ich möglichst flexibel bleiben, was die Anzahl der Töne, Fotos etc. angeht und vor allem möchte ich nicht jedes Mal, wenn z.B. beschlossen wird “ach, wir brauchen noch 3 Bilder mehr pro Artikel” in der Datenbank rumpfuschen müssen.
Deswegen dachte ich mir, ich schmeiße alle Töne, Bilder, PDFs usw. für jeden Artikel in ein Verzeichnis, das wie die Artikelnummer des entsprechenden Artikels heißt. Soll dann die Einzelansicht des Artikels ausgelesen werden, lese ich einfach die anzuzeigende Artikelnummer aus, durchlaufe mit PHP das entsprechende Verzeichnis und meine Klasse bastelt mir die entsprechenden Link- und Image-Tags zusammen.

Vorteil (wie ich finde): Es ist sehr einfach, die Anzahl möglicher Bilder, Töne etc. zu erhöhen – einfach entsprechend benannt in den Unterordner mit der Artikelnummer kopieren.

Nachteile: Tja, die weiß ich nicht, deswegen frage ich hier.
Erzeugt das zuviel Serverlast? Gibt es doch irgendwelche Vorteile, wenn die Informationen, welche Töne angehört werden können, in der Datenbank liegen?

Oder ist evtl. ein Mittelweg am besten? (Nach jedem Upload erzeugt ein Script in dem entsprechenden Verzeichnis mit der neuen Artikelnummer einen entsprechenden File, der dann einfach in die details.tpl included wird)?

Ich würde mich über Einschätzungen sehr freuen, weil mir schlicht und einfach die Erfahrung fehlt.

Hallo Ramses,

in unserem Shop (www.stretta-music.com) habe ich das ähnlich gelöst: Die Bilder und Klangbeispiele liegen in einem gesonderten Verzeichnis; da wir extrem viele Bilder haben, gibt es bei uns drei Ebenen von Unterverzeichnissen, benannt nach den letzten Ziffern der Artikelnummer. Die Dateien des Artikels 123456 liegen also unter /images/6/5/4/; und zwar alle Bilder und Klangbeispiele dieses Artikels (das können beliebig viele sein). Wenn Dein Shop nur wenige Artikel hat, kannst Du evt. auf die Unterordner verzichten.
Das Abklappern des Filesystems würde ich aber vermeiden, das verbraucht sehr viel Ressourcen. Ich habe das so gelöst, dass ich in ein Datenbankfeld ein serialisiertes Array mit den URLs, Titeln etc. schreibe, und zwar in dem Moment, wo neue Dateien hochgeladen werden. Wir benutzen dazu allerdings nicht den Shop-Admin. Stattdessen habe ich ein Tool geschrieben, dass bereits beim Scannen die Bilder automatisch beschneidet, archiviert, in verschiedene Größen skaliert, richtig benennt, mit Wasserzeichen und Copyright-Vermerk versieht, die Bilder für die Detailansicht zusammenbastelt (Es sieht nicht so aus, aber in der Detailansicht ist es tatsächlich bei uns nur ein Bild, inkl. der Lupe) etc.
Danach werden die Bilder - ebenfalls von dieser Anwendung - per FTP auf den Server übertragen und ein Serverscript aufgerufen, dass die Bilder in die richtigen Unterverzeichnisse schiebt und die Arrays in die Datenbank schreibt.
Das zu programmieren erfordert nicht gerade wenig Aufwand; aber wir scannen täglich über 100 neue Bilder, und da relativiert sich das dann recht schnell.
Ob sich so etwas für Dich lohnt, weiß ich nicht. In jedem Fall würde ich die Bild-Urls in irgendeiner Form in der DB ablegen; jedesmal per PHP im Filesystem zu suchen wird Deinen Server schnell an die Belastungsgrenze bringen.

Grüße von Udo.

[QUOTE=Udo;15703]
In jedem Fall würde ich die Bild-Urls in irgendeiner Form in der DB ablegen; jedesmal per PHP im Filesystem zu suchen wird Deinen Server schnell an die Belastungsgrenze bringen.[/QUOTE]

Ich bevorzuge für so etwas einen Kompromiss aus beiden:
Erst schauen, ob was in der Datenbank steht.
Wenn nicht, Dateien scannen und ab damit in die DB.
So wird nur beim ersten Besuch eines Kunden das FS gescannt und Du kannst alles schön mit per FTP hochladen ohne daran denken zu müssen, ein Script zu starten.

Erweiterungen:
Ein Datumsfeld und ein Admin-Konfig Wert, der angibt, nach wieviel Tagen das FS neu geprüft werden soll.
Ein Button im Admin, welcher die Werte der betreffenden Tabelle leert.

[QUOTE=MBa;15714]Ich bevorzuge für so etwas einen Kompromiss aus beiden:
Erst schauen, ob was in der Datenbank steht.
Wenn nicht, Dateien scannen und ab damit in die DB.
So wird nur beim ersten Besuch eines Kunden das FS gescannt und Du kannst alles schön mit per FTP hochladen ohne daran denken zu müssen, ein Script zu starten.
[/QUOTE]

Darin sehe ich überhaupt keinen Vorteil. Bei Bildern zu beispielsweise 100 Artikeln, die auf einmal hochgeladen werden, wird dann 100 mal das FS gescannt anstatt einmal.

Der Upload geschieht bei uns ohnehin nicht über ein FTP-Programm, sondern über ein (lokales) Perlskript. Dieses packt zunächst die neuen Bilder in ein zip-File, erzeugt eine Prüfsumme, überträgt das File auf den Server, startet das Serverscript, überwacht evt. Fehlerausgaben des Serverscripts, vergleicht die Prüfsumme und schreibt noch ein paar Logs und sendet bei Fehlern eine Benachrichtigung per Mail. Klingt komplizierter, als es ist - das sind nämlich genau 117 Zeilen Perl-Code. Und niemand muss an irgendetwas denken dabei…

VG, Udo.

[QUOTE=Udo;15715]Darin sehe ich überhaupt keinen Vorteil. Bei Bildern zu beispielsweise 100 Artikeln, die auf einmal hochgeladen werden, wird dann 100 mal das FS gescannt anstatt einmal.
[/quote]

Die Problemstellung sagt, dass das Zielverzeichnis bekannt ist.

[QUOTE=Ramses III;15666]
Deswegen dachte ich mir, ich schmeiße alle Töne, Bilder, PDFs usw. für jeden Artikel in ein Verzeichnis, das wie die Artikelnummer des entsprechenden Artikels heißt. [/QUOTE]
Es wird als nur dieses eine Verzeichnis einmalig gescannt. Und zwar wird dieses scannen vom User wenn er diesen Artikel anschauen will und nicht vom Admin angestoßen.

Der Unterschied zwischen den beiden Lösungen ist, dass bei einen neuen Bild dieses eine Verzeichnis nochmal gescannt werden muss. Bei 100 Bildern muss also einer (der erste Kunde, der diesen Artikel anschaut) eine Sekunde länger warten.

Dafür kann man so die Datenbankfelder initialisieren ohne dass es Probleme gibt.

Aber jeder wie er meint, ich habe schon Verständnis, dass Du bei Deinen System bleiben willst.

Hallo,

wir haben 2 Fragen an die Gemeinde:

  1. Wer hat eine Idee den Bildupload per Script etc. zu vereinfachen ? (Beispiel: Direkt-Upload im Format http://www.shop.de/images/124901_2141036_ak_3.gif )

  2. Wie kann man einstellen, daß der Langtext, Kurzbeschreibung etc. bei auch voll angezeigt wird? (Servervorrausetzungen sind vorhandenen)

Danke für eure Hilfe.

Dirk
__________________
[B]Quickworld24[/B] [B]- House of Shopping[/B]
[B]
[COLOR=Black]Wir machen mit bei der Afrika-Spendenaktion von Endlichzuhause.de[/COLOR][/B]