AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi viele Generatoren auf einmal "holen"
Thema durchsuchen
Ansicht
Themen-Optionen

viele Generatoren auf einmal "holen"

Ein Thema von hoika · begonnen am 14. Feb 2007 · letzter Beitrag vom 15. Feb 2007
Antwort Antwort
Seite 2 von 2     12   
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#11

Re: viele Generatoren auf einmal "holen"

  Alt 15. Feb 2007, 10:46
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
Heiko
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#12

Re: viele Generatoren auf einmal "holen"

  Alt 15. Feb 2007, 11:06
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.
Andreas
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#13

Re: viele Generatoren auf einmal "holen"

  Alt 15. Feb 2007, 12:38
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
Heiko
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#14

Re: viele Generatoren auf einmal "holen"

  Alt 15. Feb 2007, 13:58
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.
Andreas
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#15

Re: viele Generatoren auf einmal "holen"

  Alt 15. Feb 2007, 14:00
Zitat:
Nicht jedes DBMS erlaubt mehrfache SQL-Anweisungen (MS-SQL-Server: ja, MS-Access: nein, IB: ???).
IB/FB: Ja ; über BDE ?
Markus Kinzler
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#16

Re: viele Generatoren auf einmal "holen"

  Alt 15. Feb 2007, 14:02
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
Heiko
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#17

Re: viele Generatoren auf einmal "holen"

  Alt 15. Feb 2007, 14:22
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.
Markus Kinzler
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#18

Re: viele Generatoren auf einmal "holen"

  Alt 15. Feb 2007, 16:00
Hm,

interessant ist das schon,
mal sehen.


Heiko
Heiko
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 00:27 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