Probleme komplexere Messwertspeicherung

darki2002

Neuer Benutzer
Beiträge
2
Hallo miteinander,

ich versuche momentan für ein Projekt eine Messwertspeicherung von einem verteilten, untergliederten Sensornetz.
Zum Aufbau:
Ich will mehrere Devices unterschliedlicher Typen haben (hier exemplarisch WLAN_Board, Wired_Board ...).
1.) Hier schon mein erstes Problem mit der Umsetzung:
Eine Tabelle mit Devices, welche alle die gleichen allgemeinen Eigenschaften haben. Allerdings sollen abhängig vom Typ noch Merkmale hinzukommen. Wie setze ich das in Tabellen um?
Ich denke an eine Device_List mit allen verfügbaren Geräten und für jedes Device einen Eintrag in einer anderen Tabelle (z.B. Device 1,2,5 in WLAN_Boards, Device 3,4 in Wired_Boards). Aber wie komme ich dann aus der Device_List auf die jeweilige Tabelle? Muss ich hier noch eine Typeninformation hinterlegen oder geht das eleganter?

2.) Ich möchte gerne Untergliedern:
Jedes Device hat eine unbestimmte Anzahl an Sensormodulen. Jedes Sensormodul hat einige Werte/Einstellungen gespeichert und besitzt unter sich verschiedene Sensorkanäle/Einzelsensoren, welche auch wieder Werte/Einstellungen haben.
Ich will also später pro Device in der Deviceliste eine Table mit Sensormodulen machen und pro Sensormodul jeweils eine Tabelle mit Sensorkanälen. Ist es vernünftig das so umzusetzen?
ER.jpg

3.) Messwerte... Würdet ihr hier lieber mehrere Tables anlegen, also:
- x Tables -> 1 Table je Device
- x*y Tables -> 1 Table je Sensormodul pro Device
- x*y*z Tables -> 1 Table je SensorKanal pro Sensormodul (pro Device)

oder lieber zusammenfassen, also:
- x Tables -> 1 Table je Device
- x Tables -> 1 Table pro Device für Sensormodule
- x*y Tables -> 1 Table je Device pro Sensormodul für Sensorkanäle

4.)
Ich will noch irgendwie Alarme (bei Überschreitung eines eingestellten Tresholds) und ÄnderungsEvents (wenn z.B. ein Treshold geändert wird) aufzeichnen. Da das nicht so oft vorkommen wird/sollte dachte ich an eine kleine Anzahl an Tables (z.B. nur pro Device). Allerdings weiss ich nicht wie ich dort festhalten soll, vom wo etwa ein Alarm kommt.
Beispiel:
Der erste Alarm wird von einem Device ausgelöst (etwa zu hohe Stromaufnahme) und der zweite von einem Sensorkanal (zu hohe Temperatur...). Wie könnte ich das in der Tabelle hinterlegen?


Umgesetzt werden soll die Datensammlung und Deviceverwaltung auf einem ARM-Board auf einer SDKarte. Es soll etwa alle 5 Minuten ein Messwert gespeichert werden und nach einiger Zeit (z.B. 1Jahr) will ich die Werte komprimieren (also also aus alle 5 Minuten nur mehr einen Durchschnittswert pro Stunde oder Tag speichern).
Als Datenbank dachte ich an SQLite, da ich kein Server-Client Modell brauche und mir den Overhead sparen will. Alternativ hatte ich noch BerkeleyDB gesehen, aber da SQLite sehr viel einsetzt wird weiss ich nicht genau, ob es sich lohnt hier auf eine halb kommerzielle Lösung zu setzen.

Ich würde mich freuen, wenn ihr mir etwas weiterhelfen könntet oder mir auch gerne eure Kritik mitteilt.
Danke schonmal
Viele Grüße
 
Werbung:
1) ginge mit Table-Inheritance oder Datentypen wie JSON
2) nein, das skaliert nicht, wenn Du für jedes neue Device, was da kommt, neue Tabellen anlegen mußt.
3) beschäftige Dich mit Normalisierung
4) ginge über TRIGGER

Ob SQLite 1) und 4) kann weiß ich nicht.
 
Werbung:
Wow das ging schnell. Danke schonmal.
1.) Das geht glaube ich beides nicht direkt in SQLite. Werde das dann wohl mit sowas wie "Class Table Inheritance" lösen, also einfach die ID noch in die jeweilige Tabelle von der das Device erbt packen und eventuell in der Device Liste noch ein Type Attribut machen um die Tabelle schnell identifizieren zu können.
2.) Das hatte ich noch nicht erwähnt: Ich will eine Maximalanzahl an Geräten unterstützen. Damit würde ich denke ich wieder skalieren. Aber ich merke schon, dass das trotzdem noch nicht so toll ist oder? Wo liegt hier das Problem? Ist es besser nur jeweils eine Tabelle für die Messwerte von Device, Modul und Kanal zu machen und dort alles reinzuschreiben? Dann wird der Datensatz in einer Tabelle schnell recht groß denke ich. Wenn ich jetzt z.B. die Wert eines Kanals über eine Zeitspanne abfragen will müssten alle Einträge durchsucht werden.
3.) werde ich machen, danke.
4.) SQLite kann TRIGGER, das klingt schonmal ganz gut, dann muss ich das nicht in der Anwendung abfangen. Jetzt ist nur die Frage, wie ich das speichere. Eventuell gleich parallel zu den Messwerten für die einzelnen Ebenen.
 
Zurück
Oben