Autor Beitrag
mexx
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1183



BeitragVerfasst: Do 17.08.06 12:56 
Guten Tag,

Einleitung
da sich keiner findet meine Freeware zu testen und mit mir verschiedene Problem zu erörtern, mache ich diesen Beitrag auf, um ganz geziel auf logische und technische Probleme zu kommen.

Idee
Ein variables Programm, welches die Daten aus einer FireBird in XML-Files schreibt.

Was ist bisher da?
Der Erfolg scheint zu greifen nah. Hier einmal ein Ausschnitt einer XML-File einer Tabelle, welche Zeitmodelle einer Zeitwirtschaft enthält.

ausblenden XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
 <?xml version="1.0" ?> 
- <PERSONAL_ZEITMODELL VALUE_TYP="U_INTEGER">
 - <KEY11 SCHLUESSELNAME="ZEITMODELL" SCHLUESSEL="11">
   <ZEITMODELL VALUE_TYP="U_INTEGER">11</ZEITMODELL
   <BEZEICHNUNG VALUE_TYP="U_CHAR_60">Angestellte 42 h Hainchen</BEZEICHNUNG
   <BESCHREIBUNG VALUE_TYP="U_TEXT">Hainchen</BESCHREIBUNG
   <SOLLZEIT_TAG VALUE_TYP="U_DOUBLE_PRECISION">0,4</SOLLZEIT_TAG
   <UEZEIT_RUNDEN_AUF VALUE_TYP="U_DOUBLE_PRECISION">1,15740740740741E-5</UEZEIT_RUNDEN_AUF
   <RUNDUNG_NG VALUE_TYP="U_DOUBLE_PRECISION">0</RUNDUNG_NG
   <RUNDUNG_NK VALUE_TYP="U_DOUBLE_PRECISION">0</RUNDUNG_NK
   <RUNDUNG_VG VALUE_TYP="U_DOUBLE_PRECISION">0</RUNDUNG_VG
   <RUNDUNG_VK VALUE_TYP="U_DOUBLE_PRECISION">0</RUNDUNG_VK
   <VERGUETUNGSART VALUE_TYP="U_SMALLINT">1</VERGUETUNGSART
   <SCHICHTEN VALUE_TYP="U_INTEGER">1</SCHICHTEN
   </KEY11>
  </PERSONAL_ZEITMODELL>


bestehendes Problem
Ziel ist es ja, die Baumstruktur der XML-File so zu nutzen, dass jeder Schlüssel eine Knoten darstellt. Doch wie macht man dies Variabel?

Ich habe den Namen und die Anzahl der Schlüssel auf einer Tabelle. Das ist schon mal gut.

Meine Idee war: Eine große case-Anweisung zu nehmen, die 10 Einträge enthält. In den Anweisungsblöcken werden die Knoten geschaffen und die Selektanweisung auf die Daten des jeweiligen Schlüssels gemacht. Aber diese Methode finde ich sehr unvorteilhaft und unübersichtlich.

Wie kann man das Erstellen der Knoten, welches die Schlüssel darstellt, und die SQL-Anweisung auf die Daten des Schlüssels variabel machen?

Moderiert von user profile iconChristian S.: Code- durch XML-Tags ersetzt

_________________
Das Unsympathische an den Computern ist, dass sie nur ja oder nein sagen können, aber nicht vielleicht.
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Mo 28.08.06 08:37 
Ich verstehe gerade Dein Vorgehen nicht so ganz. Du willst also in einem Ast jeweils den Tabellennamen und in x weiteren Ästern darunter die Daten des Primary Keys und in diesem Ast dann die restlichen Datensatz-Daten speichern?

Das wäre doch dann kein Problem, Du brauchst ja nur bei jedem neuen Datensatz einfach nur einen neuen Ast zu öffnen und darunter dann die restlichen Felder anzulegen.

BTW: Ich würde die Meta-Daten (also Daten über den Feldtyp) in einem extra Ast (z.B. Meta) speichern, sonst hast Du redundante Daten ohne Ende. Außerdem hast Du dann die Möglichkeit beide Teile separat zu behandeln, also z.B. einmal Datenbankstruktur erstellen und einmal Daten importieren.
mexx Threadstarter
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1183



BeitragVerfasst: Mo 28.08.06 09:37 
Für jeden Key in der Tabelle wird ein Knoten erstellt. Unter dem Knoten dann entweder der nächste Knoten, dessen Priorität eine Stufe drunter steht, oder wenn es der letzte Knoten/Key der Tabelle ist, die Daten inkl. Metadaten.

Das Problem bestand darin, die Inhalte der letzten Knoten/Schlüssel zu selektieren, um sie dann in den Knoten einzutragen. Anhand er Schlüssel, muss eine SQL-Anweisung erzeugt werden, die alle vorhanden Schlüssel-Werte durchläuft. Die selektierten Daten werden mit einer While-Schleife in den erstellten Knoten geschrieben. Auch das Erstellen dieser Knoten musste dementsprechend variabel sein.

Es funktioniert auch alles. Es genügt ein Auswählen der Tabelle und los gehts. Die Schlüssel werden gesucht, die SQL-Anweisung zum selektieren der Inhalte auf die Schlüssel wird erzeugt, die Knoten werden estellt, die Inhalte eingefügt, die Metadaten eingefügt. Am Ende steht eine XML-File deren Baumstruktur die logischen Verknüpfungen in der Tabelle wiederspiegelt. Logische Verknüpfungen meine ich die Schlüssel und Schlüsselproiritäten.

Aber, die XML-File wird im laufenden Prozess im Arbeitsspeicher geschrieben. Sie wird erst gespeichert, wenn die Tabelle vollständig ausgelesen ist. Ist die Tabelle aber sehr groß(>100.000 Datensätze) wird nicht nur die XML-Datei sehr groß. Auf meinen Testserver sind nur 1GB RAM und <2GB Plattenplatz. Sowohl RAM als auch virtueller Speicher sind mitten im Prozess voll und somit kann die Anwendung nicht weiter machen. Also, wenn man eine große Tabelle mit vielen Schlüsseln und Inhalten tranferieren will, braucht man eine hohe Plattenkapazität um den virtuellen Arbeitsspeicher ausnutzen zu können. Oder kennst Du eine andere Lösung der Speicherverwaltung?

_________________
Das Unsympathische an den Computern ist, dass sie nur ja oder nein sagen können, aber nicht vielleicht.
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 03.02.07 17:34 
ja als flat file behandeln und selbst einlesen.

das mit dem speicher und der ganzen datei einlesen, ist systembedingt. da ein grundsatz für 'n xml parser so lautet, dass wenn ein fehler in der xml datei ist, ist das ganze abzulehnen. somit muss er das ganze erst mal einlesen. ggf. findest du 'ne andere implementation, welcher nur den zu bearbeitenden bereich im speicher behält. ich kenn zur zeit keinen...