Avatar billede KongKurs Juniormester
08. juni 2010 - 11:48 Der er 7 kommentarer og
1 løsning

Hvordan tracker hvilke tråde brugeren allerede har læst?

Hej,

Jeg er ved at lave et forum, men jeg er i tvivl om hvilke muligheder jeg har for, at tracke de tråder brugeren allerede har læst, sådan at jeg kan vise en bruger hvilke tråde er ulæste?

Tak :)
Avatar billede keysersoze Guru
08. juni 2010 - 12:00 #1
lav en tabel med TraadId og BrugerId - hver gang en tråd oprettes eller får skrevet nyt indhold udfylder du tabellen med alle brugere. Når en bruger så har læst en tråd fjerner du vedkommende fra tabellen.
Avatar billede KongKurs Juniormester
08. juni 2010 - 12:09 #2
keysersoze> Tak for hurtigt svar. Den løsning du foreslår, hvor "best practice" er den, hvis du forstår :)

Hvad med at bruge cookies?
Avatar billede keysersoze Guru
08. juni 2010 - 12:44 #3
Det kommer an på hvilke krav du har til fx validiteten og datamængde - kører du med cookies virker det kun på den enkelte maskine men folk kunne jo fx sidde på flere maskiner.

Du opnår det bedste resultat og mindste datamængde over tid med foreslåede model.
Avatar billede KongKurs Juniormester
08. juni 2010 - 12:55 #4
ok, sidste spørgsmål:

Hvad er forskellen på den model du foreskriver og så hvis jeg lavede det sådan, at hver gang en bruger læste en tråd, blev det registreret i tabellen som du skrev. Så altså i stedet for at udfylde med alle brugere pr. tråd på forhånd, så kun indsætte dem når de har læst en tråd!? For det er jo ikke alle tråde men gider læse...

Håber du forstår.
Avatar billede keysersoze Guru
08. juni 2010 - 13:27 #5
med din model vil tabellen blive uendelig stor over tid fordi der altid tilføjes data - med min model vil den, teoretisk i hvert fald, kunne begrænses i langt højere grad da data slettes. Samtidig vil du på denne måde lettest kunne holde styr på, at det fx ikke nødvendigvis er relevant at vise samtlige tråde som ulæste for helt nye brugere - det samme hvis du automatisk vil markere tråde som læste for alle brugere hvis der ikke har været aktivitet i tråden i x tid.
Avatar billede janus_007 Nybegynder
08. juni 2010 - 20:16 #6
Der er jo fordele og ulemper ved begge metoder, kommer meget an på hvordan man mener brugsmønsteret udarter sig.

keyzersozes kan ende op med at der findes n-brugere * antal tråde i tabellen, hvis ingen læser. Og omvendt med mccyvercool hvis alle læser vil dette vokse med faktoren af læste(statistikken, se længere nede), hvis vi antager at 50% læses en gang og de sidste 50% aldrig læses vil begge metoder optage det samme plads.

Performancemæssigt vil keyzersozes bruge en masse inserts hver gang en tråd blev oprettet, hvis vi antager der er 1000 brugere vil disse fylde 4kb for hver tråd (FK-int) der laves, det samme gælder for mcgyvers, men dog kun i det omfang der læses.
Ved at slette brugere fra denne læstetråd tabel hvergang + inserts af n-brugere, kan der meget hurtigt opstå table locks og lange svartider + at man mister statistik. Hvorimod en tabel som der indsættes i ved hver læsning(for at opbevare statistik om hvor ofte og hvor mange) kan også give et overhead, dette kan dog aggregeres igennem et natligt job.

Så det er vigtigt at afgøre om man vil det ene eller det andet, best practice findes ikke lige på det niveau :)
Avatar billede KongKurs Juniormester
08. juni 2010 - 22:10 #7
janus: tak for svaret, men findes der andre (bedre) metoder??
Avatar billede keysersoze Guru
08. juni 2010 - 22:30 #8
Som nævnt i #3 afhænger det af hvilke krav der er til systemet - som du selv er inde på kan cookies jo godt fungere men de har også store ulemper, faktisk i et sådan omfang at jeg personligt ikke mener de er relevante i særlig mange sammenhænge. Så for at kunne besvare dit spørgsmål skal skal dine krav også kendes - jeg har dog meget svært ved at se bedre løsninger end de to allerede nævnte hvor fordele/ulemper skal vejes op mod hinanden i valg at den præcise metode.

En mulighed man evt kunne lege med fremfor en ekstra tabel vil være en ekstra kolonne af datatypen xml, gætter på du benytter mssql, på tråd-tabellen hvor man gemmer de samme brugerid-oplysninger. Jeg har dog ikke noget umiddelbart gæt på hvilken effekt det vil have på hastighed etc i direkte sammenligning med tabel-løsningen.
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