AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Problem mit Datensatz Import
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Datensatz Import

Ein Thema von Live5 · begonnen am 10. Okt 2009 · letzter Beitrag vom 12. Okt 2009
Antwort Antwort
Seite 1 von 2  1 2      
Live5

Registriert seit: 10. Okt 2009
8 Beiträge
 
#1

Problem mit Datensatz Import

  Alt 10. Okt 2009, 15:11
Datenbank: Sybase • Version: 7 • Zugriff über: NativeDB
Hallo Leute,

Also ich habe das Problem das ca. 300.000 Datensätze in 1 Stunde Importieren sein sollten.

Die Datenbank Läuft Lokal auf meinem Pc und ich verwende keine Indizies.

Ich verwende die Komponente "NativeDB" und zum Verbinden "TAsaSqlQuery" um alles zu Beschleunigen habe ich
den Cursor Typ auf "actFixedScroll" gestellt.

Ich teile derezeit zb. 20.000 Datensätze auf 5 Threads auf.
Die Threads tragen die die Daten dann in die Datenbank gleichzeitig ein und dafür benötige ich ca. 30 Minuten.

Damit ich 300.000 Datensätze in 1 Stunde schaffe müsste ich im gesammten ca. 40 Threads verwenden jedoch währe die zu Verwalten ein enormer aufwand.

Ich währe für die Hilfe echt dankbar

cu
live5
Coding 4 Fun
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.297 Beiträge
 
Delphi 12 Athens
 
#2

Re: Problem mit Datensatz Import

  Alt 10. Okt 2009, 15:37
Hallo,

Zitat:
Also ich habe das Problem das ca. 300.000 Datensätze in 1 Stunde Importieren sein sollten.
erkläre das mal ein wenig genauer, Datenimport von wo nach wo, Datenformat der Quelle etc.
dann können wir besser helfen.



edit: selbst ohne Thread´s sollte das eigentlich kein Problem sein.

uppps... Wilkommen in der DP
  Mit Zitat antworten Zitat
Live5

Registriert seit: 10. Okt 2009
8 Beiträge
 
#3

Re: Problem mit Datensatz Import

  Alt 10. Okt 2009, 15:54
Es geht um Datanorm5 Daten

eine zeile ist so aufgebaut.:

A;N;Artikelnummer;Text1;Text2;1;50;50000

Und solche 300.000 Artikel sind in ernem Textdatei vorhanden.
Bei den Artikeln werden noch berechneungen vom Preis durchgeführt bevor sie in die Datenbank eingetragen wird.

Ich Lese die Dateie ein unbearbeite diese dann Zeile für Zeile und speicher die daten dann in die Datenbank.

Coding 4 Fun
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.297 Beiträge
 
Delphi 12 Athens
 
#4

Re: Problem mit Datensatz Import

  Alt 10. Okt 2009, 15:58
hmmm...

laut Adam Riese und Eva Zwerg wären das 12 ms je Datensatz. Das wird mit Text parsen und eintragen schon knapp. Laß uns mal ein wenig Zeit zum überlegen

Edit: wie sieht den Dein Code zum Parsen der Datei aus ? Ich würde da ansetzen, da das die meiste Zeit verbraucht.
  Mit Zitat antworten Zitat
Live5

Registriert seit: 10. Okt 2009
8 Beiträge
 
#5

Re: Problem mit Datensatz Import

  Alt 10. Okt 2009, 16:20
Danke mal im Voraus.

Ich lese eine Zeile ein Teile diese bei jedem ";"

Danach erfolgen die Berechnungen und per Sql Query wird dann alles in die Datenbank eingetragen.

Am meisten zeit benötige ich beim Sql Query deshalb habe ich auch mehrere Abfragen zu einer Großen gemacht damit
alles etwas schneller wurde.
Coding 4 Fun
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.297 Beiträge
 
Delphi 12 Athens
 
#6

Re: Problem mit Datensatz Import

  Alt 10. Okt 2009, 16:32
ich habe grad nochmal bei einem Projekt von mir geschaut. Da hatte ich 23 Textdateien einzulesen wo unter dem Strich 45000 Datensätze in der DB landeten. Die Zeilenanzahl in der Textdatei war höher, da der Text "Gruppiert" war. Der Import dauerte grad mal 2 Minuten. Hochgerechnet läßt du irgendwo ne Menge Zeit liegen. Das können wir nur gemeinsam finden, wenn du uns einen Einblick in den Quelltext gewährst

PS: ich arbeite mit Firebird. Liegen da die Unterschiede

wie oft mußt du diesen Import machen ?

edit: gelogen... sind nur 15000 DS in der DB in 2 Minuten. würde aber trotzdem reichen.
  Mit Zitat antworten Zitat
Live5

Registriert seit: 10. Okt 2009
8 Beiträge
 
#7

Re: Problem mit Datensatz Import

  Alt 10. Okt 2009, 17:14
Ok Danke !

Ich poste mal die Dateien für den Import.
Angehängte Dateien
Dateityp: rar import_128.rar (12,9 KB, 13x aufgerufen)
Coding 4 Fun
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.297 Beiträge
 
Delphi 12 Athens
 
#8

Re: Problem mit Datensatz Import

  Alt 10. Okt 2009, 19:03
Ok...ohne das du mich festnagelst. Ich hab weniger Zeit als du gehabt mich damit zu beschäftigen.

folgende Dinge sind mir aufgefallen:

ich denke, daß die meiste Zeit in der AddToDB liegen bleibt.

- du erzeugst für jeden neuen Datensatz eine eigene GUID, könnte das von der DB selbst über einen Generator und Trigger erfolgen ?
- du liest die komplette AsaSQLQuery ein um sie dann nach Feldänderungen mit Append zu schreiben. Für die Überprüfung ob vorhanden reicht ein select count auf die entsprechenden Felder.
- das Schreiben würde ich mit insert into machen und die Werte als Parameter zur Verfügung stellen.
- Ich verstehe nicht, was die Sachen mit dem richViewHelper in der AddToDB für einen Sinn haben. Diese werden mit jeder Zeile mit ausgeführt.
(frmMain.TFrmDatanormImport.richViewHelper.Lines.S aveToStream(strStream)
- Änderungen an den Artikeln mit SQL update statt Modify. Je nach Einstellung der Query werden viel zu viel Überprüfungen durchgeführt.

für den Anfang schon mal ein paar Anregungen.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Problem mit Datensatz Import

  Alt 10. Okt 2009, 19:09
Threads dürften nicht helfen, da die Threads synchronisiert werden müssen. Denn es kann immer nur ein Thread in die Datenbank schreiben.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#10

Re: Problem mit Datensatz Import

  Alt 10. Okt 2009, 22:05
Zitat von haentschman:
folgende Dinge sind mir aufgefallen:
...
- du liest die komplette AsaSQLQuery ein um sie dann nach Feldänderungen mit Append zu schreiben. Für die Überprüfung ob vorhanden reicht ein select count auf die entsprechenden Felder.
Um Gottes willen...
1. Erstell einen Index auf COL_ArtikelNummer.
2. Frage nicht auf 'LIKE' ab.
3. Zum prüfen, ob der Artikel schon existiert reicht ein
SQL-Code:
SELECT COL_ArtikelNummer From <Tabelle>
 WHERE COL_ArtikelNummer='BlaBla'
   AND COL_DataNormLieferant like '%FooBar%-- <<--- So ein Quark
Ohne Index dauert diese Prüfung immer länger.

4. Lerne etwas über 3NF (Außer, die DB-Struktur darf nicht verändert werden. Egal, lerne trotzdem)
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz