Speichern als "Quasi-Datenbank"



  • Hallo,

    bei einem Projekt verwende ich im Moment für meine Datensätze eine verkettete Liste mit Pointern und so.
    Beim Durchsuchen nach den Daten laufe ich alle Daten durch bis zum gewünschten Eintrag.
    Das dauert u. U. bei im Moment 20000 Datensätzen relativ lange.
    Nun meine Frage.
    Gibt es irgendwelche Komponenten zur Kapsellung von Daten.
    Ich kann zwar die Suche umprogrammieren aber das ist irgendwie nicht so der Hit (weil aufwändig, ...).
    Wie speichert ihr eure Daten so ab?

    Gruß
    Freddy



  • Warum das Rad neu erfinden? Viele SQL-Datenbanken haben wunderbare Sortier- und Sucheigenschaften und sind außerdem noch schnell!

    Gruß
    Al



  • Hi,

    das hängt sehr von deinen gespeicherten Daten ab. Lassen sie sich sortieren? Dann scheint mir eine binäre Suche geeignet.

    Was speicherst du denn?

    Gruß

    Martin



  • Also ich speichere Kundendaten.
    Wie meinst Du das mit "binäre Suche"?

    SQL möchte ich nicht benutzen, da man dies dann extra noch beim Kunden installieren muss (oder ODBC Konflikte, ...).
    SQL ist zum Teil auch Lizenzpflichtig oder Open Source (dann muss man aber event. ganzes Projekt veröffentlichen), ...

    Wie macht ihr das?

    Danke für eure Hilfe?

    Gruß
    Freddy



  • Habe jetzt mal bei Google nach so einer "binären Suche" gesucht.
    Aber ich habe keinen blassen Schimmer, wie ich dies in meine Verkettete Liste integrieren soll.
    Im Moment durchlaufe ich alle Datensätze, bis Pointer->SucheBegriff = gewünschtem Suchbegriff, dann Schleifenende.
    Das dauert unter Umständen...

    Hat jemand ein Tipp?



  • Hi,
    speicher die Datensätze in eine Struktur oder klasse.

    Dann bezutze sowas:
    http://www.c-plusplus.net/forum/viewtopic.php?t=39469
    um die Datensätze in die Datei zu schreiben und wieder auszulesen.

    std::list oder ein vector sind dafür gut geeignet.

    EIne DB wäre aber bessser 😉



  • Freddy# schrieb:

    Habe jetzt mal bei Google nach so einer "binären Suche" gesucht.
    Aber ich habe keinen blassen Schimmer, wie ich dies in meine Verkettete Liste integrieren soll.
    Im Moment durchlaufe ich alle Datensätze, bis Pointer->SucheBegriff = gewünschtem Suchbegriff, dann Schleifenende.
    Das dauert unter Umständen...

    vermutlich hat jeder Kunde eine eindeutige Kundennummer. Dann könntest du zusätzlich zu deiner bisherigen Struktur ein sortiertes Array mit Kundennummer und Pointer auf das entsprechende Kundenobjekt verwalten. Innerhalb der Kundennummer kann man dann binär Suchen und gelangt zur entsprechenden Adresse des Kundenobjekts.

    Warum nicht gleich die Kunden in einem Array oder Vector speichern?

    Gruß

    Martin



  • in ein Vector oder list würde man die Liste anfangs nach kundennummer sortieren. Dann kann man schnell suchen. AUsserdem kann man zum Beispiel ein vector partitionieren. Zum Beispiel nach Anfangsbuchstaben.



  • martin_b schrieb:

    vermutlich hat jeder Kunde eine eindeutige Kundennummer. Dann könntest du zusätzlich zu deiner bisherigen Struktur ein sortiertes Array mit Kundennummer und Pointer auf das entsprechende Kundenobjekt verwalten. Innerhalb der Kundennummer kann man dann binär Suchen und gelangt zur entsprechenden Adresse des Kundenobjekts.

    Das ist eine gute Idee. Ich habe die Daten bisher in einem Strukt gespeichert. So habe ich sie auch auf Platte gespeichert. (fopen, also quasi in C).
    Hoffentlich dauert das sortieren und neusortieren nicht jedes Mal zu lange. Am besten mit Bubblesort "von Hand" oder gibts da andere Mittel.

    martin_b schrieb:

    Warum nicht gleich die Kunden in einem Array oder Vector speichern?

    Habe die Daten jetzt schon als struct und will eigentlich net alles umbauen.

    AndreasW schrieb:

    in ein Vector oder list würde man die Liste anfangs nach kundennummer sortieren. Dann kann man schnell suchen. AUsserdem kann man zum Beispiel ein vector partitionieren. Zum Beispiel nach Anfangsbuchstaben.

    Mit Vektoren kenne ich mich net so aus. Ist das so was wie ein Array? Kann man da auch suchen mit?

    DANKE FÜR EURE REGE BETEILIGUNG!

    Freddy



  • vector und list aus der stl sind dynamsiche Arrays.

    ein verwendungsbeispiel mit strings findest du im bereits gepostetetn link.

    Wei man mit list und vector umgeht findet man in jedem guten c++- tutorial oder buch.

    Natürlich kann man damit auch sortierenm, suchen oder partitionieren.....



  • Uuuihh. Das mit den Vectoren hört sich gut an.
    Was ich auf den ersten Blick gesehen habe, echt brauchbar.
    Weiß jemand, wenn man damit sucht, wie schnell so was im Vergleich zu einem gewöhnlichen "Durchlaufen" aller Einträge ist?

    Gruß
    Freddy


Anmelden zum Antworten