Avatar billede dogg Nybegynder
15. juli 2006 - 10:51 Der er 18 kommentarer og
1 løsning

Binær data vs. fil på serveren

Hej alle,

Har siddet og ledt efter alt hvad jeg kan finde om binær data i MySQL i forhold til bare at gemme på serveren.

Jeg kan dog ikke finde nogle entydige svar eller begrundelser for hverken det ene eller det andet.

Det jeg skal bruge er filer af ca. 3 MB, og mit spørgsmål er så.

Er der en forringelse med hensyn til performance, hvis jeg gemmer disse filer i databasen, frem for bare at gemme dem et sted på serveren??

På forhånd tak!
Avatar billede michael_stim Ekspert
15. juli 2006 - 11:56 #1
Jeg snakker her om personlige erfaringer, og ikke test eller lign.
Det forringer performance, når du gemmer filer (tekst, billeder osv) i databasen, fremfor bare at lägge et navn ind. Desuden, skal du gemme 3 mb filer, så kommer du hurtigt op i den limit som mange webhoteller har på deres databaser.
Avatar billede dogg Nybegynder
15. juli 2006 - 13:04 #3
det skal lige siges at det skal køre .net og ikke php....
Avatar billede michael_stim Ekspert
15. juli 2006 - 13:07 #4
Det burde ikke ha' noget at sige, da det er MySQL der er flaskehalsen.
Avatar billede dogg Nybegynder
15. juli 2006 - 13:22 #5
limit er heller ikke noget problem, det er på egen server.
Avatar billede Slettet bruger
16. juli 2006 - 08:30 #6
Der findes gode argumenter for at gemme "filer" i en database, men de er af gode grunde meget sjældent orienteret mod performance.

Et af argumenterne har at gøre med driften af systemerne, hvis du har alle applikationsdata i en database så skal du alene tage en backup af databasen for at sikre alle applikationsdata, hvorimod det er nødvendigt at tage en backup af såvel en database og et filsystem, hvis de to ting er adskilt. Tages backup under drift af systemet vil der også være en risiko for at den samlede backup ikke er konsistent, hvis "filer" både kan tilføjes og slettes.

Et andet argument kan være udvikling og vedligeholdelse af systemet, det er væsentligt letterer kun at skulle til en datakilde end at skulle hente referencer og derefter åbne filer. Ligeledes er der nogle ting omkring konsistens der skal håndteres, hvis filen ikke kan skrives må referencen ikke indsættes i databasen og omvendt.

Performance mæssigt vil der være nogle få scenarier hvor det at gemme "filer" i en database er en fordel, men langt de fleste scenarier har ikke gavn af det fra en performance orienteret vinkel.

En af de typiske scenarier, som man ser i web applikationer er at billeder til sitet placeres i en database. Fra et performance mæssigt synspunkt er det rent i skoven fordi hvert billeder kræver et dynamisk request til web serveren, hvor den skal hente billedet ud af databasen og sende det (streame) det til klienten. Transporten i denne process er billeder fra databaseserver til applikationsserver til klient. Hvis billederne derimod holdes på web serveren i et katalog som web serveren kan læse så kan billedet leveres som et statisk request.

Humlen er bare at verden ikke er sort hvid og performance for hvilken pris - det er en afvejning af hvormeget traffik et site skal tage kontra hvad de øvrige omkostninger ved at drive løsningen er.
Avatar billede dogg Nybegynder
16. juli 2006 - 10:53 #7
Trafikken vil nærme sig 500-600 GB månedligt, så det er en hel del...
Avatar billede Slettet bruger
16. juli 2006 - 11:05 #8
Er det billeder vi taler om ?
Avatar billede dogg Nybegynder
16. juli 2006 - 11:20 #9
lydfiler
Avatar billede dogg Nybegynder
16. juli 2006 - 11:22 #10
min idé om at gemme i db´en bunder i sikkerhed. Jeg vil ikke have at folk skal kunne downloade min underlægningsmusik...
Avatar billede Slettet bruger
16. juli 2006 - 18:04 #11
Det er i givet fald en rimelig god ide at placerer dem i databasen så.
Avatar billede arne_v Ekspert
21. juli 2006 - 04:11 #12
Jeg har lavet testen før mod SQLServer.

Men jeg har lige gentaget den (i lettere udvidet form) med MySQL.

(med ASP.NET)

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

Jeg kan ikke se det store performance tab ved at bruge database.

(hvis nogen er interesseret kan jeg godt poste hele koden)

Brug af script (d.v.s. ikke filer servet direkte af web server) giver
mulighed for beskyttelse af indholdet.

Brug af database giver nemmere administration.

Jeg vil sige at man ligger billeder (og lyd) i database indtil man har grund til at tro at
app vil køre bedre med filer.

Ovenstående test er med 25 KB filer.

Jeg lavede også en test med 2.5 MB på et tidspunkt i processen. Der var heller
ikke nogen stor forskel på filer og database der. Faktisk var alle løsninger
lige hurtige. Eller måske skal jeg sige lige langsomme.

Men imidlertid er 2.5 MB (og dermed også 3 MB) for store. Jeg måtte ind og
ændre i MySQL konfigurationen for overhovedet at få applikationen til at
fungere.

Så jeg vil ikke smide 3 MB filer i MySQL alligevel.
Avatar billede dogg Nybegynder
21. juli 2006 - 11:19 #13
jeg er allerede langt i udviklingsprocessen, og har allerede lavet hvad der skal til for at det kører, og indtil videre kører det upåklageligt... Også med filer på +3mb Men nu må jeg se hvordan det kører fremover... Men i skal have tak for jeres hjælp!
Smid et par svar, og få nogle point...
Avatar billede arne_v Ekspert
13. august 2006 - 22:39 #14
.
Avatar billede arne_v Ekspert
12. september 2006 - 00:01 #15
michael_stim ?
kryptos ?
Avatar billede arne_v Ekspert
06. oktober 2006 - 03:11 #16
??
Avatar billede dogg Nybegynder
10. december 2006 - 18:46 #17
arne_v: Lige et ekstraspørgsmål der er opstået: Hvordan fik du konfigureret MySQL til at klare filer af den størrelse? For jeg er flyttet til en anden server, hvor mysql ikke tillader filer af den størrelse, men jeg kan ikke finde ud af hvor konfigurationen skal ske...
Avatar billede arne_v Ekspert
10. december 2006 - 19:59 #18
my.ini:

[mysqld]
...
max_allowed_packet = 8M
Avatar billede dogg Nybegynder
10. december 2006 - 20:01 #19
Mange tak!
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