WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Spara bilder i Databas? Pros & Cons? (https://www.wn.se/forum/showthread.php?t=35546)

grinditwp 2009-03-05 16:40

Enligt min uppfattning borde det vara en dålig idé att spara bilder i t.ex. MySQL. Databasen borde bli ganska tung, relativt snabbt. Men jag är gärna intresserad av andras åsikter på detta.

Exempel kod på hur man kan göra om någon är intresserad:
Kod:

//SKAPA PASSANDE TABELL
CREATE TABLE `images` (
 *`id` INT(11) NOT NULL AUTO_INCREMENT,
 *`image` BLOB NOT NULL,
 *PRIMARY KEY *(`id`)
) ENGINE=MyISAM;

//TRE STEG FÖR ATT SPARA BILDER
$image = chunk_split(base64_encode(file_get_contents("image.jpg")));
$query = "INSERT INTO images (image) VALUES('$image')";
mysql_query($query) or die(mysql_error());
echo "Image id is ".mysql_insert_id();

//VISA BILDER (SEPARAT FIL ex. visabild.php)
header('Content-type: image/jpeg');
$query = "SELECT image from images where id=1";
$rs = mysql_fetch_array(mysql_query($query));
echo base64_decode($rs["image"]);

//VISA BILD PÅ EN HTML SIDA
<img src="visabild.php" />


Som jag kan se det är för och nackdelarna:


Fördel:

* Man behöver inte bry sig om chmod inställningar.
* Enkelt att hålla ordning.
* Enklare att behandla bilderna.
* Bilderna är i säkert förvar, man kan ge personliga rättigheter åt bilderna.
* Enkelt att flytta en hel sida (finns som nackdel också se nedan)

Nackdel:

* Slöare bildhantering
* Resurskrävande
* Databasen blir lätt stor
* Vissa webbhotell ger begränsad storlek på databasen, alt. man får ställa in storleken när man skapar den.
* Svårt att flytta databasen om den blir för stor, phpMyAdmin tillåter väll max typ 50 Mb export?

Har ni fler pros and cons på ämnet? Tips?

När är det en fördel att spara bilder i en databas? Vem gör såhär?

martine 2009-03-05 17:23

Detta har ju diskuterats fram och tillbaka i all evighet. Självfallet ska man begränsa användningen av databaser för att lagra stora volymer bilddata men vad det gäller mindre bilder är ju mindre självklart.

Jag sparar produktbilderna i en webbshop i databasen vilket fungerar utmärkt. Säkerligen finns det nackdelar med detta men för min del överväger det att produkter och bilder finns organiserade och ordnade tillsammans med produkterna. En databasdump ger mig hela backup:en.

Du har nog i stort listat fördelarna och nackdelarna. För min del är det något man avgör från fall till fall.

kw_wasabi 2009-03-05 18:29

Hade ingen aning om att man kunde spara bilder i databas. Jag kör bara ASP och Access-databas och där kanske det inte funkar. Jag brukar bara spara filnamnet som text i databasen vilket jag antar är det vanligaste sättet även i PHP/mySQL, eller?

martine 2009-03-05 19:09

Citat:

Originally posted by kw_wasabi@Mar 5 2009, 19:29
Hade ingen aning om att man kunde spara bilder i databas. Jag kör bara ASP och Access-databas och där kanske det inte funkar. Jag brukar bara spara filnamnet som text i databasen vilket jag antar är det vanligaste sättet även i PHP/mySQL, eller?
Med tanke på vad för slags filnamn en del använder så är nog inte det bästa att spara filnamnen i databasen.

1. Säkerhetsrisk om du inte escape:ar ordentligt.
2. Tar mer plats än att bara använda id för att hitta bilden.
3. Du får problem att hantera det om flera bilder har samma namn.

Jag använder i sådana fall "bild34.jpg" där numret är det unika id:t till raden i databasen.

Asp+Access är väl inte världens modernaste lösning, kommer ihåg att jag använde det runt millenieskifter… :P

kw_wasabi 2009-03-05 22:49

Citat:

Originally posted by martine@Mar 5 2009, 20:09
Asp+Access är väl inte världens modernaste lösning, kommer ihåg att jag använde det runt millenieskifter… :P
Det funkar perfekt för mina syften.

Robert 2009-03-06 12:39

Man kan tänka som följande: bilder ska lagras och då använder man det som är bäst för lagring: disk (alltså i filstrukturen). Databsernas trevligaste uppgift är att sortera och filtrera data, alltså något som inte har med binärfiler att göra. Så det borde vara bäst att inte lagra filer i databasen, MEN det kan finnas tillfället då det är bra; det beror på helt enkelt.

Själv ser jag nyttan av att lätt kunna lägga bildfiler på separata subdomäner där de dessutom servas snabbt av webservern via fil istället för att gå ner via en serversida (.net/php etc) och sedan göra anrop till databasen, samt flytta upp allt data genom alla lager fram till klienten. Om man inte har tungan rätt i mun så kan ju dessutom databasen få låsningar medans den gör insert/update på förhållandevis stora bildfiler.

studiox 2009-03-06 13:10

Citat:

Fördel:
* Man behöver inte bry sig om chmod inställningar.

Det behöver du inte annars heller, förutom en gång.

Citat:


* Enkelt att hålla ordning.

Förstår inte riktigt vad det har för betydelse :)

Citat:


* Enklare att behandla bilderna.

Det borde iofs. bli tvärtom. Då SQL inte kan behandla bilder alls.

Citat:


* Bilderna är i säkert förvar, man kan ge personliga rättigheter åt bilderna.

En databas kan ju krasha, och det kan ta rätt lång tid att göra en restore om den är på flera Gigabyte. Ett filsystem gör du restore på ett kick. Där kan du även göra en unrestore på en specifik fil, inte alls lika lätt i en databas.

Citat:


* Enkelt att flytta en hel sida (finns som nackdel också se nedan)

Om en sida bara bestod av databasfiler, då ska du ju lagra dina php/net filer i databasen också, typ. så ja. Annars så kopierar du väl sajten + filerna och då borde det gå lite snabbare då du inte behöver göra en databasimport som är på flera gigabyte.

grinditwp 2009-03-06 15:20

Citat:

Originally posted by studiox@Mar 6 2009, 14:10

Citat:


* Enklare att behandla bilderna.

Det borde iofs. bli tvärtom. Då SQL inte kan behandla bilder alls.

Tja, jag tänkte väll snarare att man kunde sparat en bild fil i t.ex. 400x400px, när man sedan läser den ut databasen kan man när man ska printa ut den behandla den on-the-fly utan att behöva spara något. Inga dubbletter. Resurskrävande, ja!

Mina pros & cons är mest spontana tankar runt det hela. Vet ej om de är korrekta. Själv sparar jag inga bilder i databaser, men jag har läst en hel del om folk som gör det.

gibson 2009-03-06 22:17

Ger inga direkta för- och nackdelar, berättar bara hur jag gör, om det skulle vara till någon hjälp.

Jag sparar filstruktur/filnamn i databasen och själva filerna på hårddisk.
Om man grupperar detta per användare och har en bra säkerhetskoll på filnamn så ser jag inga problem med detta. Id:n är att föredra om man inte har behov av att manuellt gå in och titta på filer och dess namn :)

tartareandesire 2009-03-06 22:20

Den enda fördelen med att spara bilderna binärt är väl i de fall man har särskild anledning att skydda filerna. Annars är det nog smidigare i de flesta fall att köra på "vanligt" vis.


Alla tider är GMT +2. Klockan är nu 12:00.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson