Laden...

Many Rows or many Columns in einer Table

Erstellt von lechiffre vor 8 Jahren Letzter Beitrag vor 8 Jahren 2.596 Views
L
lechiffre Themenstarter:in
94 Beiträge seit 2013
vor 8 Jahren
Many Rows or many Columns in einer Table

verwendetes Datenbanksystem: mssql

Hallo Community , ich bin gerade in einem Projekt zu Gange , welches REALTIME Daten von Geräten empfängt. Jene Geräte liefern alle 5 Minuten Daten , welche dann mit einem TIMESTAMP + WERT in eine Datenbank gespeist werden sollen.

Es sind ungefähr 27-30 Geräte.(Größe kann noch variieren aber 30 ist das Maximum)

Also 27-30 Id's , die jeweils zu einem Zeitpunkt (der nur einmal vorkommt) 27-30 Werte haben.

Jetzt meine Frage :

Was ist performativer was ist Best Practice oder was sollte ich beachten um eine Datenbank aufzusetzen die diese Daten einspeist.

Nutzt man jetzt viele rows d.h man hat eine Tabelle welche die ID's der einzelnen Geräte beinhaltet und eine Tabelle die jeweils für denn Zeitpunkt die ID's des Gerätes und den Wert anlegt.(Redundanz des Zeitpunktes da der ja eindeutig ist und jeweils von jedem Gerät gleich ist).

Oder sollte man viele Columns anlegen , dann würde der Zeitpunkt als Primarykey gelten.

Als Backend fungiert ein Microsoft Server 2014 + microsoft sql server 2014.

Um die Daten der Geräte zu holen fungiert ein Service der alle 5 minuten die geräte anpollt um die daten zu holen. Wenn ein gerät nicht reagiert oder nicht erreichbar ist , wird ein Ausfall wert gesetzt der dann mit dem nächsten poll ( Wenn daten vorhanden) wieder überschrieben wird bzw.geupdatet .

Ich hoffe ich habe mich gut ausgedrückt und vielleicht hat ja jemand schon Erfahrung mit so welches Projekten gehabt und kann mir davon berichtet warum er das eine und nicht das andere Empfiehlt.

16.834 Beiträge seit 2008
vor 8 Jahren

30 Geräte mit 30 Werten.. da würde jede XML-Datei ausreichen, damit man keine Performance-Probleme hat.
Ich bezweifle, dass bei einem "echten" DBMS die CPU sich auch nur um 2% erhöht, ziemlich egal wie man es macht.

Aber um auf die Struktur zu kommen:
natürlich halt man nicht für jedes Gerät eine Spalte, denn das wäre ganz weit weg von einer Normalisierung.
Du hast selbstverständlich eine Geräte-Tabelle, wobei jedes Gerät eine Spalte darstellt.

PS: jede 5 Minuten pollen ist kein Realtime; ich würde hier vermutlich sowieso WebSockets (SignalR) statt Pollen verwenden.

L
lechiffre Themenstarter:in
94 Beiträge seit 2013
vor 8 Jahren

30 Geräte mit 30 Werten.. da würde jede XML-Datei ausreichen, damit man keine Performance-Probleme hat.
Ich bezweifle, dass bei einem "echten" DBMS die CPU sich auch nur um 2% erhöht, ziemlich egal wie man es macht.

XML Dateien neeeee 😃 soll ich ein DBMS system gespeichert werden.

PS: jede 5 Minuten pollen ist kein Realtime; ich würde hier vermutlich sowieso WebSockets (SignalR) statt Pollen verwenden.

Guter Einwand werde ich nutzen!

5.658 Beiträge seit 2006
vor 8 Jahren

Hi lechiffre,

bei 30 Datensätzen, die alle 5 Minuten geändert werden, brauchst du dir wirklich Null Gedanken über die Performance machen! Die Art deiner Fragestellung zeigt eher, daß du noch keine tiefergehenden Erfahrungen mit Datenbanksystemen gemacht hast. Daher würde ich empfehlen, erstmal mit einem einfachen Test-Projekt zum Ausprobieren anzufangen um ein paar Erfahrungen zu sammeln.

Christian

Weeks of programming can save you hours of planning

L
lechiffre Themenstarter:in
94 Beiträge seit 2013
vor 8 Jahren

Mir geht es auch nicht nur um die Performance vielleicht war die Fragestellung auch einfach falsch mir ist schon klar , das das nicht viele Daten sind , meine Frage war mehr wie es den ist ob ich lieber mehr rows oder Columns haben soll in der DB.

Eher eine Design frage keine performance! 😃

Aber die Frage erübrigt sich gerade wenn ich mir eure Meinungen diesbezüglich ansehe 😃!

Danke euch!

1.696 Beiträge seit 2006
vor 8 Jahren

Die Anforderung ist dermaßen einfach, dass man mit 2 Tablellen die Aufgabe erledigen kann, eine für die Geräte, eine für die empfangenen Daten, warum sowas im Forum noch nachgefragt wird ist mir absolut ein Rätsel. SCNR.

Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.

**:::

L
lechiffre Themenstarter:in
94 Beiträge seit 2013
vor 8 Jahren

Die Anforderung ist dermaßen einfach, dass man mit 2 Tablellen die Aufgabe erledigen kann, eine für die Geräte, eine für die empfangenen Daten, warum sowas im Forum noch nachgefragt wird ist mir absolut ein Rätsel. SCNR.

Wie es gemacht wird ist mir in beiden fällen klar , ich wollte nur mal fragen ob das was ich mir ja schon gedacht habe auch wirklich so gut ist. Da ja hier so einer wie ja auch DUUUU! Ziemlich lange schon in Projekte etc. arbeitet. Wenn dir die Frage nicht gepasst hat , ist es mir ein Rätzel warum du diese überhaupt beantwortest! Die Frage bezog sich nicht darauf das ich nicht weiß wie es geht sondern nur auf ist es so i.O wie ich es mir gedacht habe oder gibt es andere Wege die nach Rom führen die ich noch nicht wusste , darum ging es mir! Danke Mr.Spakle und danke Abt. 😉 !

Greetz

16.834 Beiträge seit 2008
vor 8 Jahren

Ich versteh vbproggers Reaktion durchaus.
Irgendwann sollt ein Entwickler auch einfach mal was ausprobieren, was er sich ausgedacht hast - genau deswegen heisst der Job Entwickler.

T
2.224 Beiträge seit 2008
vor 8 Jahren

Wenn du es mit einer DB machen willst/sollst, brauchst du nur eine Tabelle.
Dort würde ich die Daten + Geräte Infos packen.

Aufbau wäre dann ungefähr so:

Tabelle GeräteDaten
-Guid (PK)
-GeräteID(varchar(100) oder wie lang die ID auch immer ist)
-DateTime (DateTime)
-Wert (varchar(100) oder welchen Wert du auch immer bekommst)

Das wäre ein ganz simples Model.
Wenn du deine Daten alle 5 Min. bekommst ist es aber nicht in Echtzeit 😮)
Sind eher Daten Snapshots.

Wäre jetzt die simpelste Lösung.
Ggf. kannst du auch einen PK aus der Geräte ID und dem Timestamp machen.
Da die Werte an sich eindeutig sein sollten, würde es so gehen.

Alternativ kannst du die Struktur so lassen und nimmst dann noch einen Index auf Geräte ID und Timestamp falls du die Daten noch auswerten/auflisten musst.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

1.696 Beiträge seit 2006
vor 8 Jahren

Ich versteh vbproggers Reaktion durchaus.
Irgendwann sollt ein Entwickler auch einfach mal was ausprobieren, was er sich ausgedacht hast - genau deswegen heisst der Job Entwickler.

Genauso meine ich. Wenn man das nicht kann, soll man sich um einen Job am Fließband umgucken, da muss selbstständig keine Entscheidungen getroffen werden 😉

Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.

**:::

L
lechiffre Themenstarter:in
94 Beiträge seit 2013
vor 8 Jahren

Es ist angekommen ^^!!!

Ich glaube meine Fragestellung wurde einfach falsch interpretiert ^^ Es ging wie gesagt nicht darum wie ich es mache , sondern ob es einen schönen eleganteren Weg gibt als den ich schon implementiert und auch schon umgesetzt habe.

Denke es ist wie so oft man kann aus Zeilen Sachen lesen und interpretieren die man einfach manchmal anders meint 😉 ! Schönen Tag noch!

Tabelle GeräteDaten
-Guid (PK)
-GeräteID(varchar(100) oder wie lang die ID auch immer ist)
-DateTime (DateTime)
-Wert (varchar(100) oder welchen Wert du auch immer bekommst)

Das wäre ein ganz simples Model.

Jupp so in etwa ist mein jetziges System schon aufgebaut. 😉 thx.

Hinweis von Coffeebean vor 8 Jahren

[Hinweis] Wie poste ich richtig? Punkt 2.3 Sparsam zitieren, keine Full Quotes

16.834 Beiträge seit 2008
vor 8 Jahren

Ich glaube meine Fragestellung wurde einfach falsch interpretiert ^^ Es ging wie gesagt nicht darum wie ich es mache , sondern ob es einen schönen eleganteren Weg gibt als den ich schon implementiert und auch schon umgesetzt habe.

Denke es ist wie so oft man kann aus Zeilen Sachen lesen und interpretieren die man einfach manchmal anders meint 😉 !

Da muss ich sagen, dass es dann schon richtig angekommen ist.
Auf die Frage, ob das ein schöner Weg ist, gibt es keine pauschale Antwort, da es viele Wege gibt und Du sicherlich niemals alle Seiteneffekte, die Du haben könntest, beachtet hast - wir übrigens auch nicht.
Daher sind solche Fragen immer relativ sinnfrei; aber: genau das ist Dein Job als Entwickler das selbst auszuprobieren und Erfahrungen zu sammeln.

L
lechiffre Themenstarter:in
94 Beiträge seit 2013
vor 8 Jahren

Wie gesagt tut mir leid wenn ich so eine banale frage gestellt habe war eigentlich auch nicht meine absicht ich habe es ja schon alles soweit lauffähig nur wollte ich das mal in die Runde werfen , werde in Zukunft drauf achten. Wie gesagt meine absicht war es auch nicht diese "Simple" Frage als wie geht das zu formulieren, nächstes mal denke ich mehr drüber nach bevor ich eine Frage stelle!