sql >> Database >  >> RDS >> PostgreSQL

Afbeeldingen opslaan in PostgreSQL

Updaten naar 2012, wanneer we zien dat de afbeeldingsformaten en het aantal afbeeldingen steeds groter worden, in alle toepassingen...

We hebben een onderscheid nodig tussen "originele afbeelding" en "verwerkte afbeelding", zoals miniatuur.

Zoals het antwoord van Jcoby zegt, zijn er twee opties, dus raad ik aan:

  • gebruik blob (Binary Large OBject):voor originele afbeeldingsopslag, aan uw tafel. Zie Ivan's antwoord (geen probleem met het maken van back-ups van blobs!), PostgreSQL extra meegeleverde modules, How-to's etc.

  • gebruik een aparte database met DBlink:voor originele afbeeldingsopslag, bij een andere (verenigde/gespecialiseerde) database. In dit geval geef ik de voorkeur aan bytea , maar blob is bijna hetzelfde. Het scheiden van de database is de beste manier voor een "unified image webservice".

  • gebruik bytea (BYTE-array):voor het cachen van miniatuurafbeeldingen. Cache de kleine afbeeldingen om ze snel naar de webbrowser te sturen (om weergaveproblemen te voorkomen) en de serververwerking te verminderen. Cache ook essentiële metadata, zoals breedte en hoogte. Databasecaching is de gemakkelijkste manier, maar controleer uw behoeften en serverconfiguraties (bijv. Apache-modules):miniaturen opslaan op bestandssysteem kan beter zijn, prestaties vergelijken. Onthoud dat het een (uniforme) webservice is, die vervolgens kan worden opgeslagen in een aparte database (zonder back-ups), die veel tabellen bedient. Zie ook PostgreSQL-handleiding voor binaire gegevenstypen, tests met bytea-kolom, enz.

OPMERKING1:vandaag is het gebruik van "dubbele oplossingen" (database+bestandssysteem) verouderd (!). Er zijn veel voordelen aan het gebruik van "alleen database" in plaats van dual. PostgreSQL heeft vergelijkbare prestaties en goede tools voor export/import/input/output.

OPMERKING 2:onthoud dat PostgreSQL alleen bytea . heeft , geen standaard BLOB van Oracle hebben :"De SQL-standaard definieert (...) BLOB. Het invoerformaat is anders dan bytea, maar de geboden functies en operators zijn grotendeels hetzelfde",Handmatig.

BEWERKEN 2014 :ik heb de oorspronkelijke tekst hierboven niet gewijzigd vandaag (mijn antwoord was 22 april '12, nu met 14 stemmen), Ik open het antwoord voor uw wijzigingen (zie "Wiki-modus", die u kunt bewerken!), voor proeflezen en voor updates .
De vraag is stabiel (@Ivans' antwoord uit '08 met 19 stemmen), help alstublieft deze tekst te verbeteren.



  1. Hoe de nul te verwijderen wanneer het gehele deel nul is in Oracle

  2. Meer informatie over machtigingen op MySQL-tabelniveau

  3. Integreer Firebase met PHP voor realtime communicatie

  4. Een tabel neerzetten in SQL