Struktur på time-series databas

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
H.O
Inlägg: 5683
Blev medlem: 19 mars 2007, 10:11:27
Ort: Ronneby

Struktur på time-series databas

Inlägg av H.O »

Jag har i princip aldrig jobbat med databaser tidigare så jag känner jag mig lite "lost" så att säga.

Jag har ett system med vilket jag loggar energiförukning samt temperatur och relativ luftfuktighet på några ställen i huset, data sparas i textfiler. Nu vill jag kopiera data till en databas (i InfluxDB) så att jag kan visualisera den med hjälp av Grafana.

Jag har det hela "up and running" så att säga, jag kan skapa en databas, jag kan (med lite tur) stoppa in data i den från Python och jag kan få Grafana att ansluta till databasen. Problemet jag har är att jag trots två dagars Googlande och Youtube-tittande inte riktigt kunna greppa vad de olika termerna egentligen betyder och hur jag bäst applicerar dom på mitt dataset. Ord som Measurments, tags, keys, fields, values snurrar i huvudet och jag förstår inte riktigt skillnaden.

Så här ser min data ut i textfilsformat:

Kod: Markera allt

*  Date      Time    Smpl   I1     I2     I3     IN       W        kVA       kWh      T1    RH1   T2    RH2   T3    RH3   T4    RH4   T5    RH5   T6    RH6
* 
2020-01-05 00:01:00   59   1.05   1.30   0.96   0.00    168.18    510.63    15446.0                                                  13.1  76.0            
2020-01-05 00:02:00   60   0.92   1.29   0.90   0.00    158.12    490.00    15446.0                                                              19.3  29.8
2020-01-05 00:03:00   60   0.97   1.29   0.90   0.00    156.62    497.19    15446.0   0.4  67.3                                                            
2020-01-05 00:04:00   60   0.97   1.29   0.90   0.00    156.70    496.16    15446.0               2.7  68.5                                                
2020-01-05 00:05:00   60   1.04   1.29   0.90   0.06    175.81    511.80    15446.0                           3.2  66.0                                    
2020-01-05 00:06:00   60   0.78   1.29   0.89   0.00    174.78    435.03    15446.0                                                                        
2020-01-05 00:07:00   57   3.92   3.81   4.61   0.78   2370.51   2814.53    15446.1                                                  13.1  75.9            
2020-01-05 00:08:00   60   4.10   3.96   4.88   0.86   2530.82   2938.98    15446.1                                                              19.2  29.7
2020-01-05 00:09:00   60   4.10   3.92   4.77   0.78   2491.92   2901.91    15446.2   0.3  67.3                                                            
2020-01-05 00:10:00   60   4.09   3.95   4.79   0.79   2504.81   2907.18    15446.2               2.7  68.5                                                
2020-01-05 00:11:00   59   4.12   3.95   4.78   0.76   2511.61   2911.80    15446.2                           3.2  65.7                                    
2020-01-05 00:12:00   59   4.12   3.95   4.76   0.74   2506.19   2907.28    15446.3                                      22.7  36.3                        
2020-01-05 00:13:00   60   4.15   3.94   4.75   0.73   2508.70   2905.73    15446.3                                                  13.1  75.8            
2020-01-05 00:14:00   60   4.14   3.97   4.77   0.73   2517.03   2910.07    15446.4                                                              19.2  29.6
Det jag vill kunna göra i Grafana är att visualisera energiförbrukning kontra exempelvis utomhustemperatur etc.

Min fråga, till de i församligen som är mer hemma på "databas-lingo" i allmänhet och gärna InfluxDB i synnerhet, är alltså hur jag borde "lägga upp" det.
Användarvisningsbild
arvidb
Inlägg: 4537
Blev medlem: 8 maj 2004, 12:56:24
Ort: Stockholm

Re: Struktur på time-series databas

Inlägg av arvidb »

Om jag förstår rätt så har du en datakälla för energiförbrukning och sex olika sensorer som var och en ger en temperatur och en luftfuktighet?

Jag har aldrig använt grafana eller InfluxDB, men i en vanlig relationsdatabas så skulle jag skapa två tabeller, en för energiförbrukningen och en för temp+luftfuktighet, där tidsstämpeln blir nyckel för respektive tabell. Inte minst eftersom du ju inte har exakt en temp+RH-mätning för varje mätning av energin. Edit: Eftersom temp+RH-sensorerna såklart gäller olika platser skulle det behövas ett fält i tabellen för att tala om vilken plats mätningen gäller också - nyckel blir då tid+plats. Alternativt olika tabeller för varje sensor.

Nu verkar inte InfluxDB vara någon vanlig relationsdatabas så deras lingo (fieldset, tagset etc) är nog specifikt för den typen av tidsseriedatabas. Tyvärr har jag inte koll på detta.
H.O
Inlägg: 5683
Blev medlem: 19 mars 2007, 10:11:27
Ort: Ronneby

Re: Struktur på time-series databas

Inlägg av H.O »

Helt rätt, data från energimätaren samt EN av de sex temp+RH-sensorerna lagras varje minut och som du ser så samplas sensorerna i tur och ordning. Vissa är trådlösa och ibland svarar de inte och då blir det en lucka där. Som i exemplet, vid 00:06:00 borde data från T4/RH4 finnas med men den svarade inte inom rimlig tid så därför är det tomt.

Nej, InfluxDB är inte en relationsdatabas så lingon är annorlunda, nu kan jag dock inget om relationsdatabaser HELLER så det kvittar egentligen :-)

Jag tror jag sitter fast i EXCEL-tänket, liksom att det finns en kolumn för varje mätpunkt - precis som i textfilen, men jag börjar förstå att det inte (alls) fungerar så i en databas....
Användarvisningsbild
sodjan
EF Sponsor
Inlägg: 43148
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping
Kontakt:

Re: Struktur på time-series databas

Inlägg av sodjan »

Om det är en "normal" databas (inget modernt no-SQL eller fritext) så har varje tabell "rader" och "kolumner".
Du kan på sätt och vis likna det vid ett Excelark om du vill.
agehall
Inlägg: 418
Blev medlem: 12 augusti 2020, 19:27:54

Re: Struktur på time-series databas

Inlägg av agehall »

InfluxDB är *INTE* en "vanlig" databas - den är speciellt framtagen för att hantera tidsserier.

Det måste finnas något bra Python lib för att prata med den tycker jag, men annars så ska det ju gå att koppla upp sig mot den och skicka typ

measurement foo=4711

för att registrera att sensor foo visar 4711 vid aktuell tidpunkt. Tror inte du behöver oroa dig för mer än så.
Användarvisningsbild
papabear
Inlägg: 821
Blev medlem: 14 mars 2004, 03:27:12
Ort: Eskilstuna
Kontakt:

Re: Struktur på time-series databas

Inlägg av papabear »

Nu vet jag inte mer om Influx än att jag har kollat lite snabbt vad det är och hur man använder den, men jag undrar om man inte ska hålla isär mätningarna.
Jag tror du vill ha ett sett av mätningar för energiförbrukning, och ett annat sett för temp/luftfuktighet. I temp-settet år man nog lägga till nån identifierare för att visa vilken sensor det gäller, node: 1...n eller så.
H.O
Inlägg: 5683
Blev medlem: 19 mars 2007, 10:11:27
Ort: Ronneby

Re: Struktur på time-series databas

Inlägg av H.O »

Tack för input, uppskattas alltid!
Att InfluxDB är en databas specifikt för data där primäraxeln är TID vet jag - och det är ju precis den typen av data jag har. Och som jag skrev i första inlägget så har jag redan Python-integrationen igång och kan stoppa in data, problemet är som sagt HUR jag på bästa sätt bör organisera den. Men jag tror kanske att det börjar falla på plats.

Separera mätningarna ja.... Jag har hela tiden tänkt att man har en kolumn per sensor, precis som i textfilen men i praktiken har man kanske EN "kolumn" för temp och EN "kolumn" för fuktighet och till varje punkt adderas en "tag" (som de kallar det) som beskriver vilken sensor värdet representerar.

Nått sånt här tänker jag mig just nu:
Två Measurements (motsvarighetet till tabeller i en realationsdatabas), en benämnd Energiförbrukning och en benämnd Miljö. Energiförbrukning innehåller 7 Fields motsvarande kolumnerna i min textfil men inga "tags". Miljö innehåller två Fields (Temp och RH) samt en Tag vars värde beskriver vilken sensor det gäller. (och så tidssämpeln förstås)

Kod: Markera allt

Measurement:Energiförbrukning
  Field: L1=4.31
  Field: L2=3.21
  Field: L3=4.21
  Field: N=0.9
  Field: W=1425.3
  Field: VA=345.4
  Field: kWh=14523.0
  
Measurement:Miljö
  Tag: Placering=Utomhus
  Field: Temp=2.25
  Field: RH=65.6
Vad tror ni om det?

EDIT: Japp, det verkar fungera. Skrev en "converter" i Python som läser data i mitt textfilsformat, omvandlar till InfluxDB "line protocol" och puttar in i databasen som är strukturerad enligt ovan. Har bara testat med några dussin punkter men det verkar som sagt fungera.
mounte
Inlägg: 204
Blev medlem: 14 november 2010, 13:15:00
Ort: Sandviken

Re: Struktur på time-series databas

Inlägg av mounte »

Mina goto-lösningar brukar vara timescale: https://www.timescale.com/ (baserat på postgresql) och tidigare/ovan nämnda influx.
För hemanvändning och slikt så brukar influx vara enklare att komma igång med.

Kan samtidigt passa på att tipsa om "standard"-verktyget för visualisering, queries och dashboards till tidsserier, Grafana: https://grafana.com/

Lycka till med allt!
H.O
Inlägg: 5683
Blev medlem: 19 mars 2007, 10:11:27
Ort: Ronneby

Re: Struktur på time-series databas

Inlägg av H.O »

Tack, jo Grafana har ju varit tanken hela tiden, vilket jag också skrev i första inlägget. Testdata, några dagar i December 2020:
Grafana-test.PNG
Har inte lyckat få till dubbla Y-axlar ännu så den faktiska temperaturen framgår inte men jag kallar det likväl en framgång :-)
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
ToPNoTCH
Inlägg: 4847
Blev medlem: 21 december 2009, 17:59:48

Re: Struktur på time-series databas

Inlägg av ToPNoTCH »

Influx är lite speciell då man inte behöver definiera tabellerna.
Den skapar fälten själv utifrån vad man skickar, vilket innebär att om man inte håller rätt på punkter och decimaler i Datat får problem.
Det är fler än en som upplevt problem med att exempelvis lägga till "medelvärde" i Grafana och så visar det sig att dom loggat Datat som text under en lång period.
H.O
Inlägg: 5683
Blev medlem: 19 mars 2007, 10:11:27
Ort: Ronneby

Re: Struktur på time-series databas

Inlägg av H.O »

Precis, en "tag" kan bara innehålla text medan ett "field" kan innehålla numeriska värden. Vad som tolkas som en tag respektive field beror, som du skriver, på HUR man formaterar strängen eller JSON paketet man skickar. JSON verkade stökigt så jag använder line-protokollet direkt. Kommatecken här, mellanslag där osv.

Jag TROR jag fått det korrekt men det skall kollas ordentligt innan jag puttar in all data. Min "konverterare" blev inte den mest effektiva, ca 15 rader/sekund från textfil på min PC till databas på en RaspberryPi så när väl all data skall köras in vill jag helst att det blir rätt - vilket var syftet med tråden.
Skriv svar