Perl ODBC Datenbankupdates am Besten erkennen

Gast #2231737
Lesenswert?

Hallo.

Ich lese mit Perl, ODBC, DBI eine Access Datenbank aus (Win32, cygwin). 
Diese wird unregelmässig von anderen Programmen upgedatet/ geschrieben 
(zwischen 2s und 5Min).
Im Moment mache ich ein nicht sehr schönes sleep(5) bevor mein Skript 
wieder läuft. Ab und an verpasse ich dann ein Update und ein Feld wurde 
quasi zweimal neu geschrieben in der Zwischenzeit.
Wie kann ich erkennen dass die Datenbank upgedatet wurde und wie lese 
ich sie am Besten aus ohne sie ständig zu pollen?
Danke.


Martin
Gast #2231935
Lesenswert?

Hallo Läubi.

Danke erstmal für deine Antwort. Wie soll ich die Updates über mein 
Programm laufen lassen? Ich habe die anderen Programme nicht unter 
meiner Kontrolle. Die schreiben in die AccessDatenbank auf dem Server 
und ich will möglichst elegant und resourcenschonend diese auslesen wenn 
sich etwas geändert hat.



Martin
Gast #2231959
Lesenswert?

es geht nicht per odbc. Es gibt Datenbanken die können events erzeugen 
(Interbase) aber dies geht dann auch nocht über ODBC.

Das mit dem Sleep(5) ist also ok, es sollte eh keine nennenswerte last 
erzeugen.
Gast #2232126
Lesenswert?

Hallo.

Manchmal werden einzelne Felder halt schneller als sleep(5) 
überschrieben und ich benötige alle Werte die da in der Zwischenzeit 
drin gestanden haben.
Jetzt kann ich halt sleep(1) verwenden aber ich wollte mal wissen ob es 
da was besseres gibt (quasi eine Art Callback wenn die Datenbank 
aktualisiert worden ist und ann wieder die benötigten Felder lesen und 
nicht die ganze Zeit pollen).

Martin
Gast #2232127
Lesenswert?

Martin schrieb:
> Manchmal werden einzelne Felder halt schneller als sleep(5)
> überschrieben und ich benötige alle Werte die da in der Zwischenzeit
> drin gestanden haben.

dann ist dein Datenbank design falsch, wenn du die werte braucht dann 
musst die sie auch in der DB speichern und dann ist es egal wann du sie 
abfragst.
#2232148
Lesenswert?

Martin schrieb:
> Jetzt kann ich halt sleep(1) verwenden aber ich wollte mal wissen ob es
> da was besseres gibt (quasi eine Art Callback wenn die Datenbank

"sleep" löst keine Probleme, es verschiebt sie nur.
Der Callback-Gedanke ist schon richtig. Bei Datenbanken gibt es Trigger. 
Damit kannst du erreichen, dass innerhalb der Datenbank ein Stück Code 
bei bestimmten Aktionen (INSERT, UPDATE, DELETE) ausgeführt wird. Du 
legst eine zusätzliche Tabelle an und baust einen Trigger, der dir die 
gewünschten Daten in diese zusätzliche Tabelle schreibt. Diese 
zusätzliche Tabelle kannst du dann auslesen wann es dir passt, ganz ohne 
sleep. Die verarbeiteten Einträge löscht du dann wieder raus. 
Voraussetzung ist allerdings, dass du Zugriff auf das Datenbankschema 
hast.
Gast #2232180
Lesenswert?

Martin schrieb:
> In der Datenbank kann ich hinzufügen was ich will. Wie geht denn das mit
> den Upodates mit ODBC Perl?

es geht nicht um Perl! Ein Trigger läuft innerhalb der DB und führt 
meist SQL-code aus.

Von Perl machst du ganz normale selects.

Du musst dafür sorgen das alle werte die du braucht gespeichert werden, 
ob nun mit Trigger oder ohne ist dir überlassen. Das muss aber 
innerhalbt der DB erfolgen und nicht von Perl aus.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren