[Vienna-pm] persistant counter

peter pilsl pilsl at goldfisch.at
Wed Apr 22 13:20:32 PDT 2009


nicht unbedingt eine perl-frage, aber das problem ist in perl programmiert :)

Ein forked process (mit bis zu 200 instanzen) erledigt parallel gewisse aufgaben und soll darüber "buch führen".
Für jede Aufgabe soll ein Zähler erhöht werden, wobei es ungefähr 20 Arten von Aufgaben, also 20 Zähler gibt.

Bisher habe ich das einfach quick&dirty über eine datenbank gelöst. ein auto-commit-statement aka "update counter set counter1=counter1+1" 

und jeder prozess von aussen (zB per snmp) konnte zu jedem zeitpunkt den aktuellen zählerstand abfragen.

Nur leider musste ich feststellen, dass der resourcenverbrauch des sql-servers durch die vielzahl an parallelen transaktionen nicht mehr tragbar ist.
Das braucht extrem viel resourcen nur für diese doofen counter ... derweil soll der rechner die resourcen zum lösen der aufgaben verwenden.
(shared db-handles/db-handle-pools bringen ned viel, weil die prozesse recht fleissig sind)

Eine Idee wäre nun die Verwendung von semaphoren, aber diese sind halt leider nicht persistent. Ein systemcrash zB würde den zählerwert wieder auf 0 setzen.
Dafür wäre die lösung sehr elegant. Ich könnte sie auch mit einer datenbank-lösung verbinden die als daemon oder cronjob den wert des semaphoren-vektors in die datenbank schreibt, aber ...

... aber ich frage mich ob es nicht noch eine andere resourcensparende elegante lösung gibt, die einen absoluten zähler für ein vielzahl an parallel laufende prozesse implementiert. Klingt ja nach einem eher alltäglichen problem.


danke
lg
peter


More information about the Vienna-pm mailing list