INDEX und Netzwerkbetrieb

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

Moderator: Moderatoren

JanR
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 129
Registriert: Di, 18. Okt 2005 14:44

INDEX und Netzwerkbetrieb

Beitrag von JanR »

Hallo,

ich habe ein Programm, dass auf einem Server liegt und von mehreren Usern benutzt wird.

Sobald ich aber den INDEX neu aufbaue (REINDEX), dann fliegt mir das ganze um die Ohren, wenn mehr als ein User gerade angemeldet ist.

Wie kann ich den INDEX bei einer Netzwerkanwendung neu aufbauen und auch neu setzen mit SET INDEX?

Habe leider mit Netzwerkanwendungen noch keine Erfahrung.
thomas
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 116
Registriert: Fr, 23. Sep 2005 16:07
Wohnort: Bad Oldesloe
Kontaktdaten:

Beitrag von thomas »

Hallo Jan,

ein REINDEX fordert immer eine Exclusiv-Zugriff im Netzwerk.
Also, User raus und dann REINDEX.

Gruß
Thomas
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 »

Hallo, Jan.

USE myDB EXCLUSIVE
IF !NetErr() // feuert, wenn kein exclusiver Zugriff möglich
INDEX ON ... TO ...
ENDIF
Herzlich,
Tom
Josef

Beitrag von Josef »

Hallo zusammen!
Ich habe auch so meine Probleme der Indexdateien im Netzwerk. Ich hab alle Index auf CDX umgestellt und der Kunde hat Probleme mit der Geschwindigkeit. Ob es am Index liegt, weiß ich noch nicht. Vielleicht liegts auch an den Variablen.
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 »

Hallo, Josef.

Welche Xbase-Version? Schonmal mit Extended Locking versucht (ab Version 1.82.0294)? Mal die Lockretries hochgesetzt?

Code: Alles auswählen

   DbeInfo(COMPONENT_ORDER,DBE_LOCKMODE,LOCKING_EXTENDED)
DbeInfo(COMPONENT_ORDER,NTXDBE_LOCKRETRY,20000000)
DbeInfo(COMPONENT_ORDER,NTXDBE_LOCKDELAY,10)
(Beispiele für DBFNTX).
Herzlich,
Tom
Josef

Beitrag von Josef »

Hi Tom,

bis jetzt hab ich die 1.80. Die 1.82 / 1.90 hab ich erst bestellt. Das update mach ich hauptsächlich wegen diesem Problem.

Noch was:
VX hab ich mir als Demo schon angeschaut. Ich hab mir da irgendwie was anderes vorgestellt. So wie Visual Basic oder so.
Anders gefragt: Ist es notwendig, VX zu haben?
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,

zwar schon etwa älter, aber vielleicht interessiert es ja noch...

Alte Hasen haben alle eine Entwicklungsumgebung gekauft (Express...) oder selbst aus den Beispielen gebastelt (ich aus MDI-Beispiel). Hier wird es erst mal schwer werden mit der neuen IDE zurecht zu kommen.
Ob man das was zur Zeit kommt braucht ?
Im Moment nicht, es ist sowieso beta. Aber die VX 2.0 (scheint mir die nächste Version von Xbase++ 1.90 zu sein) soll die 2 GB DBF und Indexdateibegrenzung aufheben und das könnte Sinn machen.

Der große Wurf soll ja die VX 3.0 werden - da malt man die Dateizusammenhänge und Felder und erhält eine fertige Application (so habe ich das zumindest verstanden), ob die dann passt ist eine andere Frage ;).

Warten wir es ab, es wird uns sicher nicht so schnell überrennen - nach den bisherigen Erfahrungen.
Gruß
Hubert
Benutzeravatar
Lutz Rübe
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 144
Registriert: Mi, 02. Aug 2006 18:13
Wohnort: 24536 Neumünster
Danksagung erhalten: 6 Mal
Kontaktdaten:

Beitrag von Lutz Rübe »

nach fast einem Jahr möchte ich dieses Thema noch einmal aufgreifen und aktualisieren...

Ich habe gelernt, dass der Aufbau und ein REINDEX nur bei EXCLUSIV geöffneten Datenbanken möglich ist.

Da ich aber des öfteren Index Probleme habe - vermutlich durch unsaubere Programmierung - habe ich mir angewöhnt, relativ oft ein OrdListRebuild() einzubauen. (automatisch nach Öffnen der Datenbanken und manuell durch ein eigenes Programm-Modul). Dies ist im Single-User Modus überhaupt kein Problem.

Dies führt aber zu Problemen im Multi-User-Betrieb (Netzwerk-Betrieb), wie oben schon geschildert. Nun meine Frage:

Kann ich ein USE cFile EXCLUSIV erzwingen (wenn z.b. bei anderen Usern oder in anderen WorkAreas die Datenbanken im Shared-Mode geöffnet sind) ?? Wenn ja, was passiert mit den im Shared-Mode geöffneten Datenbanken ?

Wie habt ihr dieses "Problem" gelöst ??

Gruß
Lutz
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Beitrag von AUGE_OHR »

hi,
Lutz Rübe hat geschrieben: Da ich aber des öfteren Index Probleme habe ...
...
Dies führt aber zu Problemen im Multi-User-Betrieb (Netzwerk-Betrieb),
...
Kann ich ein USE cFile EXCLUSIV erzwingen
nope, solange die irgend jemand die geöffnet hat, kan man exclusiv
nicht machen
Lutz Rübe hat geschrieben: Wie habt ihr dieses "Problem" gelöst ??
... man könnte ja FLock() benutzen, aber dein eigendliches Problem wird
damit ja nicht "behoben".

für das Netzwerk musst du dir ja eh eine eigene "Net_Use" schreiben.

da Cl*pper bei CDX Index Dateien die ja gleich mit aufgemacht hat,
was Xbase++ ja nicht tut, hab ich im meine "Net_Use" das öffnen von
"allen" dazugehörigen Index Dateien integriert (auch NTX). Sollte man
dann mal den Index erweitern so muss man auch "nur" in das "Net_Use"
Modul was auch eine CreateDBF/CreateCDX/CreateNTX enthält.

Somit kann man eigendlich keinen Index "vergessen" und Xbase++
sollte die alle "anfassen" sodas DBF & Index das selbe Datum/Zeit
haben "sollten" (jaja ich weiss das es darüber andere Meinungen gibt)

zum Netzwerk sollte man noch sagen das man das "timing" in der
DBESYS.PRG "anpassen" kann. Besonders bei "gemischten" Workstationen
mit verschiedenem OS oder, "langsam/schnellen" Workstationen "kann"
es bei einem SKIP (!) mit Index schon zu einem XppError kommen.

... und Op´s Lock bei M$ Netzwerken nicht vergessen. für Novell evtl.
Turbo-FAT abschalten und den "richtigen" NW-Client nehmen.

gruss by OHR
Jimmy
Benutzeravatar
Lutz Rübe
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 144
Registriert: Mi, 02. Aug 2006 18:13
Wohnort: 24536 Neumünster
Danksagung erhalten: 6 Mal
Kontaktdaten:

Beitrag von Lutz Rübe »

Hallo Jimmy,
... man könnte ja FLock() benutzen, aber dein eigendliches Problem wird
damit ja nicht "behoben".
das funktioniert leider nicht, da ja EXCLUSIV auch beim REINDEX gesetzt sein muß.

darf ich mal fragen, wie Deine Net_Use aussieht und funktioniert ? Da ich ja vorher nur unter Clipper ein Netzwerk-Programm geschrieben habe, habe ich in dieser Beziehung kaum Erfahrung.

Ich möchte nicht das Rad noch mal neu erfinden, wenn es schon irgendwo erfolgreich rollt (und keine Copy-Rights drauf sind ;-) )

Gruß
Lutz
Benutzeravatar
Lutz Rübe
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 144
Registriert: Mi, 02. Aug 2006 18:13
Wohnort: 24536 Neumünster
Danksagung erhalten: 6 Mal
Kontaktdaten:

Beitrag von Lutz Rübe »

ups, was habe ich denn da schon wieder angestellt ? die optik passt ja überhaupt nicht - zumindest so wie ich es mir gewünscht hatte.
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 Lutz,

die Quote Markierungen waren in der falschen Reihenfolge.
Ich habe die Optik verbessert. Das kann jeder Autor über die EDIT Taste in seinen Artikel auch selbst machen.
Gruß
Hubert
Benutzeravatar
Lutz Rübe
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 144
Registriert: Mi, 02. Aug 2006 18:13
Wohnort: 24536 Neumünster
Danksagung erhalten: 6 Mal
Kontaktdaten:

Beitrag von Lutz Rübe »

Danke Hubert,

für die extrem schnelle Antwort und Hilfe...

:-) sieht so aus als ob Du grade Zeit hättest ?

Wenn Du Dich da schon so gut auskennst, wie kann ich die Zitate aus den anderen Beiträgen eigentlich in meinen Beitrag aufnehmen ohne ein zweites Fenster aufzumachen ? Und dann noch der Hinweis "xxx schrieb:" hinzufügen ?

gruß
Lutz
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21199
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Hi Lutz,

eine kurze Frage am Rande: Machst Du immer nur einen Reindex, oder baust Du den Index richtig neu auf?

PS: Zitat übernehmen kannst Du, indem Du oben rechts den Button Zitat drückst, des jeweiligen Verfassers.
Zuletzt geändert von Manfred am Mo, 29. Jan 2007 13:07, insgesamt 1-mal geändert.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14655
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Beitrag von Jan »

Da steht normalerweise [quote]. Und Du ergänzt das auf [quote="name"]

Jan
Benutzeravatar
Lutz Rübe
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 144
Registriert: Mi, 02. Aug 2006 18:13
Wohnort: 24536 Neumünster
Danksagung erhalten: 6 Mal
Kontaktdaten:

Beitrag von Lutz Rübe »

Hallo Hubert,

ich hab da noch kein eigenes Konzept entwickelt. Ich hab' den REINDEX nachträglich dort eingebaut, wo ich es für nötig hielt. Aber es kann auch passieren, dass ich ihn total neu aufbaue (und in mind. einem fall auch prüfe, ob er schon existiert).

also von allem etwas...

ein grundsätzlicher Neu-Aufbau empfiehlt sich wegen des EXCLUSIV Modus ja auf keinen Fall. Bei Programmstart läuft eine CH_DBF, die auf Existenz der Datenbanken und ihrer Indizes checkt und beides ggf. wieder neu aufbaut...

Gruß
Lutz
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21199
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Hi Lutz,

da ich Dir die Frage gestellt hatte, denke ich einmal Du hast Dich nur im Namen verhaspelt. :lol:

Also, REINDEX würde ich überhaupt nicht benutzen. Damit werden keine Fehler im Dateiheader z.B. behoben. (Handbuch) Also, immer komplett neu aufbauen.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
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 »

Ergänzend zu Manfred: Ich habe davon gehört, daß CDX u.U. Indexfehler weiterschleift, wenn man einfach nur neu reindexiert. Also: Indexdatei mit FErase() löschen, erst dann neu aufbauen.

@Lutz: Wenn Du reindexierst und darob Tabellen exclusiv öffnest, hast Du nicht nur an dieser Stelle das Problem, daß die Tabellen geöffnet sein können (NetErr() feuert), sondern auch umgekehrt an allen anderen Stellen, weil ja jemand versuchen kann, eine Tabelle "shared" zu öffnen (Standard), die gerade reindexiert wird (auch hier feuert NetErr() und die Dateiöffnung wird verweigert). Entweder schaffst Du also eine Struktur, die nur dann das Reindexieren erlaubt, wenn kein anderer Benutzer im Programm ist, oder Du setzt (so machen wir das) für alle Tabellen, die reindexiert werden sollen, einen Flag, und sobald es möglich ist, sie exclusiv zu öffnen, werden sie dann reindexiert (Flag wird wieder gelöscht). Beides erfolgt durch eine eigene Fassung von DbUseArea().
Herzlich,
Tom
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21199
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Jepp,

habe ich in der Hektik vergessen. Und was auch wichtig ist zu wissen, CDX knallt bei einer Nichtlöschung der Indexdatei alles hinten dran. Dann wächst das Teil recht fröhlich vor sich hin.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Lutz Rübe
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 144
Registriert: Mi, 02. Aug 2006 18:13
Wohnort: 24536 Neumünster
Danksagung erhalten: 6 Mal
Kontaktdaten:

Beitrag von Lutz Rübe »

Hallo Manfred,

bitte höflichst um Entschuldigung für die Verwurschtelung....

Meine nächste Frage als Anfänger: wo ist der Unterschied zwischen CDX und NTX ? Und wo ist der Vorteil ?

Ich komme aus der alten Clipper-Welt und da kenne ich nur NTX...

Ich werde also das REINDIZIEREN nach Möglichkeit einstellen. Warum gibt es dann überhaupt diese Funktion, wenn es keinen wirklichen Sinn macht ?


Gruß

Lutz
Lutz
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21199
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Hi Lutz,

kein Problem, das passiert hier öfter, das Namen verwechselt werden im Eifer des Gefechtes.

Nun, CDX ist ein komprimierter Index und er enthält TAGS, sprich mehrere "Indexdateien" in einem. Du brauchst also nur 1 Datei zu öffnen und hast alles zur Verfügung. Lies am besten einmal im Handbuch die Unterschiede durch und dann entscheide selbst.

Reindex.... Naja, ich weiß auch nicht warum das noch drin ist. Evtl. aus alten Clipperzeiten? Es ist aber noch etliches drin, was eigentlich nicht (mehr) benötigt wird. Aber wer weiß warum, ich weiß es nicht so genau.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
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 »

@Lutz: REINDEX erzeugt alle bereits mit der Tabelle geöffneten Indexdateien neu, wohingegen INDEX ON ... TO (oder OrdCreate) das nacheinander "händisch" macht, ohne daß die Indexe mit den Tabellen geöffnet werden müssen. Der Vorteil von OrdCreate besteht darin, daß die Indexe neu erzeugt werden können, auch wenn sie beschädigt sind, REINDEX funktioniert nur dann, wenn die Indexe unbeschädigt sind.
Herzlich,
Tom
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14655
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Beitrag von Jan »

Nun, REINDEX hat schon seine Vorteile. Es ist in jedem Fall schneller, als wenn man die Indexdateien neu erstellen muß. Und ich glaube, es wurde auch ein File-Handle weniger benötigt. Was ja unter DOS durchaus noch ein wichtiger Aspekt war.

Und prinzipiell ist der Befehl ja nicht falsch. Aber es ist wie mit Set Relation: Hat man erstmal Probleme damit gehabt, dann vermeidet man das nach Möglichkeit in Zukunft. Und REINDEX hat nun einmal Probleme mit zerschossenen Index-Dateien. Sind die in Ordnung gibt es keinerlei Probleme damit.

Jan
Benutzeravatar
Lutz Rübe
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 144
Registriert: Mi, 02. Aug 2006 18:13
Wohnort: 24536 Neumünster
Danksagung erhalten: 6 Mal
Kontaktdaten:

Beitrag von Lutz Rübe »

ups,

sieht so aus, als wenn ich jetzt eine Grundsatzdiskussion über die Indizierung von Datenbanken angezettelt habe... Es gibt also unterschiedliche Meinungen darüber...

also, was ich jetzt und hier verstanden habe ist:

vermeide REINDEX so weit wie möglich, öffne Datenbanken grundsätzlich mit allen Indices und bevor du einen REINDEX machst, lösche den bestehenden und baue ihn neu auf, aber dann möglichst an einer stelle in der Anwendung, wo nix passieren kann..

Danke.

Gruß
Lutz
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,

soweit ich weiß wird auch bei einem Reindex die komplette Datei neu eingelesen. Somit dürfte es heute keine Vorteile von reindex mehr geben !

Ich vermute, dass reindex nur den Vorteil unter dbase hatte, dass man mit einem Befehl (reindex) den Index neu erzeugen konnte, ohne die Indexbeding neu eingeben zu müssen. Für einen Interpreter ist das ja ganz nett, aber Clipper oder Xbase++ Programme kennen den Indexbegriff genau ! Ich kann mich natürlich auch irren, aber ich habe reindex nie benutzt.

Vorteile von DBFNTX

- die DBF ist immer compatibel zu den alten DOS Welten
- man muss keine neuen DBEs einbinden.
- das kennt man halt

Vorteile von DBFCDX

- die DBF ist immer compatibel zu den alten DOS Welten, nicht aber der Index
- die CDX Indexe sind viel kleiner als die NTX

Vorteile von FOXCDX

- man kann reine ANSI DBFs erstellen und somit OEM / ANSI Konvertierung ausschalten
- man kann spezielle Datentypen verwenden (FOX...)
- die Memodateien sind wesentlich kleiner und effizienter.

...
Gruß
Hubert
Antworten