Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi viele Generatoren auf einmal "holen" (https://www.delphipraxis.net/86483-viele-generatoren-auf-einmal-holen.html)

hoika 15. Feb 2007 10:46

Re: viele Generatoren auf einmal "holen"
 
Hallo,

Zugriff: Bde (jaja) :=)

alex: genau
gen_id(gen_xxx,20000)

Das war so meine Überlegung.
Ich habe hier allerdings auch noch festgestellt,
dass die TStoredProc nicht prepared wird,
das liegt einfach daran, dass ich eine generische Methode habe,
die basierend auf dem Tabellennamen die richtige SP aufruft.

Das könnte man natürlich ändern,
aber wenn es mit dem Generator viel leichter ist,
lasse ich die generische Methode für "normale" Inserts
und wenn es klemmt, wird das an dieser Stelle geändert.

mkinzler:
solche Sachen wie "Generatorwert" (IBX ?) will ich nicht benutzen,
weil der Plan immer noch ist, mal eine andere DB zu unterstützen.



Heiko

shmia 15. Feb 2007 11:06

Re: viele Generatoren auf einmal "holen"
 
Also ich sehe da keinen Denkfehler, sondern das dürfte das effektivste Verfahren sein.
Wenn sich ein Client also gleich 10 oder 100 Nummern reserviert, dann kann er
ohne weitere Rückfrage entsprechend viele Inserts absetzen.
Sollte der Fall eintreten, dass Client- oder Serverseitig ein Fehler auftritt, sind die Nummern eben verloren, aber das sollte nicht stören.
Auch bei einem Rollback wären alle Inserts weg und damit die gezogenen Nummern verloren.
Es ist aber beim PK nicht zwingend eine lückenlose Folge nötig.

Da auf dem Server kein Trigger benötigt wird, entfällt hier auch diese Serverseitige Belastung.
Noch effizienter wird die Sache, wenn blockweise Insert-Anweisung gesammelt abgesetzt werden.
Damit entfällt der x-fache Netzwerkverkehr.

Wenn du also 100 Nummern reserviert, dann 100 Inserts für die Mastertabelle + die Inserts für die Detailtabelle generierst (in StringListe sammeln) erreichst du die maximal mögliche Einfügegeschwindigkeit.

hoika 15. Feb 2007 12:38

Re: viele Generatoren auf einmal "holen"
 
Hallo,

"" Wenn du also 100 Nummern reserviert, dann 100 Inserts für die Mastertabelle + die Inserts für die Detailtabelle generierst (in StringListe sammeln) erreichst du die maximal mögliche Einfügegeschwindigkeit. ""

Meinst du das mit blockweise ?


Heiko

shmia 15. Feb 2007 13:58

Re: viele Generatoren auf einmal "holen"
 
Zitat:

Zitat von hoika
"" Wenn du also 100 Nummern reserviert, dann 100 Inserts für die Mastertabelle + die Inserts für die Detailtabelle generierst (in StringListe sammeln) erreichst du die maximal mögliche Einfügegeschwindigkeit. ""
Meinst du das mit blockweise ?

Ja, anstatt jeden Insert einzeln auf die Reise zu schicken, werden die Inserts gesammelt und dann im Block abgeschickt.
Das bedeutet aber, dass man nicht den bequemen Weg über Datasets nehmen kann (Query.Edit; query['Feld'] := ...; query.Post;) sondern man muss die Inserts als Strings zusammenbauen.
Über Connection.Execute() kann man die gesammelten Inserts absetzen.
Die Anweisungen werden durch einen Strichpunkt getrennt. (DBMS abhängig)
Nicht jedes DBMS erlaubt mehrfache SQL-Anweisungen (MS-SQL-Server: ja, MS-Access: nein, IB: ???).

Nur mit dieser Technik konnte ich z.B. 1.3 Mio Datensätze innerhalb von ~ 40 Min in eine MS SQL-Server Datenbank einfügen.

mkinzler 15. Feb 2007 14:00

Re: viele Generatoren auf einmal "holen"
 
Zitat:

Nicht jedes DBMS erlaubt mehrfache SQL-Anweisungen (MS-SQL-Server: ja, MS-Access: nein, IB: ???).
IB/FB: Ja ; über BDE ?

hoika 15. Feb 2007 14:02

Re: viele Generatoren auf einmal "holen"
 
Hallo,

das mit ms-sql hatte ich (im dotnet-magazin) auch schon mal gelesen.
FB kann das ???
Mit welcher Komponente denn ?

Ich schwanke noch zwischen FIBPlus und UIB.


Heiko

mkinzler 15. Feb 2007 14:22

Re: viele Generatoren auf einmal "holen"
 
Mehrere Inserts am Stück geht nicht mit einet Query-Komponent sondern mit einer Script-Kompo (TIBSript, TZSQLProcessor, TIBCScript, TUIBScript). Die Syntax könnte natürlich von der des MSSQL abweichen.

hoika 15. Feb 2007 16:00

Re: viele Generatoren auf einmal "holen"
 
Hm,

interessant ist das schon,
mal sehen.


Heiko


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:17 Uhr.
Seite 2 von 2     12   

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