Große Datenmenge- wie behandeln?
-
Einmal ein 'Hallo' an alle!
Angenommen ich möchte ein Programm, zB. in C, schreiben welches große Datenmengen verarbeiten sollte (zB. Adressbuch, Mitarbeiterliste oder ...). Wenn ich nun eine Struktur erzeuge mit verschiedenen char - Variablen für Vorname, Nachname usw. und vielleicht um die 6000 Einträge habe belaste ich meinen Arbeitsspeicher und meinen virtuellen Speicher doch sehr stark!?
Welche Methoden bzw. Algorithmen gibt es eine Belastung des Arbeitsspeichers zu verringern?Danke schon mal im vorraus für die Antwort.
-
möglich wäre z.B. auf eine mySql datenbank zuzugreifen
-
sqlite wäre auch eine Möglichkeit.
Aber rechne doch lieber erstmal nach: 6000 solcher Einträge belegen nur ein paar MB, selbst wenn du viele Felder hast.
-
idR brauchst du ja nicht alle gleichzeitig, oder? d.h. du kannst die gerade nicht ver-
wendeten Daten da lassen, wo du sie her hast. Also z.B. in der Datenbank oder auf der
Festplatte.
-
das OS swappt sowieso irgendwann, also... ne verkettete Liste sollte garnicht verkehrt sein
-
c.rackwitz schrieb:
das OS swappt sowieso irgendwann, also... ne verkettete Liste sollte garnicht verkehrt sein
Bei wirklich vielen Einträgen (SEHR vielen) macht es dann keinen Spaß mehr am PC zu sitzen wenn geswapped wird. Dann doch lieber eine DB
-
schneemann schrieb:
Einmal ein 'Hallo' an alle!
hallo schneemann!
Angenommen ich möchte ein Programm, zB. in C, schreiben welches große Datenmengen verarbeiten sollte
dann solltest du aufhören, erstmal c++ lernen und dann gleich wieder anfangen.
(zB. Adressbuch, Mitarbeiterliste oder ...).
tja. hier haben wie den salat. was ist gemeint? adressbuch oder mitarbeiterliste. also sozuagen *eine* datenbanktabelle.
was ist mit verarbeiten gemeint?
a) nie ändern, pro prgrammlauf einen satz suchen?
(telefon-cd)
nimm eine statische hash-table. ich würde sagen, double hashing und eine hute hash-funktion, kannst ja ruhig mehrere ausprobieren und die nehmen, die auf deinen daten am besten ist.b) selten ändern. pro programmlauf einen satz suchen oder ändern oder einfügen oder löschen oder wenige daten.
(private adressdatenbank)
hau bei programmstart alles ins ram und speichere beim ende.b) selten ändern. pro programmlauf einen satz suchen oder ändern oder einfügen oder löschen oder wirklich viele daten.
(ka)
mit memory mapping direkt auf platte arbeiten, statische hashtable hat leicht bessere zugriffzeiten, aber ändern wäre sauteuer. oder machst ne dynamischahashtable, die hat pro datenzugriff bis zu einem plattenzurgriff mehr. oder beb B*-Baum, der ist ungefähr halb so schnell.c) sehr oft ändern, nicht sehr viele daten (also passen gut ins ram)
bei programmstart alle daten laden, bei programmende speichern.dann gibt's noch mischformen. zum beispiel, daß man nur die daensätze lädt, die man anfassen muss, aber sie erst bei programmende speichert.
im ram haste wieder recht freie wahl, welche datenstruktur du nimmst.
und natürlich kannste ne fertige datenbank nehmen.
-
Also da sag ich mal danke an alle für eure Vorschläge!
Werde eure Vorschläge mal in ruhe durchdenken und ausprobieren.
Eine Frage hab ich noch an den 'volkard':'dann solltest du aufhören, erstmal c++ lernen und dann gleich wieder anfangen. '
was meinst du damit? Ehrlich gesagt habe ich eher wenig Lust in c++ und MFC Programme zu schreiben! Und irgendwo habe ich mal gelesen .... keine Ahnung mehr wo ..... daß es nicht üblich oder sogar verpöhnt ist WinApi mit c++ und nicht mit c zu programmieren!?
Danke Euch allen!
-
schneemann schrieb:
Eine Frage hab ich noch an den 'volkard':
'dann solltest du aufhören, erstmal c++ lernen und dann gleich wieder anfangen. '
was meinst du damit?
damit meine ich, daß du nicht bei c bleiben solltest, sondern unbedingt c++ lernen solltest. oder java oder c#. aber bleib nicht bei c. das ist historisch.
Ehrlich gesagt habe ich eher wenig Lust in c++ und MFC Programme zu schreiben!
hab ich auch nie verlangt. du sollst c++ schreiben. und MFC tut weh, wie jeder weiß.
Und irgendwo habe ich mal gelesen .... keine Ahnung mehr wo ..... daß es nicht üblich oder sogar verpöhnt ist WinApi mit c++ und nicht mit c zu programmieren!?
ja. bei leuten, die nur c können aber kein c++.
mach ruhig für die oberfläche wasimmer du magst. die ist mir egal. aber bei den datenstrukturen mußte c++ nehmen. da spielt es seine fähigkeiten voll aus.und du darfst ja ruhig auf mfc verzichten und winapi roh nehmen (ich mach's auch gerne). und auch fopen/fclose statt fstream (ober bitte nen eigenen wrapper drum schreiben). und cout kannste ganz weglassen. aber containerklassen, destruktoren, templates, exceptions, laufzeitpolymorphie, du wirst c++ lieben. und wenn du nicht unüberlegt zu jeder gelegenheit immer nur c++-mittel nimmst, nur weil sie da sind - sondern wenn du auf schnelle schlanke sichere programme bedacht bist, dann sind wir gar nicht so verschieden.
ich sage mal, daß es schlechte ratgeber waren, die dir erzählten, du solltest nur deshalb in der programmiersteinzeit bleiben, weil sie selber noch drin sind.
-
Werde deinen Rat beherzigen.
Danke.