27. oktober 2008 - 21:26Der 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.
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?
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.
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.
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...
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.
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.
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.
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.