Avatar billede kernelx Juniormester
06. februar 2010 - 10:50 Der er 6 kommentarer og
1 løsning

Java web applications og images

Hi,

en web-application kan få fat i user-data ved hjælp af en database
(MySQL, Oracle, PostgreSQL, etc.).

Ofte er der tale om, at det er uklogt, at gemme files som PDF eller Video, eller image-filer i sådan en DB, pga, at en DB ikke er så god til at behandle resourcer, hvor man ikke i forvejen ved noget om hvor stor en fil vil være.

Jeg vil programmere en test-web-app, som udgiver navn, og andre user-data på en web-side - inklusive et billede af denne user.

Mit spørgsmål er:
Hvilket medium er det bedste til at gemme billeder/videoer/PDF-filer?
(DB-Server med en slags reference-ID som er fil-navn til et sted på en FTP/SCP-Server eller lignene)?

Eksisterer der en slags pattern til sådan et problem?
Avatar billede arne_v Ekspert
06. februar 2010 - 16:19 #1
Det er ganske rigtigt at forsøg på at gemme billeder i databasen med Windows 95 & Access 97 altid var en katastrofe.

Det er næppe heller smart at gemme billeder i databasen med et 9 kroner om måneden web hotel med 1 GB fil plads og 10 MB MySQL plads.

Men snakker vi et lidt mere veldimensioneret setup og XX KB billeder (ikke XX GB videoer), så bør det virke fint med billeder i databasen.
Avatar billede arne_v Ekspert
06. februar 2010 - 16:22 #2
Hvis du vil gemme filer i fil systemet, så skal der gemmes enten en relativ eller en absolut sti i databasen.

Glem alt om fil access via FTP - performance vil være jammerlig. Det skal være lokal fil access.

Et vigtigt valg er om du vil lade serveren direkte serve filerne eller om du vil have app kode streane filerne ud. Det første koster på kontrol. Det andet koster på performance (det er meget dyrt at åbne filer).

Overvej også nøje konsistensen (transactional integrity) - den er ikke nem med både database og fil.
Avatar billede kernelx Juniormester
08. februar 2010 - 08:35 #3
Det skal IKKE være noget 9 kroner om måneden.
Det skal være rigtige servere.

Størrelsen af billederne, videoerne, PDF, og andre filer ved man ikke i forvejen. De kan teoretisk være mellem 1kb og nogen GB.

Så vidt jeg ved er der ofte problemer, hvis man gemmer en fil med 1kb og en fil med 1GB i samme DB-feldt. Pga at DB-feldt, som understytter store
data, reserverer alt for meget plads for små filer på harddisken.
Jeg ved ikke om dette problem stædigvæk eksisterer i de nye versioner af
DB'erne.

OS skal definitivt ikke være winXY og DB'en ikke Access :-)

OS bliver nok en linux-distri eller måske unix (f.eks. solaris).
Og DB'en Oracle, MySQL, eller PostgreSQL.

Filerne skal vist nok hellere gemmes direkte på et filesystem - med lokal fil-access?!
Så nu skal der vælges et hurtigt og godt filesystem.
Ved reiserFS er jeg bange for, at det ikke bliver understyttet vældig godt i fremtiden :-(

Mange tak for svar!
Husk at skrive et eller andet som svar.
Avatar billede arne_v Ekspert
08. februar 2010 - 21:26 #4
Problemet med spild plads for varierende stoerrelse filer kan jeg ikke genkende - jeg tror ikke at det er et problem idag.

Hvis penge ikke er noget man snakker om men noget man har, saa er der f.eks. dette her produkt:
  http://www.oracle.com/technology/products/ifs/index.html
som gemmer filer i en Oracle database med alle bells and whistles.

Det burde virke fint med baade KB og MB filer.

Men med mulighed for GB filer skal du nok satse paa fil system.

Eller maaske et mix. Put billeder, PDF etc. i DB men lad videoerne ligge udenfor.

*nix fil systemer er lidt udenfor mit ekspertise omraade. Jeg tvivler paa at der vil vaere den store performance forskel paa fil systemerne. Skal der tilgaaes mange store file, saa boer performance afhaenge af disk systemet.

Husk ogsaa at overvej backup. Det er baade dyrt og besvaerligt at backe store databaser op.
Avatar billede arne_v Ekspert
08. februar 2010 - 21:28 #5
En hjemmestrikket loesning med MySQl eller PostgreSQL vil uden tvivl vaere billigere end den forkromede Oracle loesning.

Og det er ikke saa svaert at haandtere LOB's. Bare lad vaere med at bruge et ORM framework til det.
Avatar billede arne_v Ekspert
08. februar 2010 - 21:28 #6
og et svar
Avatar billede intenz Novice
08. februar 2010 - 22:39 #7
De filer der ikke bliver hentet alt for tit har du også mulighed for at gemme i en cloud løsning (eller måske filer over en vis størrelse).

Her tænker jeg primært på amazons s3 løsning:
http://aws.amazon.com/s3/

Her vil du også have mulighed for at skalere 'uendelige' og der bliver automatisk taget backup af dine filer. Så du vil bare skulle gemme fil-idet i din database.

Om det kan svare sig rent økonomisk afhænger lidt af hvor tit filerne skal sendes fra s3 til brugeren.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester