oBrowse:addColumn() ... dauert bei SQL ?

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

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

oBrowse:addColumn() ... dauert bei SQL ?

Beitrag von AUGE_OHR »

hi,

ich habe eine SQL Table mit 64000 Sätzen die ich mit 15 FIELDs in einem Browse anzeigen will.

Code: Alles auswählen

METHOD WorkBench:OpenBrowse( oTb, cTable, aFields, aOrder )
   nStart := SECONDS()
   ...
   oDlg := GuiStdDialog( "Table :"+cTable )
   ...
   oBrowse := XbpBrowse():new( ...)
   ...
   nFOR := SECONDS()
   iMax := oTb:FieldCount()
   FOR i:=1 TO iMax
     cField := oTb:FieldName( i )
     oBrowse:addColumn( MakeBlock( oTb, i ), , cField )
   NEXT
   nZeit := SECONDS() - nFOR
   ...
   oDlg:title := "Table :"+cTable+" load Time "+LTRIM(STR( SECONDS()-nStart))+;
                           " Sec. addColumn() "+LTRIM(STR( nZeit ))+" Sec."

***

FUNCTION MakeBlock( oTb, n )
return { || oTb:FieldGet( n ) }
nun beträgt die gesamt Zeit 0.16 Sec aber davon benötigt die o:AddColumn() ca. 0.12 Sec.

Frage : gibt es einen schnelleren Weg ?
gruss by OHR
Jimmy
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2121
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 30 Mal
Danksagung erhalten: 72 Mal

Re: oBrowse:addColumn() ... dauert bei SQL ?

Beitrag von Werner_Bayern »

Welche Xbase++-Version?
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: oBrowse:addColumn() ... dauert bei SQL ?

Beitrag von AUGE_OHR »

Werner_Bayern hat geschrieben:Welche Xbase++-Version?
Alle ... mit der native MySQL Schnittstelle.
wenn man DBF oder Array verwendet wird der Browser viel schnelle angezeigt als 0.16 Sec.
gruss by OHR
Jimmy
Benutzeravatar
Werner_Bayern
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2121
Registriert: Sa, 30. Jan 2010 22:58
Wohnort: Niederbayern
Hat sich bedankt: 30 Mal
Danksagung erhalten: 72 Mal

Re: oBrowse:addColumn() ... dauert bei SQL ?

Beitrag von Werner_Bayern »

Also nicht 2.0?

Dort ist es nämlich bekannt, dass der PostgreSQL ISAM support sehr langsam ist. Wurde seitens Alaska in der newsgroup bestätigt.

Aus der Hilfe:
The file-based index-sequential access method (ISAM) allows for much higher transaction rates (minimum of 10, up to a 100 times) compared to an SLQ client/server architecture. The transaction rate directly translates to record inserts or updates. On the other hand, using SQL queries generally is much faster than ISAM query processing, where all data needs to be transferred to the client. This is by nature and not related in any way to Xbase++ or the PostgreSQL DatabaseEngine. Therefore, the benefits and drawbacks should be considered carefully before moving to SQL client/server.

A solution can benefit from upsizing to the PostgreSQL server in various ways. The following are generally the most important benefits:

- Higher reliability due to client/server architecture

- Better query and data access performance, specifically in multi-user scenarios involving three or more client stations *)

- Easy SQL integration and the possibility to apply further performance optimizations
es grüßt

Werner

<when the music is over, turn off the lights!>
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: oBrowse:addColumn() ... dauert bei SQL ?

Beitrag von AUGE_OHR »

hi,
Werner_Bayern hat geschrieben:Also nicht 2.0?

Dort ist es nämlich bekannt, dass der PostgreSQL ISAM support sehr langsam ist. Wurde seitens Alaska in der newsgroup bestätigt.
die pgDBE ist noch was ganz anderes da die ISAM Emulation noch einen gewaltigen Overhead hat und einfach nur langsam ist.

nun sind 0.16 Sec. ja nicht super langsam ... aber die 0.12 Sec nur für die o:AddColumn() sind deutlich länger als gewöhnlich bei einer DBF oder Array wenn ich mit einer Detached Local arbeite ... warum ?
gruss by OHR
Jimmy
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:

Re: oBrowse:addColumn() ... dauert bei SQL ?

Beitrag von brandelh »

Ich kann nur empfehlen die Daten in ein Array zu schaufeln und das anzeigen zu lassen,
das hat bei DBF gut funktioniert und gleicht bei SQL die Unterschiede der Cursor aus ;-)

Natürlich nicht 100.000 auf einmal, aber es gibt bei Alaska ein Beispiel wie man riesiege DBF
Tabellen browst (500 sofort laden, der Rest im Hintergrund), im Prinzip kann man das mit SQL ja auch machen.
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: oBrowse:addColumn() ... dauert bei SQL ?

Beitrag von AUGE_OHR »

brandelh hat geschrieben:Ich kann nur empfehlen die Daten in ein Array zu schaufeln und das anzeigen zu lassen, das hat bei DBF gut funktioniert und gleicht bei SQL die Unterschiede der Cursor aus ;-)
Frage : wie viele Datensätze schaffst du in 0.16Sec. ?

es ist doch das o:addColumn() was relative lagen braucht ... nicht bis zur Anzeige des Dialog / Browse (0.04Sec)
Es dauert auch nicht viel länger wenn es mehr Datensätze ( > 100.000) werden.
wenn ich jedoch 20 statt 10 o:addColumn() anlege dann verlängert sich die Zeit ... und bei > 100 (klar, sollte man nicht machen)

nun ist da o:addColumn() bei Array oder DBF viel schneller ... wieso ?

Frage : wird bei einem o:addColumn() der Codeblock gleich evaluiert ?

ein oTb:FieldGet( n ), was über einen DLL Call an die SQL Table geht, dauert ja auch ein wenig.
gruss by OHR
Jimmy
Antworten