MDB zu XML, Größe eines DataTables im Arbeitsspeicher

27/11/2008 - 12:04 von Michaela Meier | Report spam
Hi,

Ich wàlze gerade eine schwerwiegende Gedankenwolke hin und her, wie
ich mit einer doch recht großen Datensammlung umgehen soll.
Zur Zeit residiert ebendiese in einer Access-DB und besteht aus knapp
50 Tabellen, die alle stark untereinander verknüpft sind und insgesamt
bis zu 250 Tsd Datensàtze (30 MB an "Klartext") enthalten.

Bisher habe ich die mdb-Datei beibehalten, da die dazugehörige
Software nur sehr moderat auf die Daten zugreift und diese deswegen -
außer den (ebenfalls überschaubar großen) Query-Ergebnissen - nicht
zwingend vollstàndig im Arbeitsspeicher pràsent sein müssen.

Nun würde ich die Datenbank gerne in das "unabhàngige" XML-Format
umwandeln, jedoch möglichst weiterhin "auf der Platte" anstatt im RAM
arbeiten.

Alle Beispiele, die ich finden konnte, benutzen Adapter, die sich
komplette DBs in den Speicher ziehen.
Ist es (angesichts der heutigen RAMs) egal, ob man 30 MB extra
draufpackt?
Mit welcher Einlesezeit müßte man beim Programmstart rechnen?
Wie fix liefe damit verglichen ein Direktzugriff (sofern möglich)?

Bevor ich mir die Fummelei antue, ein hübsches Schema zu definieren,
hàtte ich gerne ein paar Antworten ;-)

Danke
 

Lesen sie die antworten

#1 Elmar Boye
27/11/2008 - 15:48 | Warnen spam
Hallo Michaela,

Michaela Meier schrieb:
Ich wàlze gerade eine schwerwiegende Gedankenwolke hin und her, wie
ich mit einer doch recht großen Datensammlung umgehen soll.
Zur Zeit residiert ebendiese in einer Access-DB und besteht aus knapp
50 Tabellen, die alle stark untereinander verknüpft sind und insgesamt
bis zu 250 Tsd Datensàtze (30 MB an "Klartext") enthalten.

Bisher habe ich die mdb-Datei beibehalten, da die dazugehörige
Software nur sehr moderat auf die Daten zugreift und diese deswegen -
außer den (ebenfalls überschaubar großen) Query-Ergebnissen - nicht
zwingend vollstàndig im Arbeitsspeicher pràsent sein müssen.

Nun würde ich die Datenbank gerne in das "unabhàngige" XML-Format
umwandeln, jedoch möglichst weiterhin "auf der Platte" anstatt im RAM
arbeiten.



Welchen _Mehrwert_ versprichst Du Dir davon?

Wenns "nur" um die Unabhàngigkeit von Access / Jet geht,
so gibt es kostenlose Alternativen (z. B. Sqlite)

Alle Beispiele, die ich finden konnte, benutzen Adapter, die sich
komplette DBs in den Speicher ziehen.



Es gibt Ansàtze, die etwas weiter gehen, ein Startpunkt:
<URL:http://en.wikipedia.org/wiki/XML_database>

Wobei soweit ich das beurteilen kann - tiefergehend habe ich mich damit
bisher nicht beschàftigt -, sind die Ansàtze noch weit von dem
entfernt, was relationale Datenbanken - gleich welcher Couleur -
heute leisten.

Und auch wenn man nicht alle Features braucht, so schaden sie
in der Regel nicht. Und die von Dir eingesetzte Jet ist nach
heutigen Maßstàben sehr genügsam.

Ist es (angesichts der heutigen RAMs) egal, ob man 30 MB extra
draufpackt?



Vorsicht, aus den 30 MB wird in Objekten dargestellt, die noch
diverse Verwaltungsinformationen mitschleppen schnell ein Vielfaches.
Und eine 32 Bit .NET Anwendung ist schneller am theoretisch 2 GB
Limit als man denkt (Heap Fragmentation usw).

Und in relationalen Datenbanken steckt nicht umsonst sehr
viel Aufwand im Speichermanagement.

Mit welcher Einlesezeit müßte man beim Programmstart rechnen?



Teste es am besten.
Deine größte Tabelle in XElement (für XLinq) umzuwandeln,
sollte schnell machbar und überprüfbar sein.
Die X-Objekte, die XLinq verwendet, sind von ihrer Struktur
schon mit einem schmalerem Memory-Footprint ausgestattet.

Wie fix liefe damit verglichen ein Direktzugriff (sofern möglich)?



Wirkliche Direktzugriffe kennt XLinq arbeitet nicht.
Vielmehr wird dabei der Baum traversiert, was der
hierarchischen Struktur von XML entspricht.
Das gleiche gilt prinzipiell auch für XPath/XQuery.

Wobei eine tief verschachtelte Struktur nicht so
problematisch ist wie eine flache mit vielen Elementen.

Deine 250TSD Datensàtze würde müssten linear durchsucht
werden. Und ein Index, wie ihn Datenbanken nutzen, um
wieder einen (B)-Baum mit wenigen Zugriffen zu kriegen,
existiert erstmal nicht.

Gruß Elmar

Ähnliche fragen