Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

AW: Speicherbedarf bei Datenbank Query

  Alt 2. Sep 2014, 11:29
Da es hier ja um Speicherbedarf und Performance geht kann man zunächst mal generell festhalten, dass Performance und Speicherbedarf sich umgekehrt proportional verhalten und wie immer gibt es Ausnahmen von der Regel.

Betrachten wir einmal den Fall, wo die Daten im Speicher liegen und für jedes Feld soviel Platz reserviert ist, wie dort maximal gespeichert werden kann. Jetzt haben wir sehr viel Platz verbraucht, allerdings sind die Zugriffe wesentlich schneller, da der Speicherbereich für jede Zeile mit einer einfachen Formel berechnet werden kann.
Code:
ZeilenSpeicher = Zeilenlänge * (Zeile-1)
Mit den Feldern geht das fast analog, da man jetzt nur noch die Länge der vorherigen Felder dazuzählen muss.

Liegen die Daten jetzt aber speicheroptimiert vor (die Felder nur so lang wie nötig), dann muss für jede Zeile die aktuelle Zeilenlänge bestimmt werden. Vereinfachen kann man das durch eine Längenangabe vor jeder Zeile, die dann aufaddiert wird. Es bleibt aber dabei, dass der Verwaltungsaufwand steigt und damit die Performance sinkt.

Wenn Änderungen an den Daten erfolgen, dann wird das insgesamt dramatischer, denn einfach so kann man eben nicht etwas im Speicher "dazwischen einfügen". Hier müssen dann ganze Blöcke verschoben werden. Ist der Platz aber schon reserviert, dann kann der einfach dort hineingeschrieben werden.

Einzig bei der Übertragung kommt es dann auf die Größe an. Hier gibt es unterschiedliche Möglichkeiten (Komprimierung, schlankes Format, ...) um die Performance zu erhöhen, wobei genau das bei sehr kleinen Paketen eher kontraproduktiv ist und bei grossen Paketen die Geschwindigkeit erhöht.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat