Bestmögliche Speicherung von Datensätzen?



  • Hallo!

    kurz zur Erläuterung meines Problems:
    Ich hab 2 Datenbanken, mein Programm soll Daten aus der einen DB auslesen
    und in die 2te DB schreiben. Die Schnittstellen zur DB bekomm ich hin das ist
    kein Problem, ich hab nur ein Problem wie ich die Daten zwischenspeichern soll.
    Es handelt sich um ca 20-30 Variablen von denen ich jeweils ungefähr 1-500 Spiechern muss. Nun hab ich eine Klasse die die Abfrage von der ersten DB realisert und eine Klasse die die Daten in die 2te DB schreibt.

    Meine Frage ist nun, wie speichere ich am Besten die Daten zwischen, das heisst wo leg ich die Daten ab, wenn die erste Klasse die Daten abgefragt hat, bis dann diue 2te Klasse die Daten wieder in die 2te DB schreibt. Überlegt hab ich mir mal folgende Methoden:

    - in den Klassen leg ich jeweils 20 Pointer von meinen Variablen an und mach dann eine verkettete Liste
    - ich mache Arrays was aber vom Speicherpplatz bei großen Datenmengen problematisch werden kann, da ja der komplette Speicher hintereinander und nicht wie in der Verketteten Liste Variabel angelegt wird
    - ich erstell ne Struktur und übergeb diese per Pointer an meine Klasse die dann auch wieder via Verkettete Liste voll gemacht wird

    Naja was haltet ihr am sinnvolsten??
    Oder gibts was besseres??

    MFG

    Maruu


  • Mod

    Hallo

    wieso speicherst du denn die Daten zwischen (hat das einen besonderen Grund)

    MfG
    Klaus



  • Hi!

    Naja ich muss die Datensätze teilweise noch verändern, also bestimmte Sortierungen machen, Zeichenketten anfügen usw. da ist es fast nicht zu vermeiden die Datensätze zwischenzuspeichern.

    MFG

    Maruu



  • Hi,

    die Felder lassen sich nicht satzweise zusammenstellen?
    Und wieso Vorsortierung? Sortieren kann die DB selbst...

    Und wenn es sich schon nicht in einem Rutsch machen läßt, warum fügst Du nicht erst die 'Rohdaten' ein, und machst den Rest per Update?



  • Das Problem ist auch das ich z.B. Die Daten einlesen muss dann muss ich sie in irgend einem Fenster ausgeben, der User selektiert dann die die er wieder in die zweite DB schreiben will und wie soll ich das deiner meinunfg nach machen???
    Es ist einfach so das ich die Daten irgendwo lokal im RAM ablegen muss und dann nur einen bestimmten Teil bearbeiten oder verändern und was auch immer mit machen muss und diesen dann wieder weiter schreiben.
    Dazu war einfach die Fraghe wie ich die Daten am besten im Ram ablege?? Per Array, per Verkettete Liste in ner Struktur oder per Verketteter Liste in nem Objekt/Klasse, oder andere Alternativen??

    MFG

    Maruu


  • Mod

    Hallo

    wenn du die Daten mittel SQL laden tust dann hast du sie doch so wie du sie brauchst

    zB kopiert du alle Daten in die neue DB statt speichern loescht du dir nicht angewaehlten Daten

    MfG
    Klaus



  • Ok dann muss ich ein bisschen weiter ausholen.
    Ich hole die Daten nicht wirklich aus einer Datenbank sondern
    bekomme sie per HTML Quelltext.
    Das bedeutet ich rufe eine Seite im Internet ab, davon
    bekomm ich dann einen Quelltext der z.B. folgendermaßen aussieht:

    Thomas...Maier...Holzweg 12...Westheim!!!Ingried...Schmidt...Tonweg 1...Dortmund

    und so weiter. Das bedeutet ich hab jetzt eine Klasse die diesen Text auswertet/ausplittet, also gibt es 4 Variablen:
    Vornamem, Name, Strasse, Ort
    Als Trennzeichen ist "..." festgelegt, als Trennzeichen zum nächsten Datensatz ist "!!!" festgelegt. So nun muss ich die Daten also Trennen und dann in den Variablen ablegen damit ich sie dem User anzeigen kann bzw. in die nächste Datenbank speichern kann(die dann aber wirklich eine SQL Datenbank ist). Wollte igendlich euch das verfahren ersparen wie ich die Daten bekomm aber evt. ist es jetzt ersichtlich warum ich erstmal die ganzen Datensätze speichern muss um sie dann weiterverarbeiten zu können. Würde ich dass nicht machen müsste ich jedesmal von vorne den kompletten text aufsplitten und analysieren.
    So ich hoffe ihr könnt mir ein paar Tipps geben.

    MFG

    Maruu



  • Ich würde das jetzt mal ganz einfach so machen:
    Ne Klasse Datensatz erstellen, die den Namen, Adresse etc. als Felder enthält, da das ja scheinbar statisch bzw. immer vorhanden ist.
    Dann ganze viele Objekte erstellen (aus den Daten halt) und die in nen Vector hängen.

    Falls es für sowas eine bessere Lösung gibt, wäre ich sehr daran interessiert, da ich Daten die so ähnlich aufgebaut sind bisher immer so gespeichert haben 😉



  • Hallo Maruu,

    wäre es nicht trotzdem einfacher, die Daten aus dem HTML zuerst in eine temporäre Tabelle zu schreiben und diese dann so weit als möglich aufzubereiten und dann satzweise dem User zu präsentieren und in die endgültige Tabelle zu schreiben?

    Wenn nicht: Wieso hast Du 2 Klassen definiert? Eine sollte doch reichen. Daten auf einen Rutsch aus dem HTML einlesen. Notwendige Änderungen vornehmen, den User auswählen lassen, alle nicht ausgewählten Objekte löschen und die restlichen speichern. Ich würde die Verkettung als Teil der Klasse machen (also innerhalb der Klasse Zeiger auf nächstes Objekt, vielleicht auch Zeiger auf vorhergehendes Objekt) und die Sortierung bereits beim Einfügen in die Liste durchführen. Auch würde ich die Aufbereitung der Daten so früh wie möglich durchführen. Außerdem würde ich nur die Objekte erzeugen, die wirklich benötigt werden, also nicht auf Verdacht schon mal Objekte anlegen, obwohl noch gar nicht bekannt ist, wieviele benötigt werden.



  • Jo so hab ich mir das auch gedacht, das ich innerhalb der Klasse bzw. des Objektes dann ne Verkettete Liste mit den einzelnen Variablen mach.
    Das Thema das ich die Daten erst in ne Tabelle Schreiben soll ist ein bisschen problematisch da es sich um ein Produktivsystem handelt wo halt nicht einfach so mal zwischendurch die Daten rein können und dann halt wieder gelöscht/verändert werden. Zum Thema 2 warum 2 Klassen:
    Ich finde es einfach übersichtlicher 2 Klassen zu benutzen, da man so ganz genau trennen kann wer für was verandwortlich ist. Außerdem will ich evt. den Code später in DLL´s auslagern um leichter Updates beim User durchführen zu können.
    Nun hab ich noch ne Frage, ich realisiere die Variablen als Verkettete Liste in meinem Objekt. So und mach eine Basisiklasse die nur die Variablen beinhaltet. Außerdem schreib ich vor die Variablen static so das alle Objekte auf die gleichen Variablen zugreifen. Nun Ererbe ich diese Basisiklasse mit meinen 2 Klassen also Daten aus dem HTML Code holen und Daten in DB schreiben. Greifen dann diese Beiden Klassen auch jeweils auf die gleichen Variablen zu??? Weil dann hätte ich kein Problem mit dem Übergeben der Verketteten Listen also den Variablen???

    MFG

    Maruu



  • Maruu schrieb:

    Ich finde es einfach übersichtlicher 2 Klassen zu benutzen

    Widerspricht aber dem ++ in C++, schließlich ist das doch einer der Kernpunkte in C++: Objektorientiertes Programmieren. Was Du da vorhast, klingt eher nach einem Mischmasch zwischen (strukturiertem) C und (objektorientiertem) C++.

    Maruu schrieb:

    ...die Daten erst in ne Tabelle Schreiben soll ist ein bisschen problematisch da es sich um ein Produktivsystem handelt...

    Ich sehe da zwar kein Problem, eine temporäre Tabelle zu erzeugen und anschließend wieder zu löschen...

    Maruu schrieb:

    Nun hab ich noch ne Frage, ich realisiere die Variablen als Verkettete Liste in meinem Objekt. So und mach eine Basisiklasse die nur die Variablen beinhaltet. Außerdem schreib ich vor die Variablen static so das alle Objekte auf die gleichen Variablen zugreifen. Nun Ererbe ich diese Basisiklasse mit meinen 2 Klassen also Daten aus dem HTML Code holen und Daten in DB schreiben. Greifen dann diese Beiden Klassen auch jeweils auf die gleichen Variablen zu??? Weil dann hätte ich kein Problem mit dem Übergeben der Verketteten Listen also den Variablen???

    Das mußt Du mir näher erklären. Versteh ich so nicht.



  • Also das mit der temporären Tabelle ist leider nicht möglich da ich keinne zuätzliche Tabelle erstellen kann, es ist eine feste Tabellenstruktur in der ich nix ändern kann und auch keine Rechte dazu hab.

    So zum anderen Thema ich erkläre es nochmal.

    Ich hab mir gedacht ich erstelle eine Basisklasse die folgende Variablen im geschützten Bereich enthält:

    static char * Name
    static char * Vorname
    static char * Ort
    static char * PLZ
    ...

    So ansonsten enthält die nix, keine Methoden garnix. Nun hab ich 2 weitere Klassen und denen vererbe ich die Basisiklasse so das die 2 weiteren Klassen auch die ganzen Variablen wie oben haben und dann halt noch ihre eigenen Variablen und Methoden.
    Nun ist die Frage, wenn ich vobn jeder der 2 Klassen, die von der Basisklasse geerbt haben, ein Objekt erstelle also z.B.
    Klasse_1 Objekt1;
    Klasse_2 Objekt2;

    greifen die dann intern auf die gleichen Variablen zu, also wenn Objekt1 irgendwas in die Variable Name schreibt, kann das Objekt2 dann auch auslesen???
    Das static vor den Variablen macht ja normalerweiße das alle Objekte auf die gleichen Variablen zugreifen, nur gilt das noch wenn diese vererbt wurden??

    MFG

    Maruu



  • Maruu schrieb:

    Das static vor den Variablen macht ja normalerweiße das alle Objekte auf die gleichen Variablen zugreifen, nur gilt das noch wenn diese vererbt wurden??

    Wenn dem so wäre, könntest Du nur einen einzigen Datensatz definieren und in allen Objekten wären die gleichen Daten enthalten und eine Änderung an einem Objekt würden alle anderen Objekte gleich mit ändern. Wenn ich Dich diesmal richtig verstanden habe.



  • genau so hab ichd as gemeint, dann müsste ich nämlich die Variablen von einem Objekt nicht in das andere Objekt übergeben, nur weiß ich nicht ob das auch noch nach der Vererbung in unterschiedlichen klassen gilt.
    Weisst du das??

    MFG

    Maruu



  • Das "static" bedeutet, das für alle Objekte die Variable die gleiche ist. Das heißt:

    Ich habe eine Klasse Auto. Darin ist eine Variable static int count. Bei jedem Aufruf des Konstruktors wird dieses count jetzt um eines erhöht.

    Wenn ich nun 2 Autos erstelle:

    Auto* auto1 = new Auto();
    Auto* auto2 = new Auto();
    

    und abfrage

    auto1->count;
    auto2->count;
    

    Liefert mir das beide male "2"! Heißt, das static erzeugt eine Klassevariable und keine Objektvariable.

    greifen die dann intern auf die gleichen Variablen zu, also wenn Objekt1 irgendwas in die Variable Name schreibt, kann das Objekt2 dann auch auslesen???

    Sollte eigendlich klappen. Nur mit dem Nachteil, das es egal ist, wieviele Objekte du hast, du kannst immer nur einmal Name, etc. speichern. Es wird ja immer in der Klasse (nicht dem Objekt) gespeichert und die Klasse gibts nur einmal.



  • ja nun ist es aber so das es ja 2 verschiedene Klassen sind. Sozusagen eine Basisklasse Auto mit den Variablen:
    Tempo
    Farbe

    und dann die 2 Klassen LKW und SPORTWAGEN die jeweils die 2 Variablen von Auto erben.

    und wenn ich nun ein Objekt von LKW und eins von SPORTWAGEN erstellen dann sind das ja eigendlich 2 verschiedene Klassen oder beziehen die sich dann auf die Klasse Auto wenns um die Variablen Tempo und Farbe geht??

    MFG

    Maruu



  • Probier's doch einfach aus. Ich weiß es auch nicht. ABER die Verwendung von static widerspricht Deiner Aussage, dass Du alle 'Datensätze' zwischenspeichern willst. Du kannst so nur noch einen Datensatz haben!



  • Ja, laut meinem Verständnis von Vererbung sollte es egal sein, ob du LKW->Farbe oder Auto->Farbe oder Sportwagen->Farbe sagst. Es sollte sich dann immer auf Auto beziehen.

    Aber wie schon so oft gefragt: Was bringt dir das?
    Du kannst jetzt viele viele Autos erstellen, die aber alle die gleiche Farbe haben. Das ist doch unsinn. Du willst doch viele viele Autos mit verschiedener Farbe haben.



  • So jetzt bin ich wieder zurück von der Arbeit.
    Also naja ich hab da ein bisschen rumgedacht aber wahrscheinlich
    ist es nicht
    die beste Lösung. und zwar wollte ich innnerhalb des Objektes eine Verkettete Liste anlegen also z.B. so:
    static int * PLZ
    static int * PLZnext

    usw. anstatt eine Verkettete Liste mit Objekten zu machen die jeweils die ganzen Variablen enthalten. Naja wird wohl besser sein eine Verkettete Liste mit Objekten zu machen anstatt die Verkettete Liste im Objekt anzulegen oder??

    MFG

    Maruu



  • Ein großes fettes JA. 😉

    EDIT: Das heißt unter der Voraussetzung, dass die Datensätze komplett in einer Tabelle landen. Wenn es sich um mehrere Zieltabellen (eigene Tabelle für PLZ/Ort, z.B.) könnte man diese Strukturen 'nachbauen'. Ob sich solch ein Aufwand lohnt sei mal dahingestellt. Normalerweise ist es weniger Aufwand, dies beim Speichern eines Datensatzes zu realisieren.


Log in to reply