Laden...

Alternative multidimensionale Datenbak

Erstellt von Mst0203 vor 5 Jahren Letzter Beitrag vor 5 Jahren 900 Views
M
Mst0203 Themenstarter:in
2 Beiträge seit 2018
vor 5 Jahren
Alternative multidimensionale Datenbak

Hallo,

ich habe ein Projekt in dem ich viele Daten generiere und in einer multidimensionalen Datenbank speichern möchte um später wieder darauf zuzugreifen.

Die Daten bestehen aus verschiedenen numerischen Datentypen (im Grunde int und float).

Mein erster Ansatz wäre einen multidimensionalen object Array zu verwenden und beim Zugriff die Daten wieder in die jeweiligen Typen (int, float) umzuwandeln.


object[, , ,] array = new object[200, 50, 2000, 20];

Das Problem ist, dass die Anzahl der Reihen und Spalten dynamisch ist (in diesem Beispiel 2000, 20) und das der Array bei der Initialisierung mit 0 gefüllt wird (es sollen nur die Einträge gefüllt werden welche ich bestimme)

Meine Frage wäre nun ob ihr mir eine Alternative nennen könntet, da ich ich denke, dass die Umwandlung von object in die jeweiligen Datentypen speicherlastig ist und ich nicht weis wie die Performance von so großen Arrays ist (vermutlich bis zu 50000 Zeilen).

Vielen Dank schonmal,

Grüße

3.003 Beiträge seit 2006
vor 5 Jahren

Benutze eine Liste aus flachen generischen Objekten, die aus den Koordinaten im n-Space bestehen.

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

4.942 Beiträge seit 2008
vor 5 Jahren

Ich denke, da mußt du eine andere Datenstruktur benutzen, denn dein Beispiel-Array würde ja allein aus 200502000*20 = 400.000.000 Werten bestehen, d.h. bei mindestens 4 Byte also zusammen 1.6 GB. Und bei 50.000 in einer Dimension also nochmal um einen vielfachen Faktor mehr.

Das Stichwort dafür lautet: "sparse matrix", s. z.B. Generic Sparse Array and Sparse Matrices in C#

W
955 Beiträge seit 2010
vor 5 Jahren

... und flyweight pattern.

M
Mst0203 Themenstarter:in
2 Beiträge seit 2018
vor 5 Jahren

Vielen Dank für die Anzworten!

Ich werde mich mal etwas mit dem Thema "Sparse Array" auseinandersetzen, wobei ich ich auf die schnelle noch nicht ganz verstehe worin der Unterschied zu einem mehrdimensionalen Array liegt außer dass die Größe der Matrix dynamisch ermittelt wird.

Vielleicht hätte ich noch erwähnen sollen dass die ersten beiden Integer Einträge in meinem Beispielarray


object[, , ,] array = new object[200, 50, 2000, 20];

also 200 ,50 nur als Schlüsselwörter dienen um den verbleibenden 2D Array anzusprechen.

Z.B.
mit 200, 50 spreche ich 2000, 20 an
mit 180, 30 spreche ich 1600, 10 an

Es ist allerdings nicht der Fall dass alle Array Dimensionen von 0 bis 200 bzw. 0 bis 50 belegt sind.

Vielleicht könnt ihr mir da noch einen alternativen Tipp geben!

Vielen Dank schonmal,
Grüße