mehrere db_files gleichzeitig öffnen geht nicht ?
alex
- perl
Ahoi
ich würde gerne mehrere DB_FILEs öffnen:
__CODE__
my $db = tie %HASH1, "DB_File", $file1, O_CREAT | O_RDONLY, 0644 or die "Can't open db_file: $!\n";
my $fd = $db->fd();
open DATAFILE, "+<&=$fd" or die "Fehler beim sicheren Öffnen: $!\n";
flock(DATAFILE, LOCK_EX ) or die "Konnte Lock nicht bekommen: $!";
my $test1 = $HASH1{"wert1"};
my $db2 = tie %HASH2, "DB_File", $file2, O_CREAT | O_RDONLY, 0644 or die "Can't open db_file: $!\n";
my $fd2 = $db2->fd();
open DATAFILE, "+<&=$fd2" or die "Fehler beim sicheren Öffnen: $!\n";
flock(DATAFILE, LOCK_EX ) or die "Konnte Lock nicht bekommen: $!";
my $test2 = $HASH1{"wert1"};
__END__
Allerdings hab ich das Gefühl das sobald ich die 2.te DB öffne die erste geschlossen wird, weil $test2 keinen wert besitzt... was muss ich also tun damit das so funzt wie ich mir das wünsche? (das soll unter 'use strict' laufen...)
danke, alex
Ahoi
ich würde gerne mehrere DB_FILEs öffnen:
__CODE__
my $db = tie %HASH1, "DB_File", $file1, O_CREAT | O_RDONLY, 0644 or die "Can't open db_file: $!\n";
my $fd = $db->fd();
open DATAFILE, "+<&=$fd" or die "Fehler beim sicheren Öffnen: $!\n";
flock(DATAFILE, LOCK_EX ) or die "Konnte Lock nicht bekommen: $!";
Tipp: Lies mal "The Trouble with fd" in der Perldoc.
Gruss, Erwin
Tipp: Lies mal "The Trouble with fd" in der Perldoc.
aha scheinbar ist das locking ein problem bei db_files, ok dazu war ein tipp ich solle DB_FILE::Lock benutzen, aber ohne beispiele bin ich aufgeschmissen.
hat jemand zufällig ein beispiel?
danke
komm wohl nicht drumrum ein neues modul zu installieren
siehe: http://cpan.develooper.com/modules/by-module/DB_File/DB_File-Lock-0.03.readme
werde ich wohl morgen machen, trotzdem danke!
hi,
komm wohl nicht drumrum ein neues modul zu installieren
siehe: http://cpan.develooper.com/modules/by-module/DB_File/DB_File-Lock-0.03.readme
werde ich wohl morgen machen, trotzdem danke!
es kommt ganz darauf an was du mit DB_File machst. Falls nur lesen brauchst du kein Lock. Falls Daten nacheinander aus dem Puffer geschrieben werden brauchst du auch kein Lock, z.B. bei einem Seitenaufrufzähler: Hier schreibt a die Zahl 1 und b überschreibt dann die 1 mit 2 usw.
Ein Lock brauchst du jedoch auf jeden Fall wenn es nicht sein darf, dass die 1 von a durch eine 2 von b überschrieben wird.
Beispielsweise wenn Daten per WebForm von verschiedenen Usern kurz hintereinander eingegeben werden. Beim Laden des Forms haben a und b den gleichen Datenbestand, a macht ein Update, b kurz danach - Das Ergebnis: Die Daten von a sind wech.
Um sowas zu vermeiden schleife ich immer den Zeistempel der DB_Datei im Formular mit und prüfe den beim Submit. Das ist zwar nur sekundengenau, aber in der Praxis völlig ausreichend. Und bei Bedarf kann ich das mit Time::HighRes auch ms genau machen.
Erwin