[MySQL] Grote database met datasamples energiemonitor

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • somers1234
  • Registratie: September 2008
  • Laatst online: 07:26
Al een tijdje heb ik een zelfgebouwde energiemonitor draaien op basis van een ESP8266 Wifi microcontroller. Deze energiemonitor meet het aantal impulsen van de meters (stroom, gas en water) in de meterkast en verstuurt het aantal gemeten impulsen naar een gratis IoT cloud dienst (Thingspeak).

Omdat ik het interessant vind om het momentane opgenomen vermogen (watt) met voldoende details te kunnen bekijken, heb ik besloten om elke 15 seconde de data naar de cloud dienst te pushen. Vervolgens kan ik daar de volgende grafieken mee plotten:

Afbeeldingslocatie: https://i.imgur.com/nC0WLFK.png
De energiemonitor draait alweer bijna een jaar en heeft ruim 2 miljoen records aan data gegenereerd. Opzich werkt alles prima maar toch wil ik de locatie waar deze data opgeslagen wordt gaan veranderen. Op deze manier heb ik meer controle over de data en ben ik niet meer afhankelijk van deze cloud dienst.

Doel: het onderbrengen van de data op een eigen hosting.

Het inrichten en programmeren van de noodzakelijke scripts lijkt mij geen probleem. Ik maak maar beperkt gebruik van de API van de cloud dienst en meer als het ophalen van data tussen twee datums of het sommeren van data per dag/uur heb ik niet nodig. Wat mij wel zorgen baart is het inrichten van de database en de mogelijke performance issues op langere termijn.

De data die ik tot mijn beschikking heb en kan exporteren van de cloud dienst is een CSV met de volgende opbouw: Timestamp, Watt, (Wh*2), (m²/1000), (liter).

2015-08-23 12:55:23 UTC,166,542,2,0
2015-08-23 12:55:38 UTC,167,547,1,0
2015-08-23 12:55:53 UTC,168,544,1,0

Mijn vraag aan jullie is of een simpel hosting pakket met MySQL database deze hoeveelheid data, importeren van data elke 15 seconde en af en toe weergeven van totalen gaat trekken. Kom ik in de problemen met dataverbruik, geeft een dergelijke database performance issues en welke tips kunnen jullie mij verder meegeven?

Op internet lees ik heel wisselende verhalen over databases met miljoenen records. Wat mij wel duidelijk is dat het goed inrichten van de tabel al een hoop kan schelen. Wat denken jullie. Zou dit kunnen werken?

Acties:
  • 0 Henk 'm!

  • 3ddie
  • Registratie: September 2004
  • Laatst online: 20:38
Ik houd zelf ook data van mijn meter bij, ik heb lokaal een SQL database draaien, met miljoenen records werd dat op een gegeven moment ook vrij traag. Ik ben toen aan de slag gegaan om de totalen te gaan berekenen en die weer te geven in de grafiek. Ik sla dus van elke dag, week, maand en jaar het totale verbruik op en gooi na 60 dagen (o.i.d.) de ruwe data weg. Zo heb ik sinds 01-01-2014 "slechts" 2400 records in mijn database.
Ik weet dat dit niet echt een antwoord geeft op je vraag, maar met een beperktere dataset is hosting & performance een minder groot probleem.

Acties:
  • 0 Henk 'm!

  • Feanathiel
  • Registratie: Juni 2007
  • Niet online

Feanathiel

Cup<Coffee>

Met een goed ontworpen database, zul je eerder uit de disk space lopen dan dat je performance problemen krijgt. Ons systeem heeft een paar miljard rijen en de servers trekken dat makkelijk. Kijk voor jezelf even wat je met de data wilt doen. Wil je complexe zoekacties ondersteunen of wil je dat je data beschikbaar is voor iedereen (=vaak opvragen), dan zal je hier in je ontwerp rekening mee moeten houden.

Acties:
  • 0 Henk 'm!

  • 4Real
  • Registratie: Juni 2001
  • Laatst online: 14-09-2024
Feanathiel schreef op dinsdag 11 oktober 2016 @ 19:02:
Met een goed ontworpen database, zul je eerder uit de disk space lopen dan dat je performance problemen krijgt. Ons systeem heeft een paar miljard rijen en de servers trekken dat makkelijk. Kijk voor jezelf even wat je met de data wilt doen. Wil je complexe zoekacties ondersteunen of wil je dat je data beschikbaar is voor iedereen (=vaak opvragen), dan zal je hier in je ontwerp rekening mee moeten houden.
interessant, maar niet concreet. Kun je een voorbeeld geven?

Acties:
  • 0 Henk 'm!

  • ChaZy
  • Registratie: September 2004
  • Laatst online: 02-09 21:34
Waarom wil je het in een relationele database opslaan? Er bestaan geen relatie in de data die je hebt. Misschien kun je eens kijken naar een NoSQL oplossing zoals bijvoorbeeld MongoDB

Acties:
  • +2 Henk 'm!

  • BasilFX
  • Registratie: Mei 2004
  • Laatst online: 06-10 08:32

BasilFX

BasilFX

MySQL werkt, maar er zijn zogehete Time Series Databases die veel beter zijn in genoemde taak. Zo kunnen dat soort databases beter overweg met niet-uitgelijnde meetwaarden, zijn ze vlot(ter) in het toepassen van aggregaties en meer.

Ik ben zelf fan van InfluxDB (i.c.m. Grafana). Is gemakkelijk te draaien op een eigen server.

[ Voor 10% gewijzigd door BasilFX op 12-10-2016 07:39 ]

http://www.basilfx.net


Acties:
  • 0 Henk 'm!

  • Kettrick
  • Registratie: Augustus 2000
  • Laatst online: 10-10 02:10

Kettrick

Rantmeister!

BasilFX schreef op woensdag 12 oktober 2016 @ 07:34:
MySQL werkt, maar er zijn zogehete Time Series Databases die veel beter zijn in genoemde taak. Zo kunnen dat soort databases beter overweg met niet-uitgelijnde meetwaarden, zijn ze vlot(ter) in het toepassen van aggregaties en meer.

Ik ben zelf fan van InfluxDB (i.c.m. Grafana). Is gemakkelijk te draaien op een eigen server.
Dit.

Timeseries zijn gemaakt voor dit soort problemen, influx is een geweldige kandidaat en is vandaag de dag waarschijnlijk de meest voor de hand liggen optie. Een andere optie is het gebruik van elasticsearch welke ook standaard met grafana werkt.

Ik gebruik zelf elasticsearch en grafana voor het bijhouden van interne applicatie metrics en ben er erg over te spreken.
Pagina: 1