11. juli 2006 - 12:08Der er
20 kommentarer og 2 løsninger
Teoretisk design
Jeg er løbet ind i lidt af et design dilemma.
Jeg har en gruppe objekter hvor rå-dataene bliver hentet fra en database.
Disse objekter vil jeg have samlet i en container, til masse håndtering af objekterne.
Der er 2 muligheder for dette:
1. objekterne bliver smidt i et ArrayList som så bliver gemt i en session. - fordel: Der bliver kun lavet ét database udtræk pr. objekt. - ulempe: Hvis der bliver rettet i rå-dataene i databasen, mens jeg har objektet gemt i session'en, stemmer dataene i objektet ikke overens med dem i databasen.
2. de primære nøgler bliver smidt i et ArrayList som så bliver gemt i en session. - fordel: Dataene i objektet stemmer altid overens med dem i databasen. - ulempe: Hver gang jeg skal bruge data fra objektet, skal der oprettes et nyt objekt, samt et nyt database udtræk.
Men du kan egentlig kun selv finde svaret, for det er kun dig der ved om du kan tåle at have en cache, eller om du kan tåle at slå op i databasen hver gang. Det afhænger af din problemstilling. ;)
Jeg ville anbefale en løsning hvor du konfigurativt og/eller programmatisk kan ændre den slags. Det er jo afhængigt af hvordan dine brugere ender med at bruge dit site der har betydning for hvad der vil virke bedst. Bruger du version 2.0 eller 1.1? Mvh
(Som udgangspunkt får du WeakReferences hvis du benytter Cache i ASP.NET, hvilket medfører at de kan blive nedlagt, såfremt du løber tør for ressourcer)
Jeg sidder desværre stadig med 1.1 - jeg er lidt bange for at migrere til 2.0 :o)
Man lad mig smide endnu et kort på bordet: Der vil MAX være 100 brugere på, på samme tid. Hver bruger vil MAX have 1.000 objekter til håndtering på samme tid.
Det skal du ikke være bange for .... Du kan endda hente opgraderinger så kompileringsmodel mv. svarer til det du er vant til - sig til hvis du vil have links. De yderligere oplysninger hjælper ikke så meget - hvis de 1000 objekter strings med samme indhold - ender du med kun at have ét objekt pr. bruger... Hvis det er 5MB's billeder ser verden helt anderledes ud. Hvad er det for objekter du kan have 1000 af for én bruger? Mvh
2.0 Installeres så det kører side om side med 1.1 - Så fordi du installerer 2.0 medfører det ikke at dine gamle apps kører 2.0 (men det kan du self. få dem til). Du kan også hente gratis værktøjer at udvikle applikationerne (hvis du ikke har noget VS licens væsen i forvejen).
Men som sagt... Hvis du benytter Cache (eller en kombination af cache og egen logik) kan du lave en løsning der er fleksibel mht. hvorvidt objekter caches, eller hentes ved hvert request. Hvis du benytter en OR-mapper vil det typisk også være faciliteter du har til rådighed.
Jeg vælger nok at benytte mig af løsning 2 - Så er der ikke andet for end at se hvordan det performer, og hvis det er helt galt, må jeg optimere koden til den tid - og lader derfor døren stå åben for løsning 1.
Men jeg lukker dog ikke tråden endnu - jeg vil meget gerne have flere meninger til dette problem.
Ellers laver jeg en blanding - hvor objekterne bliver gemt i en session, og når så der skal bruges kritiske oplysninger fra disse objekter, bliver de opdateret med det nyeste indhold fra databasen. Hvordan lyder det?
Men så kommer der et spørgsmål: Kan en session håndtere 1.000 af disse objekter, uden at tabe data? Jeg er sådan generelt meget skeptisk når det gælder sessions.
Nu kan du jo arbejde med session-data på flere måder. Pr. default bliver session data gemt in-process, hvilket giver den bedste performance, men den ringeste stabilitet - f.eks. vil en genstart af applikationen medføre tab af sessiondata. Du kan også sætte en stateserver op, hvilket medfører at du taber sessiondata hvis denne server rebooter. Slutteligt kan du gemme dine sessiondata på en sql-server, hvilket så må betragtes som den mest stabile løsning - men altså ikke det hurtigste. Der er lidt issues omkring sessions og outputcaching der kan skabe lidt ballade i visse situationer. Hvis du ender med at benytte 2.0 - har du mulighed for at benytte profiles, hvilket også sikrer persistering i en database.... Det er lidt afhængigt af hvad det er du gemmer hvorvidt det kan være relevant at kigge på det. Mvh
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.