Toon posts:

[PHP] scoresysteem voor reactiesysteem

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi daar, ik ben bezig met het schrijven van, ja alweer, een reactiesysteem. Maar ik probeer er nu een soort scoresysteem zoals we dat kennen op fokzine en t.net in te voeren. Waar ik eigenlijk een beetje mee zit te worstelen is hoe ik dit het meest efficient kan doen.

Ik had het volgende idee:

tabel: reacties
- id
- nieuwsid
- userid
- bericht
- score
- timestamp

tabel: user
- id
- naam
- wachtwoord
- email
- homepage
- punten
- timestamp

Deze score in de reacties tabel staat default bijvoorbeeld op 1. Stel je hebt 4 verschillende levels voor de score (0,1,2,3) dat zijn dus de punten die je kan verdienen of niet (0) ;)

Als er nu bijvoorbeeld door mij gezegd wordt dat een reactie 2 punten verdient, dan moet hij dus van 1 naar 2 worden gezet. simpele updatequerie naar de reacties tabel en hij staat op 2. Ok nu het volgende, elke dag doe ik dan een update querie waarbij alle scores van de reacties van die dag aan de punten van de desbetreffende users worden toegevoegd.

Ik vraag me het volgende af. Is dit een goeie manier? Of kan ik beter in 1 keer een querie naar de users tabel doen en zeggen dat er in eerste instantie dus 1 punt bijkomt bij de punten van de user en later nog een keer 1 punt omdat ik hem van 1 naar 2 gooi.

Er moet in iig een querie naar de reactietabel gaan waar kenbaar wordt gemaakt dat hij gemoddereerd is. Maar ik zit dus te twijfelen of ik in 1 keer de punten bij het puntenaantal van de user moet tellen of bijvoorbeeld 1 keer pag alle reacties van die dag doorlaten lopen en dan alles in 1 keer updaten.

Wat is sneller/efficienter?? Iemand die dit al een door zijn hoofd heeft laten gaan en me een idee kan verschaffen? :)

  • bartvb
  • Registratie: Oktober 1999
  • Laatst online: 15-09 12:33
Een:

UPDATE table SET punten=punten+1 WHERE user_id = 123;

is echt giga snel. Ik zou daarom niet moeilijk doen en meteen updaten.. Performance winst van uitstellen is IMO de potentiele problemen van dat uistellen niet waard..

En het is ook irri voor de user, meteen updaten is gewoon een stuk logischer.

Verwijderd

Topicstarter
ok, inderdaad de default score is 1, maar stel dat ik hem uiteindelijk naar score 2 wil beoordelen, dan moet er dus later nog een querie uitgevoerd worden om nog een keer 1 punt erbij te tellen... ik vraag me dus af of dit wel effiecient is..?

je doet dus uiteindelijk 4 queries
1) de reactie toevoegen aan de database
2) user puntenaantal updaten
3) eventueel later de score bijstellen naar 2 punten
4) reactie row updaten om aan te geven dat hij beoordeeld is

Dit vergt wel een hoop queries??

Is het dus echt niet mogelijk om dit op een andere manier (effiecientere manier) te doen???

  • bartvb
  • Registratie: Oktober 1999
  • Laatst online: 15-09 12:33
Dus..
Iemand plaatst een reactie en krijg standaard 1 punt (puur en alleen omdat ie die reactie heeft geplaatst).

Daarna komt er een moderator (ofzo) voorbij en die zet de reactie op 3 omdat het een uitzonderlijk stukje proza is geworden.. Nu moet er in de user table dus nog een keer 2 bij de score opgeteld worden.

Toch?

Tja, het hangt er allemaal nogal van af hoe belangrijk je scores zijn.. Als het belangrijk is voor de users dat die score altijd klopt zou ik gewoon die 2 updates doen. Gruwelijk expensive zijn ze niet. Je kan ze ook makkelijk delayed maken voor dit soort spul.

Maar als je verwacht dat je echt een paar duizend reacties per uur verwacht op drukke momenten dan zou je de andere oplossing kunnen overwegen (1x per dag updaten) >:)

Uit de MySQL docs:

"An update of type UPDATE table set count=count+1 where index_column=constant is very fast!"

:D

Verwijderd

Topicstarter
Het is op dit moment nog niet zo dat er duizend berichten per dag worden geplaatst, nee zeker niet

En inderdaad wat je net beschreef klopt exact, ik maak er wel wat moois van.. die quote van je inderdaad ken ik.. was hem alleen vergeten, is inderdaad zo dat dat een snelle querie is, dus maak me nu nog niet zo'n zorgen.

Stel dat ik het 1 x per dag laat updaten.. hoe kan ik dat vast op een bepaald tijdstip laten doen?

nog even 1 ding.. hoe zou jij de structuur van de database eruit laten zien? wat is van belang? Is het zoals hierboven beschreven door mij goed of ben ik iets vergeten/kan er iets weg?

iig bedankt! :)

  • bartvb
  • Registratie: Oktober 1999
  • Laatst online: 15-09 12:33
Uitvoeren? Cronjob als je op een un*x bak werkt.

DB structuur lijkt me ok. Let wel ff op je indices (vooral extra index op nieuwsid).

Verwijderd

Topicstarter
Op maandag 26 november 2001 23:50 schreef bartvb het volgende:
Uitvoeren? Cronjob als je op een un*x bak werkt.

DB structuur lijkt me ok. Let wel ff op je indices (vooral extra index op nieuwsid).
Waarom moet er een extra index op nieuwsid??? die volg ik niet helemaal..
ik zal maar niet vragen hoe een cronjob werkt, staat vast genoeg over in de search :P

  • bartvb
  • Registratie: Oktober 1999
  • Laatst online: 15-09 12:33
Eeeh, weet je uberhaupt wat een index is? :P

Anyway, ik neem aan dat je regelmatig je news table joined met je reacties table. Als je dat doet wil je graag dat MySQL heeeeeeeeeel snel alle reacties op newsposting x uit de reactie tabel kan trekken. Daar heb je dus die index voor nodig.

Anyway, ik gok dat het heeeeeeeeeel verstandig is als je ff een paar basic tutorials over SQL gaat lezen :D

Verwijderd

Topicstarter
Ik weet wel wat een index is :D
Ik heb allang me tables geindexed, maar jij zei een extra index, en dat volgde ik niet helemaal..

Zijn er nog andere die een idee hebben over een scoresysteem?

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

DiStance:
Ik weet wel wat een index is :D
Ik heb allang me tables geindexed, maar jij zei een extra index, en dat volgde ik niet helemaal..

Zijn er nog andere die een idee hebben over een scoresysteem?
extra index
[/flauw]

Een score op basis van enkele posts vind ik niet zo logisch. Als een post dan weer verwijderd wordt, omdat het bullshit is, ofzo, kan je ook de score weer omlaag gaan brengen...

Ik zou de score van een user puur af laten hangen van de rating die er door mensen (mods?) aan gegeven wordt. Dan is hij elk moment van de dag betrouwbaar.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz

Pagina: 1