PDA

View Full Version : Geschwindigkeit beim Datentransfer via ODBC in MS ACCESS



mdhl
08-07-05, 13:38
Hallo Forum,
mein Problem beim Datantransfer von iSeries ==> MS Access ist die Geschwindigkeit.
Kennt jemand eine Alternative zur ODBC Verbindung, die bei großen Datenmengen auch performant ist?
Ich wäre sehr dankbar, wenn jemand eine Lösung hat.

mfg mdhl

Fuerchau
08-07-05, 14:13
Wohl eher nicht.
Das Problem ist hier wohl MS-Access, dass nun mal leider nicht so performant ist.
In der ODBC-Konfig kannst du ggf. noch Komprimierung einschalten.
Aber ich denke eher, dass MS-Access der langsamere ist.

Fuerchau
08-07-05, 19:50
Ach ja noch was:

Wenn man per MS-Access eine Tabelle importieren möchte macht der leider folgendes:
- Lesen der fremden Tabelle in den Hauptspeicher durch füllen eines Recordsets
- Kopieren des Recordsets durch Schreiben in die Access-Tabelle

Dadurch benötigt man 2 x den gesamten Platz der Tabelle im Hauptspeicher !!!!
Da kann ich mir die Performance des PC's geradezu vorstellen (Paging ohne Ende).

Besser ist da schon eine Programmierung mit Server-Cursor Typ Forward beim Lesen, der kostet keinen Platz.
Beim Schreiben sollte so alle 10.000 Sätze das Recordset geschlossen und neu geöffent werden. Dabei sollte allerdings ein "select * from Table where >ungültige Bedingung<" verwendet werden, um ein leeres Recordset zu erhalten. Sonst wird die ganze Tabelle mal eben wieder in den Speicher geladen.

Egal ob man mit DAO oder ADO arbeitet, je mehr Sätze ein Recordset enthält, desto länger dauert ein simples AddNew !

ADO hat sogar noch ein kleines "Feature": Wenn das Recordset zu groß wird (mangels Hauptspeicher) wird eine temporäre Datei angelegt und mitverwendet. Dadurch fällt ein Hauptspeicherengpass gar nicht auf, aber die Performance geht gewaltig in die Knie !

mdhl
11-07-05, 07:38
Hallo Fuerchau,
leider hilf mir das bei meinem Problem nicht direkt weiter, aber trotzdem vielen Dank für die Info, dass es an MS Access liegt, und nicht unbedingt an ODBC.
Folglich müssen wir uns wohl oder übel einen work arround überlegen, dass MS Access dann trotzdem noch performant läuft.
Villeicht gibt es ja eine Idee, auf die ich bisher noch nicht gekommen bin.
Vorschläge nehme ich gerne entgegen.

Viele Grüße
mdhl


Wohl eher nicht.
Das Problem ist hier wohl MS-Access, dass nun mal leider nicht so performant ist.
In der ODBC-Konfig kannst du ggf. noch Komprimierung einschalten.
Aber ich denke eher, dass MS-Access der langsamere ist.

Fuerchau
11-07-05, 08:25
Das kommt jetzt darauf an was du erreichen willst.
Reicht es, die Tabellen verknüpft zu lassen und entsprechende Zugriffe direkt durchzuführen oder benötigst du tatsächlich eine Kopie der Daten ?
DIrektzugriffe sind erheblich einfacher und auch performant !

Für eine Kopie musst du halt eine Modul schreiben.
Am besten dann mit MS-ADO.

Eine Verbindung zur AS/400 mit CursorType=adUseServer sowie einem Select und ForwardOnly-Zugriff. Das kostest keinen nennenswerten Speicher.
Für das Schreiben in MS-Access:

open "select * from table where key=''", so dass auf jeden Fall ein leeres Recordset gebildet wird.
und

if RecordCount>1000 then Requery
AddNew

damit wird das Recordset geleert und du kannst weiter Sätze hinzufügen.

mdhl
11-07-05, 09:18
Vielen Dank,

ich werde mir die definitionen noch genauer anschauen.
Ich gehe davon aus, dass ich eine entsprechende Lösung mit den zuvor gegebenen Hinweisen finden werde.

Viele Grüße
mdhl