Index-Organisation im Netzbetrieb

Zugriff, Engines, Konvertierung. Von ADS über DBF bis zu SQL.

Moderator: Moderatoren

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

Beitrag von brandelh »

Hallo,

ich prüfe nach jedem SEEK, ob die gefundenen Daten dem entsprechen, was ich erwartet habe (Name gleich etc.) Wenn hierbei ein Fehler auftritt, erfolgt eine Fehlermeldung, dass die Indexdateien neu aufgebaut werden müssen.

Ich schließe dann alle Dateien und versuche frech die Löschung der Indexdateien, sind diese weg ( ! file(xyz) ), melde ich, dass das Programm geschlossen werden muß, aber gleich darauf neu gestartet werden darf. Beim Neustart prüfe ich immer ob alle Indexdateien da sind, wenn einige fehlen wird alles neu erzeugt.

Falls noch andere User angemeldet sind, geht das mit dem Löschen natürlich schief, und ich setzte eine FLAG-Datei.

Jedes Programm erkennt anhand der FLAG am Programmstart bzw. beim Versuch neue Fenster zu öffnen, dass zuerst die Indexdateien gelöscht und neu aufgebaut werden müssen. Nur bei Erfolg geht das Programm weiter und löscht die FLAG Datei. Bei den aktiven Programmen wird an mehreren zentralen Abläufen nachgesehen ob eine FLAG-Datei existiert (einmal sogar einen eigenen Thread mit 60 Sekunden Abfrage).
Wenn diese erkannt wird, wird das Programm per Fehlermeldung beendet. Das Ganze war schon zu Clipper vorhanden, wenn auch einfacher, da damals weniger User aktiv waren.

Mit Xbase++ haben sich die Indexfehler insgesamt deutlich gebessert.
Es kommt selten vor, dass ein Programm Indexfehler erkennt, aber wenn, schalten sich alle Clients je nach Vorgabe ab.

Das funktioniert gut, bietet eine 100% Sicherheit und keinen Zeitverlust, da das Vergleichen des Suchbegriffes mit den gefundenen Daten nicht meßbar ist.
Gruß
Hubert
Josef

Beitrag von Josef »

Macht es bei der Version 1.90 noch Sinn, diese "Parameter" zu setzen?
Ich hab doch irgndwo was drüber gelesen, dass bei der 1.90er Version das automatisch geht, oder täusch ich mich?

-----------------------
DbeSetDefault("DBFCDX")
DbeInfo(COMPONENT_ORDER,CDXDBE_LOCKRETRY,1000000)
DbeInfo(COMPONENT_ORDER,CDXDBE_LOCKDELAY,10)
DbeInfo( COMPONENT_ORDER, CDXDBE_MODE, CDXDBE_COMIX )
DbeInfo(COMPONENT_ORDER, DBE_LOCKMODE, LOCKING_EXTENDED)
-------------------------------
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Zu den lokalen Indexdateien einer Netzwerkdatei möchte ich noch kurz etwas schreiben:

1. Es ist möglich und erlaubt lokale Indexdateien zu einer gesharten Netzwerk-DBF zu haben. Denkbar wäre z.B. eine Art von Filterersatz, aber da man exclusiven Zugriff bei der Erstellung braucht, ist dies eher selten möglich.

2. Die lokale Indexdatei bekommt KEINE Benachrichtigung über neue Datensätzen oder geänderte Indexbegriffe, welche andere Anwender eingeben. Somit ist sie meist schon kurz nach der Erzeugung korrupt, auch wenn dies nur selten erkannt wird (seek auf alten Suchbegriff geht auf falschen Datensatz).

3. Der Neuaufbau bei jedem Programmstart ändert nichts am zweiten Problem und kostet je nach Datenmenge erhebliche Zeit.

Aus diesen Gründen kann im Normalfall nur von solchen Experimenten abgeraten werden.
Gruß
Hubert
Benutzeravatar
Armin
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 392
Registriert: Mo, 26. Sep 2005 12:09
Wohnort: 75331 Engelsbrand
Danksagung erhalten: 3 Mal
Kontaktdaten:

Beitrag von Armin »

Hallo Heinz,

jetzt hast Du ja schon jede Menge an Antworten.

NTX geht, die Dateien und Indexe kannst im gleichen Verzeichnis (aber auf Server) lassen. Alle benutzen die gleiche Indexdatei.

Ich habe auch bei unkontrolliertem Programmende einen Index Neuaufbau programmiert. Zum Teil über 35 dbfs und über 100 Indexdateien pro Programm, bis zu 15 Benutzer, auf Novell- und Windows-Servern. Läuft schon ewig stabil.

Was Du vielleicht noch bedenken solltest ist das Problem, wenn 2 Benutzer den gleichen Datensatz editieren wollen und der 2.Benutzer aber als erster speichert. Was speichert dann der 1. Benutzer?

Da gibt´s auch verschiedene "Sicherheitsstufen" - ich mach´s so, dass der Datensatz in ein Array geschrieben wird, über Speichervars. editiert wird und vor dem Abspeichern prüfe ich das Array gegen den Dateiinhalt. Gibt es Änderungen gebe ich eine Meldung aus "Achtung Daten wurden bereits von Benutzer 1 geändert - Daten neu laden, trotzdem speichern, abbrechen"

Gruss, Armin
vaestervik
Rookie
Rookie
Beiträge: 3
Registriert: Do, 16. Mär 2006 8:51
Wohnort: Schrobenhausen
Kontaktdaten:

Beitrag von vaestervik »

Armin hat geschrieben:Hallo Heinz,

Was Du vielleicht noch bedenken solltest ist das Problem, wenn 2 Benutzer den gleichen Datensatz editieren wollen und der 2.Benutzer aber als erster speichert. Was speichert dann der 1. Benutzer?

Gruss, Armin
Wenn der 1. Benutzer in den Änderungsmodus geht, sperre ich den Satz und der 2. Benutzer kommt nicht in den Änderungsmodus.
Dadurch habe ich das Problem nicht.

mfg
jörg
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Beitrag von brandelh »

Hi,

so rigide war ich auch schon.
Dummerweise kann ich in diesem Programm jetzt nicht den Satz aufrufen, welchen der Sachbearbeiter gerade bearbeitet und angebliche Probleme gefunden hat.

Hat halt alles Vor- und Nachteile.
Gruß
Hubert
Antworten