Toernooibase

Piet Bouma
Posts: 3574
Joined: Sun Nov 02, 2003 13:05
Location: Harlingen

Re: Toernooibase

Post by Piet Bouma » Sat Feb 18, 2012 11:31

Alex wrote:ToernooiBase ligt er weer uit :?
Toernooibase is vorige week zaterdagmiddag, dinsdagmiddag en nu afgelopen vrijdagavond gecrasht.
Dat is niet zo mooi. Elke keer omdat het geheugen volliep zo heb ik begrepen.
Toby Hage heeft elke keer het systeem weer werkend gekregen en probeert op de achtergrond zaken te optimaliseren.
Sinds december vorig jaar loopt de performance terug. Misschien wel om dat er teveel gebruikt van wordt gemaakt :D .

Mogelijk ook dat iemand op de bewuste tijden gemerkt heeft dat iets verkeerd liep bij een bepaalde actie. Dan zou het mooi zijn als dit gemeld wordt.
Zelf zat ik gisteravond zelf ook op Toernooibase maar merkte niks bijzonders, totdat ik geen verbinding meer had. Een beetje unheimisch allemaal.
https:toernooibase.kndb.nl More than 415.000 games on applet, more than 1.300.000 results, more than 21.000 games broadcasted (semi-)live, more than 12.900 inserted tournaments!

Gerard de Groot
Posts: 351
Joined: Mon Jul 07, 2003 22:09
Location: the Netherlands

Re: Toernooibase

Post by Gerard de Groot » Sat Feb 18, 2012 12:38

Piet Bouma wrote:
Alex wrote:ToernooiBase ligt er weer uit :?
Toernooibase is vorige week zaterdagmiddag, dinsdagmiddag en nu afgelopen vrijdagavond gecrasht.
Dat is niet zo mooi. Elke keer omdat het geheugen volliep zo heb ik begrepen.
Toby Hage heeft elke keer het systeem weer werkend gekregen en probeert op de achtergrond zaken te optimaliseren.
Sinds december vorig jaar loopt de performance terug. Misschien wel om dat er teveel gebruikt van wordt gemaakt :D .

Mogelijk ook dat iemand op de bewuste tijden gemerkt heeft dat iets verkeerd liep bij een bepaalde actie. Dan zou het mooi zijn als dit gemeld wordt.
Zelf zat ik gisteravond zelf ook op Toernooibase maar merkte niks bijzonders, totdat ik geen verbinding meer had. Een beetje unheimisch allemaal.
Worden er wel wekelijks automatische backups gemaakt van de database?

User avatar
Arjen de Mooij
Posts: 976
Joined: Mon Sep 29, 2003 11:23
Location: Rijnsburg
Contact:

Re: Toernooibase

Post by Arjen de Mooij » Sat Feb 18, 2012 20:43

Piet, worden alle http-requests en uitgevoerde queries gelogd? Dan kun je op basis daarvan achterhalen of er op dat moment een piek was.

Piet Bouma
Posts: 3574
Joined: Sun Nov 02, 2003 13:05
Location: Harlingen

Re: Toernooibase

Post by Piet Bouma » Sat Feb 18, 2012 21:32

Gerard de Groot wrote: Worden er wel wekelijks automatische backups gemaakt van de database?
Volgens mij wordt er automatisch back-ups gemaakt op de Strato-server. Daarnaast haal ik zelf elke week ook een back-up van de database lokaal binnen.
Arjen de Mooij wrote:
Piet, worden alle http-requests en uitgevoerde queries gelogd? Dan kun je op basis daarvan achterhalen of er op dat moment een piek was.
Er wordt gelogd (tenminste wel in het verleden). Ik heb Toby Hage (hij beheert de stratoserver) vorige week al eens gevraagd om logfiles, van de zondag. Dat is een piekdag (zaterdags na de Nationale Competitie). Ik kan volgens mij zelf niet bij de files.

De traagste query's zitten volgens mij bij "Laatst ingevoerd" en dan met name de laatst ingevoerde analyse-opmerkingen. Dat is nogal een ingewikkelde query.
Maar die query's zitten er al een hele tijd. Het is dan vreemd dat dit plotseling tot crashes zou leiden.
Daarnaast wordt de tabel applets nogal groot. Staan nu zo'n 92.000 in en de tabel is zo'n (286 Mb).
Edit: ik dacht wat te groot :D , het is 129 MB momenteel.
Wel staan er volgens mij goede indexes op.

Ik heb Toby voorgesteld (als noodmaatregel) als er weer een crash ontstaat, de afspeelmogelijkheid van applets (want volgens mij beginnen ze ook wat trager te laden), de invoermogelijkheid en ook het laatst ingevoerd van applets en analyseopmerkingen tijdelijk uit te schakelen.
De tabel applets en annotaties zou dan niet meer belast worden. Als crashes dan uitblijven, denk ik dat we wel zeker weten waar we moeten zoeken.

Toby heeft vandaag zaken op de server geoptimaliseerd, dus maar effe afwachten.
De afspeelmogelijkheid van partijen en ook het zoeken via laatst ingevoerd is natuurlijk wel een meerwaarde van Toernooibase.
https:toernooibase.kndb.nl More than 415.000 games on applet, more than 1.300.000 results, more than 21.000 games broadcasted (semi-)live, more than 12.900 inserted tournaments!

ildjarn
Posts: 1537
Joined: Tue Aug 22, 2006 15:38
Real name: Joost de Heer

Re: Toernooibase

Post by ildjarn » Sun Feb 19, 2012 10:27

Loopt de databaseserver of de webserver uit zijn geheugen? (Ik hoop toch niet dat die twee op dezelfde server staan....). Als de webserver geheugenproblemen heeft is het waarschijnlijk ergens een geheugenlek in PHP.
Lasst die Maschinen verhungern, Ihr Narren...
Lasst sie verrecken!
Schlagt sie tot -- die Maschinen!

Piet Bouma
Posts: 3574
Joined: Sun Nov 02, 2003 13:05
Location: Harlingen

Re: Toernooibase

Post by Piet Bouma » Sun Feb 19, 2012 22:23

Piet Bouma wrote:
De traagste query's zitten volgens mij bij "Laatst ingevoerd" en dan met name de laatst ingevoerde analyse-opmerkingen. Dat is nogal een ingewikkelde query.
Inmiddels heb ik door een tip van een collega-dammer (bedankt Mark :!: ) de query die de laatst ingevoerd analyse-opmerkingen verzorgt, flink kunnen optimaliseren in snelheid.
Als andere dammers tips hebben hou ik mij aanbevolen.
https:toernooibase.kndb.nl More than 415.000 games on applet, more than 1.300.000 results, more than 21.000 games broadcasted (semi-)live, more than 12.900 inserted tournaments!

Piet Bouma
Posts: 3574
Joined: Sun Nov 02, 2003 13:05
Location: Harlingen

Script-request TPR-berekening (methode Wouter Ludwig).

Post by Piet Bouma » Tue Feb 21, 2012 23:31

Vraag aan slimme dammende php- en mysql programmeurs.

Zoals sommigen wel weten is programmeren niet mijn beroep. Het maken van php-scripts en mysql-query’s heb ik me van forums (bijv. http://www.phpfreakz.nl) wat aangeleerd en is een leuke hobby en houd je van de straat.
Gevolg is wel dat flink wat scripts in Toernooibase omslachtig zullen zijn en inefficiënt.
Vanaf eind december ben ik van tijd tot tijd bezig geweest de nieuwe TPR-berekening methode Wouter Ludwig (zoals ik deze maar noem) bij een Zwitsers toernooi voor Toernooibase geschikt te krijgen. Dit in verband met de NK Kwalificatie.
In de testomgeving heb ik een werkende methode, maar deze duurt gewoon te lang (zo ongeveer 10 seconden) met veel opvraag en updates in de database. Dat kan dus niet in de live-omgeving. En dat zint me eigenlijk niet.
Ik leg een beetje uit hoe ik tot dusver te werk ben gegaan.

- allereerst breng ik de ingevoerde wedstrijden van een toernooi vanuit een tabel waarin alle uitslagen van detailwedstrijden in Toernooibase zijn opgeslagen in een temporary tabel. (dan ga ik van zo’n 345.000 records naar maximaal 96 (8x12) records bij de NK Kwalificatie. Lijkt me efficiënt).
- In deze temporary tabel voeg ik de gebruikte rating van de spelers toe.
- Ik maak ook een ranglijst in een temporary table (zou misschien beter in een array kunnen) op basis van behaalde punten en zet daarin ook de totale weerstandrating van een speler.
- Op basis van die tabel kan ik vervolgens met behulp van de ratingtabel opgeslagen in Toernooibase de TPR op basis van gemiddelde weerstand berekenen. Dat betekent het percentage berekenen van de behaalde score, dit in de ratingtabel aflezen, het ratingverschil bij de gemiddelde tegenstandersrating optellen of aftrekken en je hebt de TPR op basis van gemiddelde tegenstandersrating.
- Dat doe ik met hetzelfde principe ook voor de huidige ratinglijsten en wordt ook bij een speler bij zijn details bij een toernooi (als je op de spelersnaam klikt, getoond. Dus alles op basis van gemiddelde tegenstandersrating).
- Deze TPR, alsmede het gewone aantal behaalde punten sla ik op bij de basisgegevens (basistabel) van de speler bij het toernooi (dus in de database).

Dan moet ik de slag naar de methode TPR Wouter Ludwig maken. Dat wordt ingewikkeld met veel meer acties. Dat doe ik als volgt:
Op basis van deze eerste TPR per speler (op basis van gemiddelde tegenstandersrating) bereken ik aan de hand van de ratingtabel bij elke detailwedstrijd (dus nu ga ik naar een individuele berekening per tegenstander) de normscore. Dat is dus al een flinke opvraagsessie naar de ratingtabel. Het totaal van de normscores sla ik dan weer op in de basistabel van het toernooi.

Vervolgens maak ik een loop van 7 stappen. (Ai, dat wordt een zware belasting).
Afhankelijk van het verschil tussen behaalde score en normscore verlaag ik of verhoog ik de eerste TPR met 16 punten (uiteindelijk moet het verschil tussen behaalde score en normscore 0 zijn – een onbereikbaar ideaal – maar in ieder geval minimaal zijn).
Vervolgens bereken ik op basis van die nieuwe TPR opnieuw de individuele normscores (weer veel opvraagacties naar ratingtabel) en sla de nieuwe TPR op in de database met het totaal van de normscores. In de loop maak ik vervolgens het ratingverschil steeds kleiner met 2 punten (dus wordt 14, 12, 10 etc.). Ik heb een tolerantienorm van verschil tussen werkelijk behaalde score en normscores van 0.02 ingebouwd. Als het verschil minder dan die 0.02 is sla ik de desbetreffende speler over (c.q. geen update meer in database), en ga verder met volgende spelers, totdat iedereen voldoet (of zou moeten voldoen) aan die tolerantie van 0.02.

Daarna ga ik finetunen. Dat doe ik in een loop van 3 stappen (met dezelfde constructie als in de loop van 7 stappen).
De tolerantiegrens zet ik naar 0.00999. Ik verhoog of verlaag de opgeslagen TPR met 1 punt. Voldoet de tolerantiegrens, dan wordt de TPR weer definitief.

Vervolgens blijft er nog 1 stap over. Spelers waar het verschil tussen berekende normscores en behaalde score hoger blijft dan 0.00999.
Ik bereken daarbij dan het verschil tussen normscores en behaalde scores voor twee naastliggende TPRs.
Waar het verschil tussen de normscores en behaalde scores dan het kleinst is wordt de definitieve TPR (methode Wouter Ludwig) en wordt opgeslagen in de database.
Daarna is de sortering natuurlijk een fluitje van een cent. Behaalde opgeslagen punten en opgeslagen TPR en klaar is Kees. (en ook WP en SB als extra criteriums nog berekenen, al heeft dit volgens mij vrijwel geen invloed bij de NK Kwalificatie methode Wouter Ludwig).

Dus zo’n 11 stappen met loops (en dus query’s die in een loop zitten en veel opvraag en update acties in die database) om die TPR te berekenen.

Oh ja, een bijkomstigheid is nog eventjes ook dat als een speler een 0% resultaat (0 punten) heeft of een 100% resultaat (alles gewonnen) er een remise tegen zichzelf in de berekening opgenomen moet worden.

Waar is denk ik de winst te behalen (efficiëntie en tijdwinst):

Allereerst denk ik dat als je een functie of berekening van de normaalverdeling kunt maken (zoals Guido dat doet in zijn Excel-sheet, dat hij bij het topic NK Kwalificatie 2012 heeft geplaatst) in plaats van telkens een opvraag te doen in de database op de ratingtabel voor het verschil tussen TPR en rating van de tegenstander om de normscore te berekenen, dat je dan een flinke slag maakt. Maar hoe die functie te schrijven? Of moet je die gehele ratingtabel in een array gaan plaatsen?

Daarnaast denk ik dat je in plaats van temporary tables een aantal zaken beter in een array kunt wegschrijven dan updates te doen in de database, en vervolgens berekende TPRs (die beter zijn) en bijbehorende normscores in die array moet vervangen.
Al vraag ik me af of dat juist niet weer een flinke aanslag gaat geven op het geheugen. Maar dan doe je alles in php en belast je niet de database.

Enfin, voor php en mysql specialisten misschien een hele mooie uitdaging om een fraai script te schrijven, dat snel en efficient een ranglijst op de TPR-methode Wouter Ludwig kan produceren. En natuurlijk zijn ook tips gewoon welkom (pm).

Op aanvraag wil ik via pm wel mijn php-script (een include in Toernooibase) sturen (momenteel een 450 regels).

Ik ben benieuwd naar reacties!
https:toernooibase.kndb.nl More than 415.000 games on applet, more than 1.300.000 results, more than 21.000 games broadcasted (semi-)live, more than 12.900 inserted tournaments!

User avatar
Arjen de Mooij
Posts: 976
Joined: Mon Sep 29, 2003 11:23
Location: Rijnsburg
Contact:

Re: Toernooibase

Post by Arjen de Mooij » Wed Feb 22, 2012 21:51

Hoi Piet. Als ik vrijdag tijd heb zal ik er even naar kijken. Andere tip, wellicht ten overvloedde: kijk eens naar caching, dwz bewaar resultaten van bepaalde queries in het geheugen (of in een aparte tabel). De beste kandidaten zijn queries die vaak worden uitgevoerd, maar waarvan de resultaten relatief weinig veranderen.

De laatst ingevoerde partijen/laatste commentaren is daar een goed voorbeeld van. Ook de verschillende ratinglijsten/klassementen.

User avatar
Arjen de Mooij
Posts: 976
Joined: Mon Sep 29, 2003 11:23
Location: Rijnsburg
Contact:

Re: Script-request TPR-berekening (methode Wouter Ludwig).

Post by Arjen de Mooij » Wed Feb 22, 2012 21:58

Piet Bouma wrote:...
Zonder code te posten, lijkt het mij idd het beste om deze berekeningen in het geheugen te doen, maar slechts 1 keer per toernooi (pas verversen als er een uitslag wijzigt, of bv 1 keer per dag), en de resultaten van deze berekeningen bewaren in een tabel (met een veld toernooi-id erbij). Bij opvragen hoef je dan alleen een simpele select query te doen. Verstandig is dan ook om een index op het toernooi-id veld te leggen, als dat je iets zegt.

Piet Bouma
Posts: 3574
Joined: Sun Nov 02, 2003 13:05
Location: Harlingen

Re: Script-request TPR-berekening (methode Wouter Ludwig).

Post by Piet Bouma » Wed Feb 22, 2012 23:43

Fijn dat je meedenkt Arjen.

Het statisch opslaan van standen was bij de opzet van Toernooibase ook in eerste instantie mijn bedoeling. Maar al snel kwam ik erachter dat ik aan aantal wedstrijden, punten, winst, verlies, remise niet genoeg had. (Zo had ik de basistabel bij een persoonlijk toernooi eerst wat gepland). Er zijn/kwamen/komen veel exotische varianten als saldo plusjes, andere scores, wp, sb, weerstandrating, moyenne-varianten, Solkoff h/l etc. En bij een rond toernooi wilde ik ook graag de matrix tonen (bij een rond toernooi tot ca. 24 spelers gaat dat ook wel goed, met een array!).
Daarnaast kunnen op steeds meer verschillende plekken uitslagen ingevoerd worden (inserts), gecorrigeerd worden (updates). En als laatste ook nog de bulkinvoer vanuit Toernooimanager die gerealiseerd is. Op elk zo’n plek zou dan de herberekening van de stand moeten plaatsvinden.
Dan zou een gebruiker na invoer van een uitslag soms irritante wachttijden krijgen omdat dan al die zaken berekend moeten worden en weer in die basistabel geupdate neergezet moeten worden.
Nu heb ik per verschillende toernooivormen aan de hand van instellingen minder velden (maar wel meer scripts), die berekend moeten worden.

Vandaar toen de keuze: bij opvraag van een toernooistand deze on the fly berekenen. Het grote voordeel is ook dat je een stand na bijvoorbeeld vier ronden, na zes ronden etc. kunt opvragen.
En tot dusver gaat dat ook wel aardig goed. Een van de grootste berekeningen is Salou 2011.
140 deelnemers op weerstandsrating gaat volgens mij in zo’n vier a vijf seconden.
Een overweging is wel (maar dan moet er flink wat omgebouwd worden), als een toernooi beëindigd is, geaccordeerd is door de initiator en invoer/correctie niet meer mogelijk is, het toernooi in een andere tabel te gooien met volledig statische gegevens. En dan daar de opvraag uit realiseren. Mooier zou ik persoonlijk vinden dat een stand op TPR (methode Wouter Ludwig) toch ook in die vier a vijf seconden (ook bij zo’n 140 deelnemers) er uit zou kunnen rollen.
En dan denk ik als eerste aan die functie van de normaalverdeling, die een enorm aantal aanvragen (select query's) op de ratingtabel overbodig kan maken.
Overigens: indexen staan ingesteld, caching staat aan.
https:toernooibase.kndb.nl More than 415.000 games on applet, more than 1.300.000 results, more than 21.000 games broadcasted (semi-)live, more than 12.900 inserted tournaments!

Paul Wijninga
Posts: 55
Joined: Sun Nov 02, 2003 23:06

Re: Toernooibase

Post by Paul Wijninga » Thu Feb 23, 2012 09:25

Ik bied graag mijn hulp aan Piet!

Belangrijkste stap lijkt mij om deze berekening niet uit te voeren met temporary tables maar met wat arrays in het geheugen.
Daarnaast lijkt het mij het handigst om de berekening eenmalig uit te voeren als je de laatste uitslag van een ronde hebt ingevoerd (en als je de uitslag van een al volledig ingevoerde ronde wijzigt) en die resultaten per ronde op te slaan.

Goh was er nog maar een ICT-commissie...

Piet Bouma
Posts: 3574
Joined: Sun Nov 02, 2003 13:05
Location: Harlingen

Re: Toernooibase

Post by Piet Bouma » Thu Feb 23, 2012 10:52

@ Arjen en Paul.
Ik wil jullie vanmiddag laat wel even mailen. (Vanavond moet ik dammen).
Gaat dan voornamelijk denk ik om even de tabelstructuur te laten weten van de tabel details (waar alle detailuitslagen in zijn opgeslagen).
En de tabelstructuur van de ratingtabel.
Vanuit die details (select query op Toernooi-Id, kun je dan alle details van het desbetreffende toernooi ophalen.
Die twee zaken combinerend (geselecteerde details en de ratingtabel) in arrays zetten en alle berekeningen in het geheugen zetten zou denk ik dan een eerste stap zijn.

In de tabel details zit volgens mij ook een datuminvoer/wijziging. Dus ook die oplossing: hard opslaan in een andere tabel en pas weer berekenen wanneer er een wijziging optreedt, zou voor die TPR berekening te realiseren zijn. (Voor alle toernooien, zou dit een flinke actie worden in flink wat scripts. Daar begin ik voorlopig liever niet aan. En dan heb je ook nog de teamtoernooien, waar het toch allemaal net weer even anders gaat).
https:toernooibase.kndb.nl More than 415.000 games on applet, more than 1.300.000 results, more than 21.000 games broadcasted (semi-)live, more than 12.900 inserted tournaments!

Piet Bouma
Posts: 3574
Joined: Sun Nov 02, 2003 13:05
Location: Harlingen

Re: Toernooibase

Post by Piet Bouma » Fri Feb 24, 2012 22:29

Helaas is er weer een probleem ontstaan in Toernooibase.

Het script dat de standen produceert werkt niet meer goed.
Ik was een wijziging aan het maken (en zelfs eerst een backup gemaakt).
Na de wijziging werkte het script niet meer.
Vervolgens de backup erop gezet -->> Oei, ook geen resultaat.

Ik heb Toby Hage gemaild of hij de laatste versie van de backup
wat op de server staat van het bewuste bestand wil terugzetten.
(er schijnt dagelijks een backup van het systeem gemaakt te worden).
Heb nog geen reactie gekregen.

Voor standen van de KNDB Nationale Competitie morgen >> waarschijnlijk
KNDB-site.

Excuses, voor het ongemak. Ik krijg er zelf ook bijna genoeg van.
Toernooibase is al een tijdrovende bezigheid, maar als dit soort zaken
ook misgaan, dan ben ik geneigd om de handdoek in de ring te werpen.

Edit: 23.32 uur. Ik heb een wat oudere versie van het script (25-12-2011) van de testserver upgeload.
(Van Toby nog niks gehoord). Standen zijn nu weer bereikbaar.
https:toernooibase.kndb.nl More than 415.000 games on applet, more than 1.300.000 results, more than 21.000 games broadcasted (semi-)live, more than 12.900 inserted tournaments!

Michel Stempher
Posts: 1108
Joined: Thu Mar 01, 2012 20:34
Real name: Michel Stempher
Location: Kampen

Re: Toernooibase

Post by Michel Stempher » Sun Dec 09, 2012 00:32

Toernooibase is de hele avond stabiel gebleven voor zover ik weet! Mijn complimenten aan Piet Bouma en eventueel andere betrokkenen! :popcorn:

Piet Bouma
Posts: 3574
Joined: Sun Nov 02, 2003 13:05
Location: Harlingen

Re: Toernooibase

Post by Piet Bouma » Mon Dec 10, 2012 22:12

Michel Stempher wrote:Toernooibase is de hele avond stabiel gebleven voor zover ik weet! Mijn complimenten aan Piet Bouma en eventueel andere betrokkenen! :popcorn:
Dankzij Toby Hage die de hele migratie naar de nieuwe dedicated server verzorgd heeft draait Toernooibase nu een heel stuk beter c.q. sneller. Bedankt Toby! :angel:
En natuurlijk ook dankzij de KNDB, die de extra kosten van € 150,-- per jaar betreffende de hosting voor haar rekening neemt. Dus als er een extra contributieverhoging van zo’n € 0,04 per jaar wordt voorgesteld, dan weet u waar die vandaan komt. :)

Waar de stand van Salou 2011 (mijn referentiepunt: grootste toernooi met 140 deelnemers op tegenstandersrating) op de oude server in zo’n 5 a 6 seconden getoond werd, flitst deze nu binnen een seconde op het scherm.
Ik heb nu ook even mijn script van de TPR-berekening (methode Wouter Ludwig) van de NK Kwalificatietoernooien 2012 on-line gezet. Deze gaat binnen twee seconden. M.i. acceptabel.
Ook afgelopen zaterdag met de invoer van de uitslagen en partijen (nu door gebruikers al 245 partijen van de zevende ronde ingevoerd!) van de Nationale Competitie liep e.e.a. nu volgens mij zonder wachttijden.
Enfin, ik ga ervan uit dat we met deze server weer een aantal jaren vooruit kunnen. Op de achtergrond moeten we nog wel wat warnings in scripts tackelen.

Ik ga eens kijken of ik volgend jaar eens een begin kan maken met een lotingmodule in Toernooibase. Dan zou men geheel via Internet een Zwitsers toernooi, Moyenne-toernooi, Rond toernooi etc. kunnen regelen. Maar misschien hebben jullie wel heel andere wensen mbt Toernooibase. Laat het dan weten, feedback is altijd welkom! 8)
https:toernooibase.kndb.nl More than 415.000 games on applet, more than 1.300.000 results, more than 21.000 games broadcasted (semi-)live, more than 12.900 inserted tournaments!

Post Reply