PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Speichern von Bildern in PostgreSQL

Update auf 2012, wenn wir sehen, dass die Bildgrößen und die Anzahl der Bilder in allen Anwendungen wachsen und wachsen ...

Wir brauchen eine Unterscheidung zwischen "Originalbild" und "verarbeitetem Bild", wie z. B. ein Vorschaubild.

Wie Jcobys Antwort sagt, gibt es zwei Möglichkeiten, dann empfehle ich:

  • Verwenden Sie Blob (Binary Large OBject):zum Speichern von Originalbildern an Ihrem Tisch. Siehe Ivans Antwort (kein Problem mit der Sicherung von Blobs!), PostgreSQL zusätzlich bereitgestellte Module, Anleitungen usw.

  • Verwenden Sie eine separate Datenbank mit DBlink:für die Originalbildspeicherung in einer anderen (einheitlichen/spezialisierten) Datenbank. In diesem Fall bevorzuge ich bytea , aber Klecks ist in etwa gleich. Die Trennung der Datenbank ist der beste Weg für einen "einheitlichen Bild-Webservice".

  • Verwenden Sie bytea (BYTE-Array):zum Zwischenspeichern von Miniaturbildern. Cachen Sie die kleinen Bilder, um sie schnell an den Webbrowser zu senden (um Rendering-Probleme zu vermeiden) und reduzieren Sie die Serververarbeitung. Zwischenspeichern Sie auch wichtige Metadaten wie Breite und Höhe. Datenbank-Caching ist der einfachste Weg, aber überprüfen Sie Ihre Anforderungen und Serverkonfigurationen (z. B. Apache-Module):Das Speichern von Miniaturansichten im Dateisystem ist möglicherweise besser, vergleichen Sie die Leistung. Denken Sie daran, dass es sich um einen (einheitlichen) Webdienst handelt, der dann in einer separaten Datenbank (ohne Sicherungen) gespeichert werden kann und viele Tabellen bedient. Siehe auch PostgreSQL-Handbuch für binäre Datentypen, Tests mit Bytea-Spalte usw.

HINWEIS1:Heute ist die Verwendung von "dualen Lösungen" (Datenbank+Dateisystem) veraltet (!). Es gibt viele Vorteile bei der Verwendung von "nur Datenbank" anstelle von dual. PostgreSQL hat eine vergleichbare Leistung und gute Tools für Export/Import/Eingabe/Ausgabe.

HINWEIS2:Denken Sie daran, dass PostgreSQL nur bytea hat , kein standardmäßiges BLOB von Oracle :"Der SQL-Standard definiert (...) BLOB. Das Eingabeformat unterscheidet sich von bytea, aber die bereitgestellten Funktionen und Operatoren sind größtenteils gleich",Manual.

EDIT 2014 :Ich habe den ursprünglichen Text oben heute nicht geändert (meine Antwort war vom 22. April '12, jetzt mit 14 Stimmen), Ich öffne die Antwort für Ihre Änderungen (siehe "Wiki-Modus", editierbar!), zum Korrekturlesen und für Updates .
Die Frage ist stabil (@Ivans' 08er Antwort mit 19 Stimmen), bitte helfen Sie mit, diesen Text zu verbessern.