![]() |
Datenbank: Sybase • Version: 7 • Zugriff über: NativeDB
Problem mit Datensatz Import
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 :wink: cu live5 |
Re: Problem mit Datensatz Import
Hallo,
Zitat:
dann können wir besser helfen. :hi: edit: selbst ohne Thread´s sollte das eigentlich kein Problem sein. :gruebel: uppps... Wilkommen in der DP :dp: |
Re: Problem mit Datensatz Import
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. :freak: |
Re: Problem mit Datensatz Import
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 :zwinker: Edit: wie sieht den Dein Code zum Parsen der Datei aus ? Ich würde da ansetzen, da das die meiste Zeit verbraucht. |
Re: Problem mit Datensatz Import
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. |
Re: Problem mit Datensatz Import
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 :zwinker:
PS: ich arbeite mit Firebird. Liegen da die Unterschiede :gruebel: wie oft mußt du diesen Import machen ? edit: gelogen... :oops: sind nur 15000 DS in der DB in 2 Minuten. würde aber trotzdem reichen. |
Re: Problem mit Datensatz Import
Liste der Anhänge anzeigen (Anzahl: 1)
Ok Danke !
Ich poste mal die Dateien für den Import. |
Re: Problem mit Datensatz Import
Ok...ohne das du mich festnagelst. Ich hab weniger Zeit als du gehabt mich damit zu beschäftigen. :zwinker:
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. :wink: |
Re: Problem mit Datensatz Import
Threads dürften nicht helfen, da die Threads synchronisiert werden müssen. Denn es kann immer nur ein Thread in die Datenbank schreiben.
|
Re: Problem mit Datensatz Import
Zitat:
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:
Ohne Index dauert diese Prüfung immer länger.
SELECT COL_ArtikelNummer From <Tabelle>
WHERE COL_ArtikelNummer='BlaBla' AND COL_DataNormLieferant like '%FooBar%' -- <<--- So ein Quark 4. Lerne etwas über 3NF (Außer, die DB-Struktur darf nicht verändert werden. Egal, lerne trotzdem) |
Re: Problem mit Datensatz Import
Also ich muss Statistik Router machen(150 Standorte)..pro Tag 1500 Datensaetze..nutze dafuer Absolute Database..Berechnung pro Standort dauert ca. 3 Minuten.
|
Re: Problem mit Datensatz Import
Guten Morgen... :hi:
Zitat:
|
Re: Problem mit Datensatz Import
Mahlzeit !
Dake für eure Hilfe bin grad mitn im Umbauen. Also die Threads sind fürn Hugo viel arbeit für nichts leider.... Bei der Abfrage ob Artikel vorhanden benötige ich zwei Felder denn es wäre möglich das zwei Verschiedene Lieferentane einen Artikel mit der gleichen Artikel Nummer haben :roll: |
Re: Problem mit Datensatz Import
Dazu verknüpft man normalerweise die Art.Nr. mit der Lief.Nr. Somit wird sie dann eindeutig.
|
Re: Problem mit Datensatz Import
Zitat:
Es bringt z.B. beim Einfügen in eine MS SQL Server DB ungefähr eine Beschleunigung um Faktor 5. 1,2 Mio Datensätze (7 Felder) werden so in ~ 25Min importiert. Wenn man mit einem Insert gleich mehrere Datensätze einfügen kann, dann kann man noch mehr rausholen.
SQL-Code:
Leider beherrscht nicht jede Datenbank diese erweiterte Syntax.
INSERT INTO Tabelle(Feld1, Feld2) VALUES(WertA, WertB), VALUES(WertA2, WertB2),...
|
Re: Problem mit Datensatz Import
Danke habe bereits alles auf Update bzw. Insert Into umgebaut und Versuche jetzt mal den Praxis Test mit den 300.000 Datensätzen.
:shock: |
Re: Problem mit Datensatz Import
Liste der Anhänge anzeigen (Anzahl: 1)
So habe jetzt das gnaze fertig umgebaut und mit 300.000 Datensätzen versucht zu Importieren.
Ich bin zwar schon um einiges schneller benötige jedoch noch 3 Stunden dafür. Ist es eigentlich möglich 300.000 Datensätze in einer Stunde zu Importieren ? Oder habe ich in meien Source Code einen enormen Zeitfresser ? Anbei sind auch die neuen Dateien ich bedanke mich mal im Voraus für die Hilfe. |
Re: Problem mit Datensatz Import
Hallo,
du benutzt dtmDataBase.TDtmDataBase.AsaSQLQuery mehrfach mit unterschiedlichen SQL-Text. Nimm für jede Abfrage eine eigene Query, nimm Parameter und Prepare die Query vor dem ersten Aufruf. Gibt es denn keinen SQL-Monitor für deine Komponenten ? Da kannst du dir schön ansehen, wieviele Prepare's übers Netz gehen, nämlich für den Datensatz mind 2 Stück (habs nur überfolgen). Aussderde würde ich das "Feststellen, ob vorhanden" per Select Count(*) machen (Auslesen per Query.Fields[0].AsInteger) Dann wird nur eine Zahl zurückgegeben und nicht der komplette Datensatz. Heiko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:45 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz