AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Firebird Import aus Textdatei extrem langsam
Thema durchsuchen
Ansicht
Themen-Optionen

Firebird Import aus Textdatei extrem langsam

Ein Thema von globetrotter77 · begonnen am 13. Sep 2009 · letzter Beitrag vom 18. Sep 2009
Antwort Antwort
Seite 1 von 7  1 23     Letzte »    
globetrotter77

Registriert seit: 16. Jan 2009
Ort: Nürnberg
236 Beiträge
 
Delphi 10.3 Rio
 
#1

Firebird Import aus Textdatei extrem langsam

  Alt 13. Sep 2009, 23:16
Datenbank: Firebird embedded • Version: 2.1 • Zugriff über: per TSQLQuery
Hallo zusammen!

Ich habe ein massives Problem beim Import von Daten aus einer Textdatei in eine Firebird-DB.
Die Laufzeit ist schlicht und einfach katastrophal.
Für je 100 Datensätze mit gerade mal 5 lumpigen Textfeldern benötigt das Programm ca. 1 Sekunde.
Macht bei ca. 110000 Datensätzen also 1100 Sekunden bzw. fast 20 Minuten.
Das Lesen der Daten inkl. Split der einzutragenden Felder sowie Aufbau eines passenden INSERT-Statements benötigt gerade mal 32 Sekunden.
Die gesamte Zeit scheint daher alleine von einem einzigen SQL-Statement pro Satz aufgefressen zu werden.
Woran kann das liegen?
Wäre für jede Idee dankbar ...

Gruß

globetrotter77
  Mit Zitat antworten Zitat
globetrotter77

Registriert seit: 16. Jan 2009
Ort: Nürnberg
236 Beiträge
 
Delphi 10.3 Rio
 
#2

Re: Firebird Import aus Textdatei extrem langsam

  Alt 13. Sep 2009, 23:37
oder ist das etwa normal, dass es so lange dauert?
liegt es an Firebird oder an der TSQLQuery-Komponente?
in der vorherigen Version habe ich noch mit der leider ja hoffnungslos veralteten BDE gearbeitet und durchaus vernünftige Laufzeiten erreicht.

hat jemand Erfahrung mit Datenimport in Firebird?
wie macht man's geschickterweise? und richtig schnell?
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#3

Re: Firebird Import aus Textdatei extrem langsam

  Alt 14. Sep 2009, 01:04
Was ist TSqlQuery ? Faktor 10-100 ist allerdings nicht ungewöhnlich, sofern WinApi Funktionen verwendet werden. Memo, Listbox, Stringgrid etc. Die Aktualisierung / Anzeige dauert da ewig. 8)
Gruß
Hansa
  Mit Zitat antworten Zitat
globetrotter77

Registriert seit: 16. Jan 2009
Ort: Nürnberg
236 Beiträge
 
Delphi 10.3 Rio
 
#4

Re: Firebird Import aus Textdatei extrem langsam

  Alt 14. Sep 2009, 01:13
ist schon klar, dass manche Funktionen ewig dauern, aber bei ist der Unterschied tatsächlich reduzierbar auf die Ein-/Ausblendung von
Delphi-Quellcode:
        
        with DM_User.SQLQueryTemp do
        begin
          with SQL do
          begin
            Clear;
            Add(sqltxt);
          end;
          ExecSQL(true);
        end;
Gibt es eine andere Komponente, mit der man direkte SQL-Statements abgeben kann?
Ich gebe zu, dass ich mich da nicht besonders auskenne ... habe früher immer die BDE und Paradox benutzt und war eigentlich immer zufrieden ... nachdem die aber mittlerweile so richtig veraltet ist, wollte ich mal anders rangehen ... leider nur mit mässigem Erfolg
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#5

Re: Firebird Import aus Textdatei extrem langsam

  Alt 14. Sep 2009, 01:27
Kombination von Clear und Add ist schon gut.
Gruß
Hansa
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Firebird Import aus Textdatei extrem langsam

  Alt 14. Sep 2009, 01:31
Vielleicht hilft dir ja...
Code:
CREATE TABLE tabelle EXTERNAL FILE 'file.txt' (...);
weiter.

Add: Oder du baust dir ein SQL-Statement, dass alle INSERTs auf einmal durchführt...
SQL-Code:
INSERT INTO tabelle
SELECT FIRST 1 feld1, feld2, ... FROM tabelle
UNION
SELECT FIRST 1 feld1, feld2, ... FROM tabelle
:
:
  Mit Zitat antworten Zitat
globetrotter77

Registriert seit: 16. Jan 2009
Ort: Nürnberg
236 Beiträge
 
Delphi 10.3 Rio
 
#7

Re: Firebird Import aus Textdatei extrem langsam

  Alt 14. Sep 2009, 01:38
über external file habe ich auch schon nachgedacht, aber ich habe das Problem, dass ich davon ausgehen muss, dass doppelte Schlüssel vorkommen ... wie geht der Import via external file damit um?
im Augenblick löse ich das durch ein try-except-Konstrukt ...
und wie definiere ich in einem external file Datumswerte?
hat jemand Erfahrung?
  Mit Zitat antworten Zitat
globetrotter77

Registriert seit: 16. Jan 2009
Ort: Nürnberg
236 Beiträge
 
Delphi 10.3 Rio
 
#8

Re: Firebird Import aus Textdatei extrem langsam

  Alt 14. Sep 2009, 01:41
Zitat von omata:
Add: Oder du baust dir ein SQL-Statement, dass alle INSERTs auf einmal durchführt...
SQL-Code:
INSERT INTO tabelle
SELECT FIRST 1 feld1, feld2, ... FROM tabelle
UNION
SELECT FIRST 1 feld1, feld2, ... FROM tabelle
:
:
wie gesagt, ich habe eine Textdatei und keine Tabelle
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Firebird Import aus Textdatei extrem langsam

  Alt 14. Sep 2009, 01:45
Zitat von Hansa:
Kombination von Clear und Add ist schon gut.
blödsinn...

Mach es so...
Delphi-Quellcode:
  SQLQueryTemp.SQL.Text:=sqltxt;
  SQLQueryTemp.ExecSQL(true);
Zitat von globetrotter77:
...ich habe das Problem, dass ich davon ausgehen muss, dass doppelte Schlüssel vorkommen...
Lege die Tabelle ohne Primärschlüssel an...
CREATE TABLE tabelle EXTERNAL FILE 'file.txt' (feld1 INT, feld2 CHAR(10)); ...und mache danach einen Import in eine andere Tabelle...
SQL-Code:
INSERT INTO richtige_tabelle
SELECT DISTINCT feld1, TRIM(feld2)
FROM tabelle
Da hier die Feldinhalte eine konstante Größe (mit Leerzeichen gefüllt) haben müssen, kannst du in diesem Schritt auch gleich die Zeichenketten trimmen.

Zitat von globetrotter77:
wie gesagt, ich habe eine Textdatei und keine Tabelle
Das ist mir bewusst, du sollst ja auch das Statement zusammenbauen, der FROM-Teil mit gleicher Tabelle + First 1 ist nur ein Trick.
  Mit Zitat antworten Zitat
globetrotter77

Registriert seit: 16. Jan 2009
Ort: Nürnberg
236 Beiträge
 
Delphi 10.3 Rio
 
#10

Re: Firebird Import aus Textdatei extrem langsam

  Alt 14. Sep 2009, 01:51
Zitat von omata:
Zitat von Hansa:
Kombination von Clear und Add ist schon gut.
blödsinn...

Mach es so...
Delphi-Quellcode:
  SQLQueryTemp.SQL.Text:=sqltxt;
  SQLQueryTemp.ExecSQL(true);
macht keinen Unterschied, jedenfalls nicht, was die Laufzeit angeht
Zitat von omata:
Zitat von globetrotter77:
...ich habe das Problem, dass ich davon ausgehen muss, dass doppelte Schlüssel vorkommen...
Lege die Tabelle ohne Primärschlüssel an...
CREATE TABLE tabelle EXTERNAL FILE 'file.txt' (feld1 INT, feld2 CHAR(10)); ...und mache danach einen Import in eine andere Tabelle...
SQL-Code:
INSERT INTO richtige_tabelle
SELECT DISTINCT feld1, TRIM(feld2)
FROM tabelle
auch schon darüber nachgedacht, aber ich muss die doppelten Schlüssel zumindest protokollieren, daher ist eine Einzelsatzbearbeitung leider erforderlich ... und mit BDE hat das auch gut funktioniert ... wieso geht das hier nicht mehr?
Zitat von omata:
Da hier die Feldinhalte eine konstante Größe (mit Leerzeichen gefüllt) haben müssen, kannst du in diesem Schritt auch gleich die Zeichenketten trimmen.

Zitat von globetrotter77:
wie gesagt, ich habe eine Textdatei und keine Tabelle
Das ist mir bewusst, du sollst ja auch das Statement zusammenbauen, der FROM-Teil mit gleicher Tabelle + First 1 ist nur ein Trick.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 7  1 23     Letzte »    


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 08:35 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