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 wirdNaja was haltet ihr am sinnvolsten??
Oder gibts was besseres??MFG
Maruu
-
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
-
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
Farbeund 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 * PLZnextusw. 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.