Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]11663[/thread]

Timer?

Leser: 2


<< >> 5 Einträge, 1 Seite
Froschpopo
 2008-04-19 01:13
#108550 #108550
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
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?
moritz
 2008-04-19 01:55
#108551 #108551
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
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.
Froschpopo
 2008-04-19 03:21
#108554 #108554
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
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.
pq
 2008-04-19 03:39
#108555 #108555
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
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
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
topeg
 2008-04-19 10:37
#108556 #108556
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
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.
<< >> 5 Einträge, 1 Seite



View all threads created 2008-04-19 01:13.