inaktive user löschen => mit vs. ohne cronjob

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • inaktive user löschen => mit vs. ohne cronjob

    details:

    ein frame der anzeigt wieviele user momentan online sind, user die 10 minuten inaktiv sind werden automatisch ausgeloggt, der frame wird jede minute aktualisiert, das system soll möglichst performant sein und hohe user online zahlen aushalten

    überlegung:

    300 user sind online

    ohne cronjob => jedesmal wenn der frame aktualisiert wird werden alle inaktiven user aus der online-tabelle gelöscht.
    d.h. => ca. 300 mal pro minute die online liste aktualisieren.

    mit cronjob => ein cronjob der jede minute ausgeführt wird. da die aktualisierung der onlineliste möglichst aktuall sein soll sollte es öfter als alle 60 sekunden sein. also eine schleife die 6 mal ausgeführt wird mit sleep(10).
    d.h. => 6 mal pro minute die online liste aktualisieren.

    ich kann mir schon vorstellen dass die variante mit cronjob viel performanter ist.
    eigentlich hat sich meine frage damit auch schon von selbst beantwortet.

    trotzdem brainstorming:

    kann sich jemand eine noch performantere variante vorstellen?

  • #2
    Warum sollte er 300 Mal in der Minute die Liste aktualisieren? Das macht er doch nur 1 Mal in einer Minute.

    Kommentar


    • #3
      Re: inaktive user löschen => mit vs. ohne cronjob

      Original geschrieben von invitatoinvitat
      ohne cronjob => ca. 300 mal pro minute die online liste aktualisieren.

      Kommentar


      • #4
        Ohne CronJobs geht sowas wunderbar mit Zufallszahlen. Du erzeugst dir Zufallszahlen zwischen 0 und 100, und wenn die Zahl 0 ist, dann räumst du die DB auf - so wird das nur ca. bei jedem 100ten Reload von der Seite ausgeführt, also ist es performanter als es jedes Mal zu machen, und du brauchst keinen CronJob.

        Ein Beispiel gibt's da:
        http://www.php-resource.de/forum/sho...threadid=26266
        hopka.net!

        Kommentar


        • #5
          keine gute idee. stell dir vor es wären nur 5 user online, und 2 davon gehen plötzlich offline (ohne sich auszuloggen sodass sie noch in der online liste stehen). dann kann es unter umständen vorkommen, dass diese 2 user noch 30 minuten als online angezeigt werden (3 user sind noch online, jede minute aktualisiert sich der frame, 90 aufrufe => 30 minuten)

          es ist also eine sache die nicht irgendwie das system warten soll oder sonstigen unwichtigen krempel sondern etwas das möglichst oft ausgeführt werden muss damit die informationen aktuell sind

          Kommentar


          • #6
            Re: inaktive user löschen => mit vs. ohne cronjob

            Original geschrieben von invitatoinvitat
            der frame wird jede minute aktualisiert, das system soll möglichst performant sein
            diese kombination ist ja schon ein widerspruch in sich.
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              wieso. genau darum geht es ja die aufwände dieses frames so weit wie möglich zu minimieren damit die best mögliche performance rausgeholt wird.

              Kommentar


              • #8
                warum kombinierst du nicht die anzahl der user mit dem vorschlag von hopka ... wieviel user online sind fragst du eh ab

                - 10 user => rand(0, 5)
                - 50 user => rand(0, 20)
                - 100 user ....
                Kissolino.com

                Kommentar


                • #9
                  hmm, ich glaube ich entscheide mich für die cronjob variante. weil selbst bei der auf die user anzahl angepassten version kann es ja durchaus vorkommen, dass entweder minutenlang nichts aktualisiert wird, oder ein paar mal kurz hintereinander

                  eine alternative idee: ein fake cronjob, aktuellen timestamp in datei, abfragen und ggf. ausführen.
                  allerdings ist dann die cronjob variante wohl gescheiter, weil fake cron eh nur die db schützt wenn niemand da ist und cronjobs laufen sowieso lokal also hat kein user die last das berechnen zu müssen.

                  noch eine alternative idee: session ordner auslesen und zählen, obwohl bei vielen usern eine zumutung das jedesmal erneut auszulesen.


                  ich entscheide mich also doch für die cronjob variante. thx für diskussion.

                  Kommentar


                  • #10
                    Also ich speicher immer die Session-ID und das Datum der letzten aktivität in die DB, und lese nur die aus, die in den letzten 10 min aktiv waren.
                    Ab und zu mal (s.o.) schmeiß ich die zu alten Einträge raus.
                    Allerdings hab ich auch keine Frames, und daher wird die Liste nur aktualisiert, wenn der User die Seite wechselt.
                    hopka.net!

                    Kommentar


                    • #11
                      das ist eine gute möglichkeit aber bei mir etwas aufwendiger weil ich usergruppen habe und den verschiedenen gruppen unterschiedliche logout-zeiten zuweisen kann und dann gibts auch noch verschiedene statuse online, dnd, und afk und jeder status kann eine andere logout-zeit haben

                      und das will ich nicht alles in die user tabelle nehmen deshalb habe ich dafür eine extra tabelle gemacht und all diese informationen bei jedem aufruf des frames neu abzufragen wär mit kanonen auf spatzen geschossen und wahrscheinlich noch aufwendiger als bei jedem aufruf die inaktiven zu löschen

                      aber mit der cronjob variante läufts bisher ganz gut

                      Kommentar

                      Lädt...
                      X