AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken MSSQL/ADO + 3 Mio Datensätze , Thread Error
Thema durchsuchen
Ansicht
Themen-Optionen

MSSQL/ADO + 3 Mio Datensätze , Thread Error

Ein Thema von bernhard_LA · begonnen am 11. Jun 2014 · letzter Beitrag vom 13. Jun 2014
Antwort Antwort
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.231 Beiträge
 
Delphi 12 Athens
 
#1

AW: MSSQL/ADO + 3 Mio Datensätze , Thread Error

  Alt 12. Jun 2014, 14:15
Delphi-Quellcode:
   //LoopIndex := aquery.recordCount
  //for i:= 0 to LoopIndex do
  while not aquery.EOF do
      begin

         ReadSinglerecordFromTable;

         CopySingleRecordIntoObjectList;

         aquery.Next;

     end;
Für das Query ist das kein Problem, denn dem kann man ja sagen, daß es die Daten noch im Datenbankserver belassen soll und nur nach und nach die "benötigten" Records nachladen soll.
Aber mit deiner Liste kannst du dennoch an die Grenzen des lokalen Arbeitsspeichers stoßen.

Und nee, im Grunde braucht man die Liste nicht, wenn man die RecNo's der Datensätze nimmt und dann auf das Query zugreift.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (12. Jun 2014 um 14:34 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: MSSQL/ADO + 3 Mio Datensätze , Thread Error

  Alt 12. Jun 2014, 14:23
Wobei ja auc h interessant wäre, was ReadSinglerecordFromTable() genau macht
Markus Kinzler
  Mit Zitat antworten Zitat
bernhard_LA

Registriert seit: 8. Jun 2009
Ort: Bayern
1.124 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: MSSQL/ADO + 3 Mio Datensätze , Thread Error

  Alt 12. Jun 2014, 14:47
Zitat:
Aber mit deiner Liste kannst du dennoch an die Grenzen des lokalen Arbeitsspeichers stoßen.
ist schon klar , darum bin ich auch bereits 32, 64 oder wenn denn sein muss 128 GByte RAM zu spendieren, ich bekomme halt die Krise wenn der ADOTable, ADOQuery .... mir ohne "Workaround" Optionen einen Strich durch die Rechnung machen.


Zitat:
Wobei ja auch interessant wäre, was ReadSinglerecordFromTable() genau macht

ganz einfach :


procedure ReadSinglerecordFromTable()
begin

aClass := TDatabaseClassContent.create;

CopyDBRecord (aClass ); // die meisten Felder der Klasse werden hier 1:1 aus der DB gefüllt

BerechneWas; // ein paar Sachen muss ich aber noch separat berechnen

end;

Geändert von bernhard_LA (12. Jun 2014 um 14:52 Uhr) Grund: ergänzung des Antwort
  Mit Zitat antworten Zitat
-=ZGD=-

Registriert seit: 25. Apr 2006
Ort: Bad Aibling
105 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

AW: MSSQL/ADO + 3 Mio Datensätze , Thread Error

  Alt 12. Jun 2014, 15:03
Ich würde das ja mit
Code:
LIMIT
lösen.

Du kannst dir den Count() der Daten holen und dann den Index immer weiter verschieben. Das ist um einiges besser als x-Millionen Datensätze zur gleichen Zeit..

Edit: MSSQL hat keinen Limit-Befehl wie MySQL, richtig?

Das könnte dir weiterhelfen: http://stackoverflow.com/questions/9...0-in-sqlserver


Schlagt mich nicht, wenn ich auf der falschen Fährte bin..
Stefan Michalk

Geändert von -=ZGD=- (12. Jun 2014 um 15:10 Uhr)
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.733 Beiträge
 
Delphi 6 Enterprise
 
#5

AW: MSSQL/ADO + 3 Mio Datensätze , Thread Error

  Alt 12. Jun 2014, 15:21
Zitat:
Aber mit deiner Liste kannst du dennoch an die Grenzen des lokalen Arbeitsspeichers stoßen.
ist schon klar , darum bin ich auch bereits 32, 64 oder wenn denn sein muss 128 GByte RAM zu spendieren, ich bekomme halt die Krise wenn der ADOTable, ADOQuery .... mir ohne "Workaround" Optionen einen Strich durch die Rechnung machen.


Zitat:
Wobei ja auch interessant wäre, was ReadSinglerecordFromTable() genau macht

ganz einfach :


procedure ReadSinglerecordFromTable()
begin

aClass := TDatabaseClassContent.create;

CopyDBRecord (aClass ); // die meisten Felder der Klasse werden hier 1:1 aus der DB gefüllt

BerechneWas; // ein paar Sachen muss ich aber noch separat berechnen

end;
Das klingt aber nun auch so, das die Daten zeitweilig doppelt im Speicher des Clients liegen, einmal in der Query und dann noch in den 3 Mio. daraus erstellten Objekten.

Wäre es da nicht einfacher sich mit der ursprünglichen Query nur die IDs zu holen und die CopyDBRecord Prozedur entsprechend anzupassen, dass die sich nur den jeweils einen Datensatz mit der aktuellen ID aus der DB holt?
Ralph
  Mit Zitat antworten Zitat
pertzschc

Registriert seit: 29. Jul 2005
Ort: Leipzig
305 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: MSSQL/ADO + 3 Mio Datensätze , Thread Error

  Alt 12. Jun 2014, 15:40
Wobei ja auch interessant wäre, was ReadSinglerecordFromTable() genau macht
Das lesen eines Datensatzes wahrsscheinlich. Bei 3 Mio. würde ich die Laufzeit der Schleife gerne mal sehen.

Wobei dann weiterhin interessant wäre, was MachwasMitderObjectList(); genau macht...
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#7

AW: MSSQL/ADO + 3 Mio Datensätze , Thread Error

  Alt 12. Jun 2014, 15:51
Und das "machwas" auf die DB zu verschieben geht nicht?

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Antwort Antwort


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 06:31 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