User since
2003-08-15
2653
Artikel
BenutzerIn
Ich habe ein Modul zur Verwaltung von mySQL-Sessions erstellt.
Bisher wird ein DELETE abgelaufener Sessions bei jedem Request durchgeführt. Das ist relativ schnell, weil es sich um eine temporäre Tabelle handelt.
Aber es würde auch bei weitem reichen, abgelaufene Sessions alle paar Minuten zu löschen.
Da ich nicht so gerne mit cron arbeite wollte hier mal fragen, was man noch so alles machen könnte, und zwar möglichst Festplattenunabhängig.
Man könnte natürlich auf der Festplatte eine Datei speichern in der die letzte Zugriffszeit festgehalten wird. Dann müsste man aber ständig in die Datei hineingucken und dann wäre ich mit mysql doch wieder besser bedient weil dort ja die Tabelle im Arbeitsspeicher vorliegt.
Klar, Linux hat da auch so seine Vorteile wie "cachen von oft verwendeten Dateien"... usw.
Was wäre denn tatsächlich am sinnvollsten?
User since
2007-05-11
923
Artikel
HausmeisterIn
Wenn du nicht jedes Mal ein DELETE machen willst kannst du das ja z.B. zufällig bei jedem Request mit einer Wahrscheinlichkeit von 0.1 machen.
Letztendlich würde ich das ganze in der Datenbank zu lassen, weil du irgendwann vielleicht mal Joins über Session und Userdaten machen willst.
Ausserdem kann die Datenbank den Index gut genug verwalten.
Aber wieso verwaltest du deine Sessions per Hand? Dafür gibts doch CGI::Session, das auch Datenbanken als Backend verwenden kann.
User since
2003-08-15
2653
Artikel
BenutzerIn
Mein Session-Modul ist dem CGI::Session sehr ähnlich, es kann sogar noch mehr, z.B. REPLACE, was CGI::Session nämlich nicht kennt, weil es nicht fachspezifisch genug ist.
Ich hatte nicht vor, eine alternative zur "Datenbank-Lösung" zu finden. Es geht um etwas anderes. Es geht darum, dass ich eine Lösung finden möchte, die es mir ermöglicht, in einem gewissen Intervall, etwas durchzuführen. Das ganze ist jedoch ein CGI Prozess und ich will auf einen Cronjob verzichten und nach Möglichkeit auch auf irgendwelche Datei-Timer (z.B. timestamp in Datei).
Ich hatte schon überlegt, einen Session-Server zu basteln, der auch von außen über einen Port angesteuert und abgefragt werden kann. So könnte man dann für andere eine "Wer ist online"-Liste in Form einer API anbieten ohne dass dafür ein Apacheprozess gestartet werden muss was ja für so eine spezielle Aufgabe garnicht notwendig wäre.
User since
2003-08-04
12208
Artikel
Admin1
Froschpopo+2008-04-19 01:21:47--Mein Session-Modul ist dem CGI::Session sehr ähnlich, es kann sogar noch mehr
dann lass doch mal sehn und mach ein cpan release draus
User since
2006-07-10
2611
Artikel
BenutzerIn
Cron soll es nicht sein, eine Serverdatei auch nicht. Eine DB willst du auch nicht verwenden. Da bleibt dir wirklich nur noch ein Serverprozess, den du über RPC ansprechen kannst.
Die einfachste Variante wäre über eine benannte Pipe (FIFO). Etwas komplizierter währe ein Socket oder Shared Memory. Es gibt da eine Menge Module auf Cpan wenn du nicht alles von Hand schreiben willst.