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
Seite 4 von 7   « Erste     234 56     Letzte »    
Benutzerbild von p80286
p80286

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

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

  Alt 12. Jun 2014, 14:23
Meine Anwendung ist ganz gut vergleichbar mit einem CAD Programm, wenn der Anwender auf den "Male Gegenstand auf Bildschirm, z.b. einen Pkw "
Button drückt dann läuft intern "select * from Tabelle"; soll ich beim Zeichnen des Autos die Reifen dann weglassen ????
Nein sollst Du nicht, aber wenn Du nur die Reifen ändern willst, dann interessiert sich niemand für die Kabelbäume.
Du solltest ggf. mal etwas weiter ausholen was Du erreichen willst, und welche Daten Du hast. Solange Du darauf bestehst 3Mio Datensätze einzulesen, woher kommen die überhaupt?, drehen wir uns nur im Kreis.

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

Registriert seit: 5. Aug 2013
265 Beiträge
 
#32

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

  Alt 12. Jun 2014, 14:35
Meine Anwendung ist ganz gut vergleichbar mit einem CAD Programm, wenn der Anwender auf den "Male Gegenstand auf Bildschirm, z.b. einen Pkw "
Button drückt dann läuft intern "select * from Tabelle"; soll ich beim Zeichnen des Autos die Reifen dann weglassen ????
Nein, aber das Motorrad...

Warum lässt Du in "intern" nicht 'Select * from Tabelle Where <gehört zum Gegenstand>" ablaufen. Es ist kaum vorstellbar, dass wirklich 3 Millionen Bestandteile zu einer Zeichnung gehören.
  Mit Zitat antworten Zitat
bernhard_LA

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

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

  Alt 12. Jun 2014, 14:52
sorry Jungs : das Hinterfragen ob ich wirklich 3 Mio Datensätze brauche ist sinnlos, es sind heute in unserem Problem-Projekt 3 Mio records - können aber auch mal deutlich mehr werden;



Delphi-Quellcode:
   // von ~ 10 Records bis zu 10 Mio .... alles ist technisch möglich
   ///
   aquery.sql.add ('select* from database where material = 'Alu'');


   aquery.open;

   LoopIndex := aquery.recordCount
  for i:= 0 to LoopIndex do
      begin

         ReadSinglerecordFromTable;

         CopySingleRecordIntoObjectList;
      
         aquery.next; // ist natürlich auch enthalten :-)
     end;

   // die ObjectList darf nur durch den verfügbaren Hauptspeicher am Computer begrenzt sein
   // ich brauche alle Daten in der Liste !!!!!!!
   
   MachwasMitderObjectList;

   
   SchreibeObjectListInTabelleZurück,

Geändert von bernhard_LA (12. Jun 2014 um 15:39 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

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

  Alt 12. Jun 2014, 14:58
Das ist nicht dein Ernst, Du liest 3+ Mio Datensätze ein, nur zu ermitteln wieviel es sind?



Delphi-Quellcode:
aQuery.Sql.Text := 'select count(*) from database where material = :material;';
aQuery.Paramters.Params[0].asString := 'Alu';
aQuery.Open;
LoopIndex := aquery.Fields[0].asInteger;
sollte das Selbe machen nur halt schenller und mit minimalen Speicherverbrauch!!!
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

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

  Alt 12. Jun 2014, 15: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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

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

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

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

  Alt 12. Jun 2014, 15: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.138 Beiträge
 
Delphi 11 Alexandria
 
#37

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

  Alt 12. Jun 2014, 15: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 15: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
 
#38

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

  Alt 12. Jun 2014, 16: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 16:10 Uhr)
  Mit Zitat antworten Zitat
Jumpy

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

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

  Alt 12. Jun 2014, 16: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
309 Beiträge
 
Delphi 12 Athens
 
#40

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

  Alt 12. Jun 2014, 16: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
Antwort Antwort
Seite 4 von 7   « Erste     234 56     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 18:46 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