Datenbank in mehreren Threads nutzen?

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
ab-software
UDF-Programmierer
UDF-Programmierer
Beiträge: 51
Registriert: Di, 18. Okt 2005 12:35
Wohnort: 41747 Viersen
Kontaktdaten:

Datenbank in mehreren Threads nutzen?

Beitrag von ab-software »

Hallo,

mir stellte sich heute morgen folgendes Problem. Für unseren Filialabgleich öffne ich zentral einige Datenbanken um die dann einzeln mit den Daten anderer Filialen abzugleichen. Um das ganze etwas schneller zu bekommen wollte ich den Abgleich in mehreren Threads ablaufen lassen. Die Datenbanken möchte ich jedoch weiterhin gerne Zentral an einer Stelle öffnen.
Nun habe ich jedoch in den Unterthreads keinen Zugriff auf die Workareas.

Kann ich irgendwie in einem der Unterhreads auf die Workareas im Haupthread verweisen?

Gruß
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14658
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Beitrag von Jan »

Hallo Namenloser,

ohne jetzt auf die Problematik des Abgleiches zwischen Haupt- und Nebenthread einzugehen: Als alter Clipperaner war ich immer gewöhnt, irgendwo zentral alle dbf zu öffnen und zu schließen, um nicht aus Versehen mal etwas falsch zu schließen und dann einen Laufzeitfehler zu erzeugen.

Unter Xbase++ habe ich mich davon rigoros getrennt. Insbesondere bei der Threadprogrammierung macht das keinen Sinn mehr. Du kannst in x-belieg vielen threads die dbf immer wieder neu öffnen, ohne das es zu irgendwelchen Konflikten kommt. Das ist einfach genial. Und macht die ganze Geschichte extrem übersichtlich: Die öffnest in dem neuen Thread die genau hier benötigten dbf, hantierst damit wie erforderlich, und schließt die beim Verlassen des Threads wieder. Und auf alle dbf in allen anderen Threads hat das keinerlei Auswirkungen! (außer natürlich, daß eventuell geänderte Daten selbstverständlich dann auch hier zur Verfügung stehen)

Jan
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hi,

beim DBF Abgleich auf gleichen Festplatten bzw. über LAN Leitungen wirst du mit mehrern Threads nicht schneller werden, da die Festplatten bzw. die LAN Leitung das begrenzende Moment darstellen. Es kann sogar zu einer deutlichen Verschlechterung führen, wenn die Threads jeweils unterschiedliche DBF Teile gleichzeitig anfordern. Schneller wird es, wenn es möglich ist die DBFs exclusive zu öffnen.
Dann kann es auch nicht zu dead locks kommen, d.h. Situationen in denen sich die Zugriffe gegenseitig blockieren.

Mehrere Threads machen nur dann Sinn, wenn das Programm während dieser Arbeiten noch andere Sachen (GUI Frontend) erledigen soll.
Gruß
Hubert
ab-software
UDF-Programmierer
UDF-Programmierer
Beiträge: 51
Registriert: Di, 18. Okt 2005 12:35
Wohnort: 41747 Viersen
Kontaktdaten:

Beitrag von ab-software »

genau das wollte ich ja mal herrausfinden ob es dabei schneller wird, da ich verschiedene Datenbanken "gleichzeitig" abgleichen wollte
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9367
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 102 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Beitrag von Tom »

Workareas sind thread-lokal. Eine Datenbank, die in einem Thread (bzw. dessen Workspace) geöffnet ist, muß für den Zugriff per DbRequest/DbRelease in den Zero-Space übertragen und dem anderen Thread verfügbar gemacht werden. Die threadbezogene Kapselung der Workspaces hat den Vorteil, daß man in einer MDI-Anwendung die selben Tabellen mit den selben Aliasen immer und immer wieder öffnen kann, weil die anderen Threads keinen "Blick" auf sie haben. Wenn Du also alle Datenbanken einmalig öffnen und dann allen Threads zur Verfügung stellen willst, wird es kompliziert. Einfacher wäre es, wenn Du in Deinem Abgleichsthread alle Tabellen noch einmal öffnen würdest. Das geht aufgrund der Threadlokalität auch quasi aufwandsfrei. Da Du ja auch versteckte Threads öffnen kannst, würde es prinzipiell genügen, einen Thread für diesen Abgleich zu öffnen und im Hintergrund rödeln zu lassen.
Herzlich,
Tom
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hallo Tom,

war das mit dem ZeroSpace nicht so, dass man eine DBF aus einem Thread in den ZeroSpace verschieben kann und danach in einen anderen Thread. Aber nicht gleichzeitig aus 2 Threads auf denselben Alias zugreifen ?

Wie auch immer.

Eine Festplatte kann Daten extrem schnell liefern, wenn diese direkt hintereinander liegen. 8 MB Cache, da passt eine Menge von DBF-Datensätzen rein. Aber nach jedem Schreibzugriff muss immer auch der Header geändert werden (da mag die DBE ein eigenes cachen haben ?).

Wenn nun aber auf der gleichen Festplatte die beiden abzugleichenden DBFs liegen, muss er schon zwischen 2 Orten hin und her springen.
Wenn nun weitere dazu kommen wird es immer schlimmer.

Für den Videoschnitt z.B. verwende ich immer 2 verschiedene Platten zum Lesen und Schreiben der Daten. Wenn du also von verschiedenen Festplatten die Abgleiche Zeitgleich fährst, könnte es einen Zeitvorteil geben, wenn es auf einer abläuft muss es schlechter werden.

Wenn mein Virenscaner im Hintergrund scannt, habe ich als den Eindruck mein Rechner ist ne lahme Kiste, aber was soll der Prozessor machen, wenn die 16 MB Programmdaten gerade von anderer Stelle geladen werden sollen ...
Gruß
Hubert
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Beitrag von Rolf Ramacher »

Hi Hubert,

mit dem Virenscanner - das stimmt. Das zieht die Kiste zu. Die Frage ist nur- muß der Virenscanner ständig dann im Hintergrund laufen ??
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14658
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Beitrag von Jan »

Rolf hat geschrieben:Die Frage ist nur- muß der Virenscanner ständig dann im Hintergrund laufen ??
Prinzipiell würde ich erstmal sagen: Ja, natürlich, ich bin ja kein Bankotteur und Masochist. Als Ausnahme könnte ich mir vorstellen, wenn auf dem Server nichts als Datenbanken liegen, denn die lassen sich von einem Virus nicht gut infizieren.

Abgesehen davon schau Dir doch mal aktuelle Tests von Virenscannern an: Hier wird bei guten Tests auch die Systemlast mit angegeben, und da gibt es gewaltige Unterschiede.

Jan
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15697
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 66 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hi,

Das mit dem Virenscanner war nur ein Beispiel dafür, was passiert, wenn 2 Programme gleichzeitig größere Datenbestände auf der Festplatte laden wollen.

Laufen muß der Virenscanner als Wächterfunktion, aber keines Falls darf meiner selbständig die Festplatte durchsuchen, denn dorthin kann ja nur kommen, was vorher über Internet oder eMail herein kam.
Der Wächter arbeitet fast ausschließlich im RAM und verlangsamt die eMail und WEB Zugriffe nicht wirklich dramatisch. Das ist mir die Sicherheit wert.

Die automatische Prüfung der Festplatten habe ich abgestellt und starte diese per Hand z.B. über Nacht. Auf einem Server kann man ja die automatische Prüfung auf die Nacht oder das Wochenende verlegen.

Beim Rechner meiner Frau (sehr leise, aber daher nicht gerade modern - Celeron 1400) ist der G-DATA AVK eindeutig auch als Wächter zu 'hungrig'. Da werde ich wieder den AntiVir installieren, sonst braucht man auf dem nicht mehr arbeiten.
Gruß
Hubert
ab-software
UDF-Programmierer
UDF-Programmierer
Beiträge: 51
Registriert: Di, 18. Okt 2005 12:35
Wohnort: 41747 Viersen
Kontaktdaten:

Beitrag von ab-software »

*hmm*

trotzdem danke für euere Hilfe. Das mit den Workareas in verschiedenen Threads nutzen werde ich mir trotzdem nochmal angucken ...
Antworten