Ja, führt zu einem Fehler beim
Code: Alles auswählen
DbeLoad("pgdbe")
Moderator: Moderatoren
Ja, führt zu einem Fehler beim
Code: Alles auswählen
DbeLoad("pgdbe")
Damit wurde meine Vermutung (auf die ich gewettet hätte) zur Gewissheit....Ja, führt zu einem Fehler beim
Servus Tom,Tom hat geschrieben: ↑Mi, 03. Jul 2019 9:05 Ich muss da entschieden gegenhalten. Ja, die Behauptung, man müsse nur ein paar Zeilen Code umstellen, ist ein wenig optimistisch geraten, aber die ISAM-Emulation ist verwendbar, auch bei größeren Datenmengen. Wir haben Einzeltabellen mit mehreren hunderttausend Datensätzen, die sich auch in Browses gut bis sehr gut verhalten.
Code: Alles auswählen
static procedure insert
local i, cZeit := time()
for i := 1 to 100
add_rec()
replace art->text with "Insert-Test Nr. " + ltrim(str(i))
next i
confirmbox(, "Zeit für " + ltrim(str(i)) + " ISAM-Inserts: " + timediff(cZeit, time()))
return
Jetzt sehe ich dass du gar nie in die Problemzonen kommst! Da kannst du auch zuversichtlich sein.Die Bewegungsdatentabellen haben selten mehr als 10.000 Datensätze
hm ... das sind 100 x INSERT und dafür MinutenWerner_Bayern hat geschrieben: ↑Mi, 03. Jul 2019 13:26 magst mal testen, wielange bei Dir sowas im ISAM-Modus mit einer Tabelle mit > 400k DS dauert?Wie geschrieben, dauert 6 Minuten (habs gerade nochmal getestet, diesmal sogar 7:30),Code: Alles auswählen
static procedure insert local i, cZeit := time() for i := 1 to 100 add_rec() replace art->text with "Insert-Test Nr. " + ltrim(str(i)) next i confirmbox(, "Zeit für " + ltrim(str(i)) + " ISAM-Inserts: " + timediff(cZeit, time())) return
OK die "echten" Index Dateien fehlen dabei noch.finish after 221.79 Sec. for 551403 Records = 2486.15
Code: Alles auswählen
static procedure insert
local i, cZeit := time()
for i := 1 to 100
neuer_artikel()
replace art->text with "Insert-Test Nr. " + ltrim(str(i))
next i
confirmbox(, "Zeit für " + ltrim(str(i)) + " ISAM-Inserts: " + timediff(cZeit, time()))
return
function neuer_artikel
local nNr
dbClearfilter()
set order to 2
go bottom
nNr := art->art_nr + 1
set order to 1
if .not. add_rec()
return .f.
endif
replace art->art_nr with nNr
replace art->datum with date()
replace art->datum_neu with date()
replace art->letzter_be with benutzer(,BENUTZER_NR)
replace art->angelegt with art->letzter_be
replace art->einheit with "Stk."
replace art->ust with 1
replace art->kennz with "N"
replace art->seriennr with "N"
commit
return .t.
Artikel-Tabelle, Browse, Suchfeld. Klassische Vorgehensweise bei uns. Wieviele DS die hat, war bei DBF ziemlich egal, geht mittels Quickbrowse und Browse relativ flott. Es werden in beiden Fällen ja nicht die kompletten Daten eingelesen, was bei ISAM-SQL leider schon der Fall ist.
Doch Jimmy leider ist es genau so. Zufrieden geben: Nein, gar nicht. Ich habe es begraben. Weil ich auch nicht sehe dass Alaska hier noch gross etwas ändern kann. Der massive Zeitverlust kommt von den Trigger und anderen speziellen Funktionen in der Datenbank welche die ISAM Emu benötigt um zu arbeiteten. SQL bietet vieles nicht was zur ISAM Emu nötig ist deshalb muss dies mit den speziellen Funktionen emuliert werden.ich kann nicht glauben das es bei der ISAM Emu Minuten braucht was native < 0.1 Sek. dauert und ihr euch damit Zufrieden gebt
Kannst du dazu was näheres sagen?Und das ist nur ein Beispiel von sehr vielen. Das sind zwei Welten, die aufeinanderkrachen, und die Idee, diese Welten ohne Bruch miteinander zu verbinden, ist schon originell - und bewundernswert. Alaska ist allerdings nicht als erste auf diese Idee gekommen. Das gab es schon vorher in einigen Entwicklungssystemen, u.a. in FoxPro für MS-SQL. Auch das lief anfangs recht spröde.
Andererseits teilen sich da 2 Systeme den Vorgang, bei DBF macht (fast) alles der Client.Tom hat geschrieben: ↑Mi, 03. Jul 2019 17:00 Weil es auch ein viel simplerer Vorgang ist. Datei sperren, Zähler hochsetzen, Blinddatensatz anhängen, popularisieren, ggf. noch Indexe aktualisieren, Datei entsperren. Das ganze ohne Rücksicht auf irgendwas. Aber um das Ergebnis dieses Vorgangs mit einem SQL-Server nachzustellen, der von sechs Vorgängen nur zwei überhaupt kennt, das kostet eben Kraft und Zeit.
Code: Alles auswählen
create index ...
Code: Alles auswählen
o:GoToNumber(1)
Code: Alles auswählen
#IFDEF __UsePG__
#ELSEIF __Clipper__
#ELSEIF __Harbour__
#ELSEIF __XPP__
#ENDIF
Der jetzt verwendete ADS soll durch PG ersetzt werden.Also zurück zu meiner Frage : "was" von der ISAM Emulation braucht man wirklich "wofür"
Ich wollte an Alaska's Aussagen glauben, sie wollen ja als verlässlicher Partner gesehen werden, zudem hoffte Ich der Umstieg geht so mit weniger eigenem Aufwand .....Ihr wartet Jahre lang darauf das Alaska die Arbeit für euch macht. Wieso glaubt Ihr den "Leeren" Versprechungen
Das sehe gar nicht so. Wenn ISAM Emuliert werden soll muss sich auch das Datenfeld so verhalten. Soll heissen ein Feld darf nur die definierten Anzahl Zeichen aufnehmen. Verwendest du den Type Text gibt es kein Limit und der Code wäre gebrochen.sicherlich hätte der nicht den FEHLER gemacht und Type "C" als "CHAR" zu nehmen sondern "TEXT"
und dafür brauchst du ISAM
das bezog sich auf PDR 7124 und "Full Text Search"ramses hat geschrieben: sicherlich hätte der nicht den FEHLER gemacht und Type "C" als "CHAR" zu nehmen sondern "TEXT"
Leider kann die ISAM Emu auch in diesem Fall bei der Geschwindikeit absolut nicht mit halten. Die DBFDBE schreibt Datensätze blitzartig weg, noch schneller als natives SQL, die ISAM-EMU benötigt für die selbe Aufgabe MInuten ...... Das ist ja das Problem.Die ISAM-Emulation ist für den Fall gedacht, dass man PG als direkten Ersatz für DBF verwenden will,