Foto's opslaan in MySQL Database

Status
Niet open voor verdere reacties.

Kligham

Gebruiker
Lid geworden
7 jan 2009
Berichten
389
Hallo Helpmij :love:,

Bij deze wil ik eens graag jullie meningen horen i.v.m. het opslaan van foto's. Na het lezen van een aantal artikels, merk ik toch dat vele andere mensen met dezelfde vragen zitten. Wat er is nu eigenlijk het beste voor je website qua snelheid en dergelijke. Kies je ervoor om je foto's op te gaan slaan in je database, of kies je er toch voor om je foto's gewoon op te slaan als files. De meningen op tal van andere fora lopen heel uiteen en bij deze zou ik graag jullie mening hierover horen, aangezien sommigen van jullie toch al jullie programmeurskwaliteiten bewezen hebben.:thumb:

De eerste mogelijk is ervoor kiezen je foto's op te slaan in je database. Eerst en vooral is er al de vraag welke type van database je kiest. Ga je voor InnoDB engine of kies je eerder voor ISAM of nog een andere? K'heb al in een aantal artikels gelezen dat als je ervoor kiest het op te slaan in een database dat je best een aantal dingen in het oog houdt:

1) Je zal waarschijnlijk blob gaan gebruiken om je foto in te gaan opslaan.
2) Naast je foto, sla je ook nog een aantal andere data op, namelijk type, naam, grootte, ... (de zogenaamde metadata).
3) Er wordt meestal ook nog aan te raden om die metadata in een aparte table op te slaan, om ervoor te zorgen dat je database enkel in de table (waar je foto's opgeslagen zijn) moet komen wanneer je het daadwerkelijk nodig hebt.
4) Dit zou dus moeten inhouden dat je dus gaat zoeken op naam, type, ... i.p.v. je foto (blob), zodat je geen problemen krijgt met de prestaties van je database.

Daarnaast kan je er natuurlijk ook voor kiezen, de foto's gewoon te gaan opslaan in je directory. Alleen heb ik dan al vaak gelezen dat dit voor 'zoek' - problemen zal zorgen. Naarmate dat je aantal foto's zal stijgen, zou het steeds langer duren voordat je site de juiste foto zou gevonden hebben. Dit zou dus uitermate gevolgen hebben voor de prestaties van je websites. Er zijn dan ook een tal van andere mogelijkheden dat ze aanhalen:

1) Op een efficiënte manier je foto's gaan opslaan in vele verschillende subdirectories.
2) Heb ook ergens iets gelezen over het opslaan en dan gebruik gaan maken van 'hashen'
3) ...

Het is hoe dan ook duidelijk dat er vele verschillende meningen zijn. Alle meningen zijn welkom, mits een goed onderbouwde argumentatie. Ik hoop dat hieruit een boeiende discussie kan voortvloeien waaruit ik en hopelijk nog andere mensen, kunnen gaan leren. Op deze site werden er al een aantal interessante ideeën aangehaald: http://sheeri.com/archives/39

Alvast bedankt voor al jullie reacties!

Kligham
 
Laatst bewerkt:
Aangezien dit meer met (My)SQL te maken heeft haal ik hem uit de PHP-sectie :)
 
Een van de nadelen van de plaatjes in de database zetten, is dat je het laden van een plaatje door de database server laat doen... en die heeft het meestal al druk genoeg. Daarnaast is het een heel karwei om een plaatje in de database te editen en kun je niet zien welke plaatjes erin zitten.

Het nadeel van 'niet kunnen zoeken' kun je natuurlijk heel makkelijk voorkomen, je maakt gewoon alsnog die rij met meta-data aan, maar ipv het plaatje in een BLOB stoppen, voeg je gewoon de locatie van het plaatje toe in een varchar.

Dan kun je nog steeds zoeken in de database, maar verwijzen naar het plaatje op je harde schijf of zelfs op een andere server.

(Zoeken in de data van het plaatje zelf, hoe zie je dat voor je trouwens? Daar schiet je volgensmij niet echt veel mee op)
 
De mensen hebben de mogelijkheid een foto up te loaden. De mensen kiezen er natuurlijk zelf voor hoe ze de foto noemen, maar ik had gedacht dat je in php de naam van de upgeloade file zou kunnen renamen voordat hij dan daadwerkelijk naar je database of als een file wordt opgeslagen. Dit zou dan op zodanige manier gebeuren dat je dan altijd weet welke foto bij wie hoort.

Dus wat jij voorstelt is gewoon je foto's in files laten opslaan, maar in je database zetten waar hij te vinden is (met de bestandsnaam)?
 
Jep, dan heb je het voordeel van dat het in de database staat voor zoeken naar Meta-data, zonder het nadeel van heel veel BLOB's die niet echt goed zijn voor de database volgensmij.

Als je overigens maar 1 criteria hebt (iets van gebruikersnaam -> plaatje) dan kun je idd met de naam al een heel eind komen; gewoon de juiste naam gebruiken en klaar.
Maar als je echt wilt zoeken op meta-data zou ik die in de DB zetten met een link naar het plaatje.
 
Ik zit nu met nog 2 vraagjes:

1) Op jouw manier zou dan in principe geen probleem zijn met wat ik in mijn eerste post heb aangehaald, nl. dat het doorzoeken van je files langer en langer zou gaan duren naarmate je aantal files stijgt. Mijn vraag is dan of het dan wel nog nodig is als ik bijvoorbeeld mijn website als volgt maak. Ik laat mensen foto's uploaden, en al de foto's die 1 bepaalde gebruiker aanmaakt wordt allemaal in 'zijn directory' opgeslagen. Is dit nu nog nodig, of zou ik het beter toch doen voor wat meer overzichtelijkheid te hebben als er zich later problemen mee hebben.

2) Iets wat ik niet in mijn 1ste post had aangehaald was dat het dan ook nog de bedoeling zou zijn dat ik dan sommige foto's gebruik in mijn applicatie. Dat programma zou in java gemaakt worden. In principe zou dat geen probleem mogen zijn, maar kan je in java dan die foto's binnenhalen op die manier?
 
Als je alle foto's van de gebruiker in zijn eigen directory opslaat, zou het geen probleem moeten zijn, dan hoeven ze helemaal niet meer in de database, dan kun je gewoon de directory uitlezen.
Alleen de database gebruiken als je metadata van de foto nodig hebt, zoals een beschrijving die er bij hoort e.d.

As for Java; er is vast wel een optie om een plaatje van het internet te halen. Je kunt waarschijnlijk gewoon de URL openen en het plaatje kopieren met een library ofzo. Het lijkt me niet dat dat ingewikkelder kan zijn dan een plaatje uit de database plukken. (Maar ik ken geen Java, dus misschien moet je het even op het Java gedeelte navragen :))
 
As for Java; er is vast wel een optie om een plaatje van het internet te halen. Je kunt waarschijnlijk gewoon de URL openen en het plaatje kopieren met een library ofzo. Het lijkt me niet dat dat ingewikkelder kan zijn dan een plaatje uit de database plukken. (Maar ik ken geen Java, dus misschien moet je het even op het Java gedeelte navragen :))

In principe zou het de bedoeling zijn dat ik misschien later mijn eigen server ga gebruiken. Ik ben er natuurlijk nog niet uit aangezien dit maar in een later stadium aan te pas komt. Die foto's zouden dan natuurlijk op mijn eigen server terecht komen, en dan zou mijn programma ze gewoon vanuit mijn server moeten halen en in mijn java programma moeten importeren.

Welke van de 2 opties zou jij verkiezen:

1) Opslaan als files in samenwerking met je database
2) Opslaan in files (die worden opgeslaan in een aparte directory voor elke gebruiker)
3) Of beide (misschien is het een beetje van het goede teveel)
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan