# Performance große Tabelle vs mehrere kleine Tabellen



## LiL-ScooB (24. Januar 2012)

Hallo,

ich habe da eine kleine Frage zur Performance einer Datenbank

ich möchte im bereich von 100-200ms Messwerte speichern sind so um die 100 bis 200 Werte

jetzt bin ich am überlegen was besser von der Performace ist

eine große Tabelle mit allen werten oder mehre in Gruppen aufgeteilte Tabellen a ca 20-40 Werte oder für jeden Wert eine Tabelle?

Hat da jemand schon Erfahrung gemacht bei einer solchen Datenmenge?

Die Datenbank ist noch nicht ausgewählt in Frage kommen SQLite, PostgresSQL, MySQL und MS SQL Server 

Gruß 
ScooB


----------



## Yaslaw (24. Januar 2012)

Egal welche der Datenbanken du wählst. Bei 200 Einträgen reden wir noch nicht von grossem Datenaufkommen.
So ab 100'000 kannst du langsam überlegen wie du sie aufteilen willst.

Das aufsplitten auf mehrere Gruppen-Tabellen macht es bei diesen Datenmengen eher langsamer wenn du Gruppenübergreifende Auswertungen haben willst.


----------



## LiL-ScooB (24. Januar 2012)

Danke für die schnelle Antwort aber ich glaube ich habe mich da etwas falsch ausgedrückt

ich meine nicht 200 Einträge sondern 200 Spalten in einer Tabelle
es werden jede 200ms bis zu 200 werte für einen Eintrag gespeichert die dann über ca 30 Tage gespeichtert bleiben.


----------



## Yaslaw (24. Januar 2012)

Also werden pro Sekunde 5 Zeilen mit 200 Feldern geschrieben.
Also rechnest du mit (60sec*60min*24h*30days*5perSec) 12'960'000 Zeilen. In Worten: Mehr als 12 Millionen Datensätze.

Da brauchst du als erstes eine kräftige DB. MS SQL oder Oracle.

Dann gute Indexe und saubere Felddefinitionen.

Kannst du die Felder normalisieren?

Ansonsten würd ich es trotzdem zusammen lassen. Joins in Kombination mit Full Table Scans brauchen länger als ein Full Table  Scan auf nur eine Tabelle. Wenn du viele Spalten anzeigen möchtest, kommst du am Full Table Scan fast nicht mehr vorbei. Einzig für die Selektionen kannst du da auf einen Index-Scan zurückgreifen


----------



## LiL-ScooB (24. Januar 2012)

Genau sollen dann um die 12 Millionen Datensätze in der DB vorhanden sein.

Naja normalisieren kann man da nix mehr wird im Prinzip nur nen Zeitstempel und die Werte 

| Zeitstempel | Wert 1 | Wert 2 | Wert 3 | Wert N |

Kann man in einer Tabelle Spalten reservieren ? z.B. damit ich falls Werte dazukommen die Tabelle erweitern kann?


----------



## Yaslaw (24. Januar 2012)

Du kannst immer Spalten hinzufügen. 'ALTER TABLE' ist da das Stichwort. Also, blos keine leeren Spalten für später mitführen.
Wieviele Werte sind es denn?


----------



## LiL-ScooB (24. Januar 2012)

Ja das ich Spalten hinzufügen kann ist mir bewusst nur wollte ich wissen ob es generell eine möglichkeit der Reservierung gibt.

Das ergibt sich noch dann wieviele Werte es sind kann sein das ich mit 100 Starte allerdings dann doch mit der Zeit noch 50 oder so hinzufügen muss
Danke


----------



## Yaslaw (24. Januar 2012)

Klar, du kannst ja einfach Spalten Wert1 bis Wertn, wobei n die maximale Spaltenzahl der DB ist, machen.
Je mehr Dummy-Spalten du mitführst, umso schlechter für die Performance. möglichst schlank halten und dann erweitern, wenn es notwendig wird.
ggf. Solltest du die Tabelle sogar normalisieren. Ich kann aber nicht sagen ob es bei diesen Datenmengen gut oder Schlecht für die Performance ist.


----------

