Thread Storable->retrieve parallel aus einem weiteren Programm? (12 answers)
Opened by toby at 2009-09-30 15:28

toby
 2009-10-01 11:05
#126379 #126379
User since
2006-04-14
66 Artikel
BenutzerIn
[default_avatar]
Hi,

Quote
Wenn du allerdiengs auf einen Linux System (generell Unix Systeme) arbeitest
kannst du rein theoretisch durch temp datei schreiben / rename es auch so hinbiegen
das du ohne locking immer wieder lesen kannst ohne in probleme zu rennen.


Ich arbeite nur unter Unix (HP-UX). Mein erster Gedanke war aus B.pl mir die Datei wegzukopieren und dann die Kopie auszulesen und anschliessend wegzuschmeissen. Dies ist zwar sicher, erschien mir aber zu umständlich und wollte wissen, ob es direkt mit Perl-Board-Mitteln geht.

Quote
Locking beim Lesen brauchst du nur dann wenn du die Datei nachträglich änderst und neu schreibst.
Weil du dann genau dann einen Moment beim auslesen erwischen kannst wenn du die Datei neu schreibst.


Das eine Programm A.pl (daemon) schreibt kontinuierlich, aber ungegelmäßig rein. Das andere, parallele Programm B.pl liest die Datei nur ab und zu aus, um den aktuellen Zustand für andere Zwecke auszuwerten.

Meine angedachte Vorgehensweise nach Tipps von pq war lock_nstore() beim A.pl und lock_retrieve() bei B.pl. Da ich mich aber mit dem Lock- und Store-Verhalten bei unabhängigen, parallelen Zugriffen nicht auskenne habe ich nun doch noch folgende Sorgen:

Was macht A.pl, wenn es schreiben möchte und die Datei gerade vom B.pl für Lesen ge'lock'ed ist? Der deamon (A.pl) darf nie Probleme haben über die Datei zu verfügen, wogegen bei B.pl nicht so ganz wichtig ist, wenn er Probleme beim Lesen bekommt. Natürlich wäre es am schönsten, wenn weder A.pl noch B.pl Probleme bekommen. Da ich aber nicht weiss, wie sich gleichzeitiges lock_retrieve() vom B.pl und lock_nstore() vom A.pl verhält, ist mein aktueller Plan lock_nstore() bei A.pl und normales retrieve() bei B.pl mit der Gefahr, dass B.pl evtl. zerschnittene Daten erhält. Was meint ihr darüber?

=> Wenn A.pl mit lock_nstore() wartet, bis lock_retrieve() von B.pl fertig ist, wäre alles OK, wie läuft es aber tatsächlich ab? Wie gesagt, das Wichtigste ist, dass A.pl problemlos reinschreiben darf!

Danke und viele Grüße! :)
Toby

PS: lock_store(), oder lock_nstore() ? Wo ist der Unterschied???

Last edited: 2009-10-01 11:12:12 +0200 (CEST)

View full thread Storable->retrieve parallel aus einem weiteren Programm?