AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Große Datenmengen richtig verarbeiten bzw. Out of Memory

Große Datenmengen richtig verarbeiten bzw. Out of Memory

Ein Thema von Monday · begonnen am 10. Jul 2018 · letzter Beitrag vom 14. Jul 2018
Antwort Antwort
Seite 3 von 3     123
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
5.953 Beiträge
 
Delphi 7 Personal
 
#21

AW: Große Datenmengen richtig verarbeiten bzw. Out of Memory

  Alt 12. Jul 2018, 23:04
Identische Komponenten, aber unterschiedliche Datenbanken können, wenn auch seeeeeehr selten, zu solchen Problemen führen.
Wo Du es beschreibst...gleiche DB, gleiche Komponente, zwei unterschiedliche ADO-Treiber

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

Registriert seit: 14. Sep 2005
370 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#22

AW: Große Datenmengen richtig verarbeiten bzw. Out of Memory

  Alt 13. Jul 2018, 08:48
Diese Unart alles zu holen kam mit Access auf resp. hat Access den Trend verstärkt * zu nehmen anstatt konkrete Datenmengen zu definieren.

In weiter Folge wird kein Wert mehr darauf gelegt ob ein Join Kriterium ein Integer ist usw...

Peu a peu wird's langsam.

Access ware eine der ersten DBs die den Spaltentyp aufgrund der Analyse von ein paar Datensätzen hat geraten.




select id,*
Brauchst Du wirklich alle Felder der Tabelle?

Das könnte schon das [/DELPHI]
  Mit Zitat antworten Zitat
MichaelT

Registriert seit: 14. Sep 2005
370 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#23

AW: Große Datenmengen richtig verarbeiten bzw. Out of Memory

  Alt 13. Jul 2018, 09:03
In Ergänzung: Es bietet sich in solchen Fällen über Arrays im Mittel ganz performant auf Datenmengen zugreift.

Wir haben die Arraysize bis zu einem Limit bei jedem Fetch verdoppelt bis das Limit hinter dem keine Geschwindigkeitszugewinn mehr zu holen war.

Zumindest auf Oracle und SQL Server hat die 'Strategie' sehr gute Ergebnisse geliefert egal wieviele Sätze in den Tabellen gespeichert waren.

Ich habe zu dem Zweck ein Histogramm zur Werteverteilung vom MS SQL Server gezogen und dann immer eine möglichst gleich große Anzahl von Zeilen abgeholt.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
376 Beiträge
 
Delphi 7 Professional
 
#24

AW: Große Datenmengen richtig verarbeiten bzw. Out of Memory

  Alt 13. Jul 2018, 16:26
Identische Komponenten, aber unterschiedliche Datenbanken können, wenn auch seeeeeehr selten, zu solchen Problemen führen.
Wo Du es beschreibst...gleiche DB, gleiche Komponente, zwei unterschiedliche ADO-Treiber

Gruß
K-H
Exakt.

Wenn man mal bei DB-Zugriffen "ungewöhnliches" Verhalten seitens seines Delphiprogrammes beobachtet:

Es kann sehr hilfreich sein, sich die Datenbankverbindung und die Treiber anzuschauen / anzupassen, statt im Programmquelltext mehr oder weniger verzweifelt nach Workarounds um festgestellte Probleme zu suchen.

Früher (zu BDE-Zeiten) konnte es durchaus hilfreich sein, beim Zugriff auf Oracle auch deren Treiber zu nehmen und nicht den von Microsoft, der (damals?) auf den Systemen schon vorhanden war.

Keine Ahnung, wie sich das bis heute so entwickelt hat, aber die Fehlermöglichkeiten zwischen eigenem Programm und Datenbank sollte man nie ausklammern.

@MichaelT

select * from ist eine Unsitte, die verboten gehört. Es wird nur das selektiert, was man auch benötigt -> kleinstmögliche Ergebnismenge, sowohl in Bezug auf die ausgewählten Spalten als auch auf die ausgewählten Zeilen.

Alles zu holen und dann im Programm nur das benötigte zu verarbeiten ist einfach nur schlecht.
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
2.223 Beiträge
 
Delphi 2010 Enterprise
 
#25

AW: Große Datenmengen richtig verarbeiten bzw. Out of Memory

  Alt 13. Jul 2018, 21:45
select * from ist eine Unsitte,..
..
Alles zu holen und dann im Programm nur das benötigte zu verarbeiten ist einfach nur schlecht.
[/quote]

Unsitte, nicht unbedingt
Alles zu holen ist tatsächlich schlecht.

Wenn hinter dem from eine definierte Datenquelle hängt (view), die Spalten und Zeilen wie gewünscht eingrenzt, finde ich es nicht problematisch.
Spaß macht es, wenn man die Datenquelle ändert und "Select *" in der Anwendung einfach die zusätzlichen (oder weniger) Daten liefert.
Dazu gehört allerdings eine eigene Feldverwaltung.
Gruß, Jo
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
376 Beiträge
 
Delphi 7 Professional
 
#26

AW: Große Datenmengen richtig verarbeiten bzw. Out of Memory

  Alt 14. Jul 2018, 14:27
Wenn hinter dem from eine definierte Datenquelle hängt (view), die Spalten und Zeilen wie gewünscht eingrenzt, finde ich es nicht problematisch.
Spaß macht es, wenn man die Datenquelle ändert und "Select *" in der Anwendung einfach die zusätzlichen (oder weniger) Daten liefert.
Dazu gehört allerdings eine eigene Feldverwaltung.
Naja, prinzipiell hast Du ja recht, aber, wenn einer eine identische Tabelle, 'ne identische View erstellt, aber "nur" die Spalten im Create in 'ner anderen Reihenfolge angibt, kannst Du bereits die ersten Probleme bekommen. i := qry.fields[1].AsInteger könnte schon scheitern, weil die hier ursprunglich erwartete Spalte eventuell eine andere Position bekommen hat und wir hier den Inhalt einer Zeichenkette bekommen und nicht den in Spalte 1 erwarteten Integer.

Und wenn man statt * die benötigten Spalten angibt, schreibt man zwar mehr, aber wenn davon eine Spalte "verlustig" gehen sollte, knallt das SQL, die Query beim Open, und nicht erst ein eventuell viel später erfolgender Zugriff auf die "verschwundene" Spalte.

Mag es halt, wenn Fehler möglichst nah an der Fehlerursache auftreten und wenn eine mögliche Fehlerursache im SQL liegen kann, dann möchte ich, dass das SQL mir "um die Ohren fliegt" und nicht erst die Verarbeitung der erhaltenen, aber nicht so erwarteten, Ergebnismenge.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 16:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2018 by Daniel R. Wolf