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

Lagring af billeder i PostgreSQL

Opdatering til 2012, hvor vi ser, at billedstørrelser og antal billeder vokser og vokser i alle applikationer...

Vi har brug for en vis skelnen mellem "originalt billede" og "bearbejdet billede", f.eks. miniaturebilleder.

Som Jcobys svar siger, er der to muligheder, så jeg anbefaler:

  • brug blob (Binært stort objekt):til originalt billedlager, ved dit bord. Se Ivans svar (intet problem med at sikkerhedskopiere blobs!), PostgreSQL yderligere medfølgende moduler, How-tos osv.

  • brug en separat database med DBlink:til originalt billedlager, i en anden (enificeret/specialiseret) database. I dette tilfælde foretrækker jeg bytea , men blob er tæt på det samme. Adskillelse af databasen er den bedste måde for en "unified image webservice".

  • brug bytea (BYTE Array):til cachelagring af miniaturebilleder. Cache de små billeder for at sende dem hurtigt til webbrowseren (for at undgå gengivelsesproblemer) og reducere serverbehandlingen. Cache også væsentlige metadata, såsom bredde og højde. Database-caching er den nemmeste måde, men tjek dine behov og serverkonfigurationer (f.eks. Apache-moduler):Gem thumbnails på filsystemet kan være bedre, sammenlign ydeevne. Husk, at det er en (samlet) web-service, der derefter kan gemmes i en separat database (uden backup), der betjener mange tabeller. Se også PostgreSQL-manualen til binære datatyper, test med bytea-kolonne osv.

BEMÆRK1:i dag er brugen af ​​"dobbelte løsninger" (database+filsystem) forældet (!). Der er mange fordele ved at bruge "kun database" i stedet for dobbelt. PostgreSQL har sammenlignelig ydeevne og gode værktøjer til eksport/import/input/output.

BEMÆRK 2:husk at PostgreSQL kun har bytea , ikke har en standard Oracles BLOB :"SQL-standarden definerer (...) BLOB. Inputformatet er forskelligt fra bytea, men de angivne funktioner og operatorer er for det meste de samme", Manual.

REDIGER 2014 :Jeg har ikke ændret den originale tekst ovenfor i dag (mit svar var 22. april '12, nu med 14 stemmer), Jeg åbner svaret for dine ændringer (se "Wiki-tilstand", du kan redigere!), for korrekturlæsning og for opdateringer .
Spørgsmålet er stabilt (@Ivans '08-svar med 19 stemmer), vær venlig at hjælpe med at forbedre denne tekst.



  1. Hvordan begrænser jeg antallet af rækker, der returneres af en Oracle-forespørgsel efter bestilling?

  2. Hvordan YEAR() virker i MariaDB

  3. Opdatering af databaserækker uden at låse tabellen i PostgreSQL 9.2

  4. Hvad er brugen af ​​firkantede parenteser [] i sql-sætninger?