Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Große Menge an Daten speichern (https://www.delphipraxis.net/27910-grosse-menge-daten-speichern.html)

cheatzs 17. Aug 2004 12:03


Große Menge an Daten speichern
 
Hi Leute,

hab ein dynamisches Array das im Moment Daten über Dateien speichert (Record von Größe, Hash, ...).
Nun benötige ich bei meinem Projekt ca. 50000-1000000 solcher Dateien (diese sind nur wenige Bytes groß). Daran lässt sich nichts rütteln.

Beim Testen des Programmes ist beim Laden der Daten in das Array kein Fehler aufgetreten, jedoch beim Zugriff auf Elemente mit dem Index größer als ca. 5000.

Meine Frage ist ob man die Daten überhaupt im Array speichern sollte, vielleicht eher in einer Datenbank (SQL) oder in einer eigens erstellten Datei oder in einer verketteten Liste?
Vielleicht gibt es auch noch andere Möglichkeiten???

Danke im Vorraus

Bye

franktron 17. Aug 2004 12:07

Re: Große Menge an Daten speichern
 
Eine soöche anzahl sollte man natürlich nicht in einem Array Speichern.

Eine DB ist gut sie ist meist sehr schnell und einfach zu händeln.(Währe gut wenn man D Pro. oder höher hat)

cheatzs 17. Aug 2004 12:12

Re: Große Menge an Daten speichern
 
Bist du sicher, dass die Daten schneller verwaltet werden???
Ich mein, das Programm muss sich ja erstmal zur Datenbank verbinden, alles eintragen, sich wieder Trennen. Dann werden die ganzen Daten auf die Platte geschrieben .... später wieder gelesen...

Beim Array kann ich doch direkt auf den Speicherbereich mit Hilfe des Index zugreifen.

Dannyboy 17. Aug 2004 12:13

Re: Große Menge an Daten speichern
 
Hallo cheatzs,
die Lösung Deines Problems geht aus Teilen Deines Postings hervor.
Eine Menge von einzelnen Dateien mit kleinen Datenmengen ist
vielleicht tatsächlich unpraktisch. Das hängt allerdings auch
vom Problem selbst ab. Wenn die Dateien Daten vom gleichen Typ haben,
kannst Du sie natürlich in eine Datenbank importieren. Bedenke bitte,
dass "Methoden" wie Arrays, Listen, etc., die zur Laufzeit Deine
50000-1000000 Daten beinhalten würden Deinen Arbeitsspeicher sehr
belasten.
Daher meine Frage:
Benötigst Du diese Menge an Daten zur gleichen Zeit? :gruebel:
Wenn ja, dann ist Dein Vorschlag mit der Datenbank eine gute Lösung,
wenn nicht, dann kannst Du Deine Daten aus den Dateien teilweise in
Konstrukte wie Arrays, dyn. Listen, etc. übertragen. D.h. die Daten,
die Du zu einer bestimmten Zeit benötigst, schnappst Du Dir aus den
Dateien. Benötigst Du diese Daten nicht mehr, dann lässt Du die Daten
wieder frei (ich denke da an Filestreams).
Es hängt also davon ab, auf wie viele Daten Du zu gleichen Zeit zugreifen möchtest.

DANNYBOY

cheatzs 17. Aug 2004 12:17

Re: Große Menge an Daten speichern
 
Hi,

also ich benötige die Daten alle zur selben Zeit, weil ich nicht vorhersehen kann, wann welche Daten gebraucht werden.
Also werde ich mich mal nach Datenbanken umschauen...

Danke

Bye

Dannyboy 17. Aug 2004 12:26

Re: Große Menge an Daten speichern
 
Entscheident ist, wann Du welche Menge an Daten lädst.
Du musst abwegen können, welche Daten einen schnellen Zugriff
benötigen und diese Daten dann in Dein Array packen, um den Zugriff
zu beschleunigen. Die Verbindung zur Datenbank geschieht lediglich ein
Mal, nämlich beim Start des Programms. Der Zugriff auf die Daten der
Datenbank ist allemal schneller als aus den 50000-1000000 Dateien zu
lesen, mal abgesehen vom Öffnen und Schließen der Dateien.
50000-1000000 verschiedene Dateien bedeuten 50000-1000000 verschiedene
Plattenzugriffe --> Das dauert. Ich kenne nicht die Daten in Deinen
Dateien, aber wenn ich das richtig verstehe und Du selbst sagst, dass es
Dir um Performace geht, dann solltest Du die Daten Deiner 50000-1000000
Dateien in eine einzige Datei packen. Dann kannst Du (Du hast ja gesagt,
dass Du die Daten zur gleichen Zeit benötigst) sie in Dein Array laden.
Bedenke aber, dass Dein Array niemals größer werden kann als der Dir
zur Verfügung stehende RAM.

franktron 17. Aug 2004 12:35

Re: Große Menge an Daten speichern
 
Also wenn man alle Daten auf einmal (und schnell) braucht dann sollte man die in einem Stream speichern das geht auch sehr schnell.

Problem ist nur wenn die Grösse der Daten sich ändert also die Grösse nich immer gleich ist den dann kann man nich im Stream suchen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:03 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz