Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]11345[/thread]

viele Bilder speichern



<< >> 10 Einträge, 1 Seite
Froschpopo
 2008-02-22 07:07
#106212 #106212
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Was meint ihr, wie z.B. Flickr die Bilder speichert?
Werden die in einer Datenbank gespeichert?
Oder wird in der Datenbank nur der Dateiname gespeichert und der Rest in Verzeichnissen?
Das Datenbankthema ist ja noch sehr umstritten.
Ich habe mittlerweile auch einige GB in einer mySQL-Datenbank gespeichert, was sogar recht gut funktioniert. Aber man hat irgendwie immer ein komisches Gefühl dabei. Irgendwann, so ab 1 GB (BLOB's), dauert dann ein OPTIMIZE TABLE auch schonmal etwas länger, ganz zu schweigen von den mysqldump's.
Jetzt bin ich echt am überlegen, ob ich in der Datenbank nur noch
Dateiname, höhe, breite, alternativtext speichere.
Aber was mich immer stört sind diese synchronisierungs-vorgänge die man machen muss, um zu prüfen, ob z.b. im dateisystem genauso viele dateien vorhanden sind wie datensätze. Es genügt ja schon, wenn das Script zwischen dem Schreiben auf die Festplatte und dem SQL-Insert abgebrochen wurde.
renee
 2008-02-22 09:24
#106216 #106216
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Das prüfen solltest Du schon direkt nach dem Eintrag/Speichern machen und nicht in einem extra Lauf...

*Wie* Flickr das macht kann ich nicht beantworten.
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Froschpopo
 2008-02-22 09:33
#106219 #106219
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
ja das will ich natürlich sowieso machen. Aber es kann ja sein, dass das Script urplötzlich abgebrochen wird und zwar zwischen Speichern in Verzeichnis und SQL-Insert. Ich müsste dann alle paar Stunden einen Vergleich zwischen Verzeichnis und Datenbank machen.
Ich habe allerdings gerade einen Test gemacht und schon kleine Geschwindigkeitsvorteile beim Verzeichnis-Prinzip feststellen können. Ist doch ein kleines bisschen schneller.
Mein Beispiel mit Flickr bezog sich eigentlich eher darauf, wie ihr mit großen Datenmengen umgehen würdet die so im Bereich von 30 Gigabyte liegen.
ptk
 2008-02-23 00:22
#106275 #106275
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Froschpopo
 2008-02-23 09:12
#106284 #106284
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
danke für den Link. Leider finde ich kaum deutsche Suchergebnisse dazu. Ich sehe mich da leider auf einsamem Posten, sollte ich mal Hilfe in Sachen mogilefs benötigen.
So wie ich das mittlerweile sehe, bin ich mit der Datenbank,-Verzeichnis-Lösung erstmal gut beraten.
Aber mal ein kleines Beispiel das zeigt, was blöd daran ist:

Angenommen, ich will alle Bilder eines Users löschen. Dann muss ich erstmal mit SELECT die Dateinamen ermitteln und in einer Liste an unlink() übergeben. Dann muss ich checken ob unlink erfolgreich war und dann die Datensätze löschen (DELETE).
Chaotisch wirds, wenn zwischen diesen beiden Vorgängen der Prozess abgebrochen wird.
ptk
 2008-02-23 12:17
#106289 #106289
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Mach's doch so: erstmal in der DB nur markieren, dass der Datensatz gelöscht werden soll. Dann machst du die unlinks und zum Schluss das DELETE. Falls der Prozess zwischen unlink und DELETE unterbrochen wird, hast du ja noch immer die Liste der zu löschenden Datensätze und kannst diese nochmal bearbeiten.
topeg
 2008-02-23 12:38
#106290 #106290
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Oder falls es sich um eine Postgresql ( >= 8.0)handelt kannst du auch gut PL/Perl nutzen um in der DB selber Funktionen zu schreiben und damit die Dateiaktionen machen. Dank Trigger klappt dann auch das Löschen der Dateien automatisch, wenn der Datensatz gelöscht wird.
Das Script macht dann nur noch reine Datenbankaktionen.
Froschpopo
 2008-02-23 13:02
#106292 #106292
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
ich nutze mySQL.
Da gibt es auch Trigger.
Aber soweit ich weiss kann man keine Verknüpfungen von SQL-Abfragen zu Verzeichnissen herstellen.
topeg
 2008-02-23 13:41
#106294 #106294
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
PL/Perl erlaubt es eigene Funktionen und Datentypen mittels Perl in der Datenbank selber zu schreiben. So weit ich weiß kann das das mySQL nicht. Die Abfragen des Dateisystems liefe dann über Perl selber innerhalb der Datenbank.
Mehr dazu:
http://www.postgresql-support.de/pgbook/node394.html
betterworld
 2008-02-23 19:29
#106304 #106304
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
Wegen der Synchronisationsprobleme beim ausserordentlichen Abbruch des Programms:

Man kann es ja aehnlich wie bei Maildir machen:
Zwei Verzeichnisse, meinetwegen "images" und "images-tmp". Die Bilder werden in "images-tmp" angelegt, der Datensatz wird angelegt, dann wird mit rename() (ist relativ atomar) das Bild nach "images" ruebergeschoben.
Da guckt man dann ab und zu Mal, ob in "images-tmp" noch Bilder mit alten Timestamps rumliegen, und dann muss man nur die mit der Datenbank abgleichen.
<< >> 10 Einträge, 1 Seite



View all threads created 2008-02-22 07:07.