PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Memorizzazione di immagini in PostgreSQL

Aggiornamento al 2012, quando vediamo che le dimensioni delle immagini e il numero di immagini stanno crescendo sempre di più, in tutte le applicazioni...

Abbiamo bisogno di una certa distinzione tra "immagine originale" e "immagine elaborata", come la miniatura.

Come dice la risposta di Jcoby, ci sono due opzioni, quindi, ti consiglio:

  • usa blob (Binary Large OBject):per l'archivio di immagini originali, al tuo tavolo. Vedi la risposta di Ivan (nessun problema con il backup dei BLOB!), Moduli aggiuntivi forniti da PostgreSQL, How-to ecc.

  • utilizzare un database separato con DBlink:per l'archivio immagini originale, in un altro database (unificato/specializzato). In questo caso, preferisco bytea , ma blob è quasi lo stesso. La separazione del database è il modo migliore per un "servizio web di immagini unificato".

  • usa bytea (BYTE Array):per memorizzare nella cache le immagini in miniatura. Memorizza nella cache le piccole immagini per inviarle velocemente al browser web (per evitare problemi di rendering) e ridurre l'elaborazione del server. Memorizza nella cache anche i metadati essenziali, come larghezza e altezza. La memorizzazione nella cache del database è il modo più semplice, ma controlla le tue esigenze e le configurazioni del server (es. moduli Apache):memorizzare le miniature nel file system potrebbe essere migliore, confrontare le prestazioni. Ricorda che è un servizio web (unificato), quindi può essere archiviato in un database separato (senza backup), servendo molte tabelle. Vedi anche il manuale sui tipi di dati binari di PostgreSQL, i test con la colonna di byte, ecc.

NOTA1:oggi l'uso delle "doppie soluzioni" (database+filesystem) è deprecato (!). Ci sono molti vantaggi nell'usare "solo database" invece del doppio. PostgreSQL ha prestazioni comparabili e buoni strumenti per export/import/input/output.

NOTA2:ricorda che PostgreSQL ha solo bytea , non dispone di un BLOB predefinito di Oracle :"Lo standard SQL definisce (...) BLOB. Il formato di input è diverso da bytea, ma le funzioni e gli operatori forniti sono per lo più gli stessi",Manuale.

EDIT 2014 :Non ho modificato il testo originale sopra oggi (la mia risposta è stata il 22 aprile 12, ora con 14 voti), Apro la risposta per le tue modifiche (vedi "Modalità Wiki", puoi modificare!), per la correzione di bozze e per gli aggiornamenti .
La domanda è stabile (@risposta '08 di Ivans con 19 voti), per favore, aiutaci a migliorare questo testo.