Avatar billede nemlig Professor
27. oktober 2008 - 21:26 Der er 10 kommentarer og
3 løsninger

Gemme filer i MySQL

Hej alle.
Jeg er i gang med et lille email-script, hvor man via input-felter udfylder emne, emailadresse og indhold.
Det skal også være muligt at vedhæfte filer.
Email og vedhæftede filer gemmes også i et arkiv.

Spørgsmål: Kan man gemme de vedhæftede filer i MySQL eller vil det være bedre, at lægge dem i en mappe på serveren?
Det skal være muligt at vedhæfte alle typer filer.
Avatar billede arne_v Ekspert
27. oktober 2008 - 21:30 #1
Du kan godt gemme filer i MySQL. Felt type BLOB/MEDIUMBLOB/LONGBLOB afhængig af max. længde.

Det kræver en database srever med lidt punch i, men er så til gengæld nemmere at administrere.
Avatar billede w13 Novice
27. oktober 2008 - 21:35 #2
Jeg ville foretrække at spare på databasen og lægge dem i serveren. Men dér er Arne nok noget mere erfaren end jeg.
Avatar billede nemlig Professor
27. oktober 2008 - 21:36 #3
Ok, men One.com er da vist ikke en af de hurtigere? Tror du at det er håbløst med dem?
Hvis max. størrelsen af filen er 10 mb, hvilket felttype skal jeg så anvende?
Avatar billede arne_v Ekspert
27. oktober 2008 - 21:41 #4
Web hotel databaser er ikke velegnede til den slags.

De har normalt ogsaa skrappe limits paa data stoerrelse.

10 MB => MEDIUMBLOB (som har max. 16 MB)
Avatar billede schwarz84 Nybegynder
27. oktober 2008 - 21:43 #5
At gemme filer i databasen har jeg kun dårlige erfaringer med. MySQL bliver ekstremt langsom til at arbejde på tabellen hvis du gør det og hastigheden du kan læse filerne med er kun en brøkdel af hvis du bruger filsystemet.
Avatar billede nemlig Professor
27. oktober 2008 - 21:47 #6
Tak for jeres meldinger. Jeg kan konkludere, at jeg i dette tilfælde bør gemme filerne på serveren.
Nogen der kan bidrage med et link til en tutorials, som beskriver upload-funktionen til serveren. Jeg tænker her på styring af størrelsen og tjek for om der i forvejen ligger en fil med samme navn m.m.
Avatar billede nemlig Professor
27. oktober 2008 - 22:06 #7
Sorry - det med tutorials kan jeg da selv finde.
Send venligst et svar alle 3. Jeg forhøjer lidt og deler pointene mellem jer.
Tak for hjælpen.
Avatar billede w13 Novice
27. oktober 2008 - 22:11 #8
:)
Avatar billede schwarz84 Nybegynder
27. oktober 2008 - 22:45 #9
I stedet for at bekymre dig om filnavne og lignende, så kan du have en databasetabel hvor du gemmer navne og andet meta-data i. Så kan filnavnet bare altid være ID'et på den række i tabellen. Så er du ude over de problemer...
Avatar billede arne_v Ekspert
28. oktober 2008 - 00:44 #10
Jeg lavede engang en test. ASP.NET 1.1, MySQL 4.1, 25 KB billeder, tilfældigt valg
af billeder, rimelig hyppig genvalg af billeder, pænt med ressourcer til MySQL, diverse
andre opsætninger som jeg ikke engang kan huske.

Resultat:

File (1 threads): 1,9 get per second
File (10 threads): 2,2 get per second
File with web app cache (1 threads): 6,6 get per second
File with web app cache (10 threads): 16,1 get per second
File directly by web server (1 threads): 17,6 get per second
File directly by web server (10 threads): 20,1 get per second
Database (1 threads): 10,7 get per second
Database (10 threads): 11,8 get per second
Database with web app cache (1 threads): 15,4 get per second
Database with web app cache (10 threads): 19,6 get per second
File (1 threads): 1,9 get per second
File (10 threads): 2,2 get per second
File with web app cache (1 threads): 16,7 get per second
File with web app cache (10 threads): 19,4 get per second
File directly by web server (1 threads): 17,1 get per second
File directly by web server (10 threads): 20 get per second
Database (1 threads): 10,7 get per second
Database (10 threads): 11,9 get per second
Database with web app cache (1 threads): 17,3 get per second
Database with web app cache (10 threads): 19,6 get per second
File (1 threads): 1,9 get per second
File (10 threads): 2,1 get per second
File with web app cache (1 threads): 16,8 get per second
File with web app cache (10 threads): 17,8 get per second
File directly by web server (1 threads): 17,6 get per second
File directly by web server (10 threads): 20,1 get per second
Database (1 threads): 10,7 get per second
Database (10 threads): 11,6 get per second
Database with web app cache (1 threads): 17,1 get per second
Database with web app cache (10 threads): 19,5 get per second

Absolut ikke noget stort overhead ved brug af database.

Og et svar fra mig.
Avatar billede nemlig Professor
28. oktober 2008 - 07:38 #11
schwarz84: Super ide med at gemme filnavn i SQL og navngive filen med et ID. Men hvad mener du med meta-data?. Der bliver tale om, at der skal kunne uploades alle typer filer.
arne_v: Tak for infoen. Jeg fortrækker nok alligevel at gemme filerne på serveren. Webhotellet er One.com.
Avatar billede schwarz84 Nybegynder
28. oktober 2008 - 07:48 #12
arne_v: Hvis man scroller med en cursor i rækkerne, så får jeg i hvert fald afsindig dårlig performance med Java+MySQL. Du er nok bedre til at få sådan noget til at performe end jeg er...

nemlig: Med meta-data mener jeg al data som ikke er indholdet af filen. Det kan være navn, hvem der ejer dem, tidspunkt for upload eller hvad du nu har brug for at gemme.
Avatar billede nemlig Professor
28. oktober 2008 - 08:38 #13
schwarz84: Tak for infoen - så er jeg med.
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
Computerworld tilbyder specialiserede kurser i database-management

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