Dalek schrieb:
Das hier ist eher ein Spezialfall bei dem Normalisierung kaum eine Rolle spielt.
Wieso? Ich kenn jetzt Influx nicht, aber wenn ich dort Daten als
statt (veranschaulicht in JSON)
Code:
{
n1: 1,
n2: 2,
n3: 3,
n4: 4,
n5: 5
}
speicher, hab ich ohne Logik Layer oben drauf keinen Zugriff auf die Einzelwerte. Die Normalform sagt ja nur aus, dass man Werte atomar speichern soll. Eine Anschrift wie
Code:
Platz der Republik 1, 11011 Berlin
kann ich nicht sinnvoll via DB filtern. Es war ja genau auf das Beispiel
Raijin schrieb:
SELECT * FROM Klimadaten WHERE TempTechnik>30
bezogen.
Dalek schrieb:
Bei Zeitreihen ist es vor allem interessant die Daten automatisch zu partitionieren, keine Ahnung ob SQLite das kann.
SQLite unterstützt natürlich kein Partitioning. Die gesamte Datenbank ist eine Datei. Eine Tabelle somit über mehrere Dateien splitten geht nicht. Wenn SQLite nicht mehr reicht, kann er problemlos auf MySQL/Postgres/SQL Server/whatever migrieren und ggf. dessen Optimierungen ausnutzen.
KitKat::new() schrieb:
Das kannst du ohne weitere Infos gar nicht wissen.
Doch, problemlos. Ein Event kann ohne Weiteres zum gleichen Zeitpunkt stattfinden. Oder soll ich noch Millisekunden mit aufzeichnen? Was wenn die identisch sind - Nanosekunden? Picosekunden? ...? Im Endeffekt ist die Auflösung nur so genau, wie die beteiligten CPUs mir Daten liefern können. Nur weil man sagt, "x tritt nicht auf", muss ich mich nicht von Best Practices lösen. Das hier ist wohl auch kein Fall von Multi-Master-Replication, wo UUIDs eher zusagen (wo auch eine Chance auf Duplikate besteht, die praktisch aber null ist), ergo kann man das anwenden. Krampfhaft einen anderen Typ als PK zu verwenden, zeugt für mich eher von "Ich mach das ganz besonders". Und fünf Tage/einen Monat/ein Jahr später fall ich auf die Gusche, weil mein "intelligentes Tool", mal wieder doch nicht so "intelligent" war und ich bis dahin alles refactoren darf. Nicht nur die Anwendung selbst, sondern ggf. auch alle Anwendungen, die darauf aufbauen. Ein schönes Schlamassel ist buchstäblich vorprogrammiert.
Nimm einfach nen AI PK und der Timestamp ist einfach ne Spalte mit entsprechendem Index. Da kann auch zeitgleich ein anderes Event passieren (Aus nem Datenbestand auf nem anderen Server? Selber Server, anderer Prozess/gleiche Anwendung?), was später ggf. zusammengeführt wird. Die IDs kann ich dann problemlos neu zuweisen, mit dem Timestamp als PK muss ich diesen dann nochmal überarbeiten und ein "anderes System" für den PK finden.
(...wenn ich noch eine Tabelle mit Compound PK außerhalb von Relationstabellen sehe, dreh ich durch. Da war auch jemand "ganz schlau"...)
KitKat::new() schrieb:
Warum auf Basis von SQL statt Zeitreihen?
Hier gehts die ganze Zeit um Datenbanken, was im klassischen Sinne SQL impliziert. Kurz darauf wurde NoSQL, danach Influx eingeworfen, wobei letzteres auch SQL-artig ist. Bitte nicht krümelkacken... Der TE hat mit SQL zudem noch nicht gearbeitet...
KitKat::new() schrieb:
Er hat nämlich einen bestimmten Use Case
Drei Zahlen mit einem Timestamp als Datensatz speichern. Wo braucht man hier einen BLOB? Auch funktioniert obiges Beispiel wieder nicht mehr. Ein Cluster setzt er mit hoher Wahrscheinlichkeit nicht auf.