Avatar billede cbadk Novice
15. juli 2006 - 22:06 Der er 8 kommentarer og
1 løsning

Database kontra Fil hastighed

Vi har været inde på det før i nogle indlæg med hensyn til at hente indhold fra en database i stedet for fra en fil. Feks hvis vi snakker html og billeder.

Men hvordan vil det ligge i forhold til at lave en dynamisk menu fra en database. Jeg har tænkt på at gøre det på denne måde

Jeg har en mssql database med følgende tabeller:

Menu:
- MenuID
- MenuHeader
- MenuExecute
- MenuCode
- MenuCSS

Page:
- PageID
- MenuID
- PageHtmlcode

Og derefter vil jeg gøre det at jeg laver en split i "Page: MenuID" med feks "1,2,3" som indhold

Derefter kalder jeg "MenuID" 1,2,3 og sender dem til browseren.

Er dette forfærdligt langsomere end hvis jeg havde en fil med SSI og derved hentetde filerne?
Avatar billede erikjacobsen Ekspert
15. juli 2006 - 23:14 #1
Ja, det er i hvert fald langsommere og overflødigt, for dine menuer ændrer sig vel ikke så tit.
Når du laver ændringer i menuen, så generer den nødvendige HTLM/ASP/JS-kode og put det på en fil som cache. Fornuftig brug af caching kan gøre et website hurtige og belaste serveren mindre. Mere moderne teknologier end lige ASP, har typisk noget med caching indbygget.
Avatar billede nielle Nybegynder
16. juli 2006 - 09:30 #2
Som udgangspunkt vil alting *altid* kunne gøres hurtigere ved at have data liggende i en fil i stedet for en database. Argumentet er såmæn simpelt nok:

I en database ligger data jo *også* i en fil (eller flere), og det som tager tid i denne sammenhæng er databasemotoren, som ligger ovenpå denne, og fungere som interface til at finde data til dig frem fra filen. Denne motor er i sagens natur meget generel, og man vil altid kunne lave noget hurtigere kode hvis det rettes direkte imod den konkrete opgave.

Så hvorfor bruger man så ikke altid en fil i stedet?

1) Man får meget funktionalitet foræret ved at anvende en database: Man ender hurtigt at skulle lave meget rediger-data-kode i stedet for at kaste sig over kernefunktionaliteten i den webshop man f.eks. er ved at skulle lave.
2) Fordi databasen giver en fleksibilitet som man ikke har hvis man selv skal lave det: Man ender nemlig meget hurtigt med at skulle lave *meget* kode for selv *små* ændringer i datastrukturen. Og så kan det hurtigt ende med at man i stedet vælger at lader være.
3) Ved meget komplekse datastrukture, kan man måske ikke selv overskue at lave det på en fornuftig måde selv.
4) Ved store datastrukture, dvs. mange tabeller som hænger sammen på kryds og tværs, ender man selv at lave kode, som er så abstraheret og generaliseret at man i realiteten ender med at have lavet en databasemotor i stedet for at have lavet kode som rettede sig målret til lige den konkrete fil-datastruktur (puha, en lang sætning!). Dermed mister man meget af den effektivisering som man satte sig for at opnå ved at lave det selv.
5) Man får transaktionsstyring foræret i stedet for at man selv skal lave dette.

At lave et fil-baseret system falder med andre ord sædvanligvis uden for de flestes kompetence område, og så får man jo så meget foræret ved at anvende en database i stedet for en fil. Så hvorfor gøre det?!

Men man kan jo også vælge at have noget af data liggende i en database, og have andet data liggende i filer i stedet: Hvis du står med en menu så er det en oplagt mulighed at lægge denne i en fil. Men det afhænger af situationen. Hvis menuen aldrig ændre sig, så ja. Men hvis menuen skal kunne være redigerbar (f.eks. i forbindelse med et CMS-system), ja så er det nok bedre at have den liggende i databasen.

Og så er der for resten en tredje mulighed: At have menuen liggende *både* i databasen og i en fil:

1) Når der skal redigeres i menuen, så redigeres der i database-versionen.
2) Derefter køres der et lille dedikeret program som generere en fil-version af menuen.
3) Det er denne filversion som bruges på siden; Menuen hentes ikke fra databasen.

Fordelen ved dette er at du kan lade andre om at redigere i menuen ved at redigere i de data som ligger i databasen. Adgangen til dette kan du styre via almindelig logonkode. Du behøver heller ikke at lære dem noget om at bruge et FTP-program for at uploade den nye menu. Endvidere behøver du heller ikke at sætte dem ind i ASP, JavaScript og HTML; denne del tager det lille dedikerede program sig af. Endeligt giver det dig fordelen ved at have data liggende i en fil (hurtighed, og mindre belastning på databasen)m og fleksibiliteten ved at have det liggende i en database.
Avatar billede nielle Nybegynder
16. juli 2006 - 09:36 #3
PS: Du bør ikke kun spekulere på om det er langsommere at bruge databasen frem for en fil. Du bør faktisk også overveje om det overhovedet er noget som du bør bebyrde din database med.

Husk på at den har mange andre ting den også skal servicere. Ved at have sådanne ting som menuen liggende i en fil, undgår du at databasen belastes for hver besøgende som kommer ind på forsiden og så ellers forlader siden igen.
Avatar billede nielle Nybegynder
25. juli 2006 - 22:33 #4
Hvad med noget respons?
Avatar billede nielle Nybegynder
10. august 2006 - 11:01 #5
??
Avatar billede cbadk Novice
25. september 2006 - 22:24 #6
Hejsa alle sammen har været på ferie!

Tak for de mange gode svar.

Har beslutter mig for og lave en løsningn mellem database og fil(include)

Point?
Avatar billede erikjacobsen Ekspert
25. september 2006 - 22:54 #7
Nej tak.
Avatar billede nielle Nybegynder
26. september 2006 - 06:34 #8
Svar :^)
Avatar billede nielle Nybegynder
07. oktober 2006 - 09:35 #9
Så mangler du bare at acceptere svaret :^)
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