Empfehlenswerte Datenstruktur

Ich muss irgendwann mal folgende Datenstruktur in eine DB umsetzen und grübel gerade über die optimale Gestaltung der Relationen. Bei einem verschachtelten struct weiss ich gerade nicht weiter. Vielleicht hat ja einer von euch eine Idee?

Hier ist die vorhandene Struktur, jedes Object hat folgende Properties (neben vielen vielen anderen):

S = { starttime(double),
endtime(double),
wavelet_approx(double[13][n]),
wavelet_detail(double[13][n]) 
}

Der Hacken an der Sache ist, das in den 2 Array n nicht konstant ist, sondern in jeder Zeile beliebige Werte annehmen kann. Da sollen nämlich Zeitserien drin gespeichert werden. Postgres kann aber nur rechteckige Matritzen speichern, ich müsste also entweder den Überhang mit Nullen auffüllen oder für jedes n eine eigene Spalte anlegen.

Das Auffüllen halte ich für wenig sinnvoll, weil dann zuviel Speicher verschenkt wird. Die Arrays in jeder Zeile sind von wenige zehn n bis n = hunderttausende groß. Also die erste Zeile immer am größten und die letzte Zeile immer sehr klein.

Hat jemand eine elegantere Idee, als eine extra Tabellen-Spalte pro Matrix-Zeile anzulegen?

Grüße,
Domski

Du könntest aus wavelet_approx und wavelet_detail jeweils eine 1:n Tabelle mit Foreign Keys gestalten. Beim Auslesen kannst du dann alle Werte für einen Datensatz gleich mitholen … oder statistische Berechnungen direkt in der DB durchführen.

Das wird nichts, hab ich vergessen zu sagen. Die Reihenfolge 1…13 muss unbedingt erhalten bleiben. Das wäre ja sonst zu einfach :wink:

Ja und? Dann bekommen deine Werte zusätzlich zum Foreign Key zusätzlich einen Zähler, in dem die Nummer drin steht. Dann kann man das sauber sortieren und wieder auslesen.

Dein Beispiel ist geradezu geschaffen, die Struktur zu normalisieren.

Loch in Brett vorm Kopf bohr Danke!

Man man man, wird Zeit, das ich mal vom Schlauch runter geh.

Hallo Domski,

willst Du mit der Datenbank die Wavelets nur verwalten oder auch innerhalb der Datenbank komplexe mathematische Berechnung mit den Wavelets ausführen?



mfg

fristo

Die Wavelet-Transformation ist nur ein kleiner Teil von dem ganzen Algorithmus. In der DB werden nur Ergebnisse und Zwischenergebnisse gespeichert, um später schneller Zugriff darauf zu haben und nicht alles nochmal rechnen zu müssen.

Da irgendeine Logik in die DB zu packen, wäre etwas verfehlt, denke ich.

Hallo Domski,

ja, so sehe ich das auch. Vorsichtshalber habe ich aber mal nachgefragt. Es gibt ja so allerlei Experten.

Ich würde die Wavelets im Binary Data Type (bytea) speichern. Dein Problem “n” entfällt, sizeof (double) ist bekannt und es wäre die optimale Speicherart.



mfg

fristo

Ja, Ehemalige Perten gibts leider wie Sand am Meer :smiley:

Aber der Tip mit dem Byte-String ist genau das, was ich brauche. So wirds gemacht!