sql >> Database >  >> RDS >> Database

Een inleiding tot tijdreeksdatabases

De tijd dat "de" database een enkel relationeel databasebeheersysteem was, is lang voorbij, meestal op de krachtigste server in het datacenter. Een dergelijke database vervulde allerlei verzoeken - OLTP, OLAP, alles wat nodig was voor het bedrijfsleven. Tegenwoordig draaien databases op basishardware, ze zijn ook geavanceerder in termen van hoge beschikbaarheid en gespecialiseerd om een ​​bepaald type verkeer te verwerken. Door specialisatie kunnen ze veel betere prestaties bereiken - alles is geoptimaliseerd om met een bepaald soort gegevens om te gaan:optimizer, opslagengine, zelfs taal hoeft geen SQL te zijn, zoals in het verleden. Het kan SQL-gebaseerd zijn met enkele extensies die efficiëntere gegevensmanipulatie mogelijk maken, of het kan ook iets totaal nieuws zijn, helemaal opnieuw gemaakt.

Tegenwoordig hebben we analytische, kolomvormige databases zoals ClickHouse of MariaDB AX, we hebben big data-platforms zoals Hadoop, NoSQL-oplossingen zoals MongoDB of Cassandra, key-value datastores zoals Redis. We hebben ook Time-Series-databases zoals Prometheus of TimeScaleDB. Daar gaan we in deze blogpost op in. Time-Series-databases - wat zijn het en waarom zou u nog een andere datastore in uw omgeving willen gebruiken.

Waarvoor zijn tijdreeksdatabases?

Zoals de naam al doet vermoeden, zijn tijdreeksdatabases ontworpen om gegevens op te slaan die met de tijd veranderen. Dit kunnen alle soorten gegevens zijn die in de loop van de tijd zijn verzameld. Het kunnen statistieken zijn die van sommige systemen zijn verzameld - alle trendingsystemen zijn voorbeelden van tijdreeksgegevens.

Telkens wanneer u naar de dashboards in ClusterControl kijkt, kijkt u eigenlijk naar de visuele weergave van de tijdreeksgegevens die zijn opgeslagen in Prometheus, een tijdreeksdatabase.

Tijdreeksgegevens zijn niet beperkt tot databasestatistieken. Alles kan een maatstaf zijn. Hoe verandert de stroom mensen die een winkelcentrum binnenkomen in de loop van de tijd? Hoe verandert het verkeer in een stad? Hoe verandert het gebruik van het openbaar vervoer gedurende de dag? Waterstroom in een beek of een rivier. Hoeveelheid energie opgewekt door een waterplant. Dit alles en al het andere dat in de tijd kan worden gemeten, is een voorbeeld van de tijdreeksgegevens. Dergelijke gegevens kunt u opvragen, plotten en analyseren om correlaties tussen verschillende statistieken te vinden.

Hoe worden gegevens gestructureerd in een tijdreeksdatabase?

Zoals u zich kunt voorstellen, is tijd het belangrijkste gegeven in de tijdreeksdatabase. Er zijn twee manieren om gegevens op te slaan. Ten eerste kan iets dat lijkt op sleutelwaardeopslag er als volgt uitzien:

Tijdstempel Metriek 1
2019-03-28 00:00:01 2356
2019-03-28 00:00:02 6874
2019-03-28 00:00:03 3245
2019-03-28 00:00:04 2340

Kortom, voor elke tijdstempel hebben we enige waarde voor onze statistiek.

Een ander voorbeeld betreft meer metrische gegevens. In plaats van elke metriek in een aparte tabel of verzameling op te slaan, is het mogelijk om meerdere metrieken ernaast op te slaan.

Tijdstempel Metriek 1 Metriek 2 Metriek 3 Metriek 4 Metriek 5
2019-03-28 00:00:01 765 873 124 98 0
2019-03-28 00:00:02 5876 765 872 7864 634
2019-03-28 00:00:03 234 7679 98 65 34
2019-03-28 00:00:04 345 3 598 0 7345

Deze gegevensstructuur helpt om de gegevens efficiënter op te vragen wanneer de statistieken gerelateerd zijn. In plaats van meerdere tabellen te lezen en ze samen te voegen om alle statistieken bij elkaar te krijgen, volstaat het om één enkele tabel te lezen en zijn alle gegevens klaar om te worden verwerkt en gepresenteerd.

Je vraagt ​​je misschien af:wat is hier echt nieuw? Hoe verschilt dit van een gewone tabel in MySQL of een andere relationele database? Welnu, het ontwerp van de tabel is vrij gelijkaardig, maar er zijn aanzienlijke verschillen in de werklast die, wanneer een datastore is ontworpen om ze te exploiteren, de prestaties aanzienlijk kan verbeteren.

Tijdreeksgegevens worden meestal alleen toegevoegd - het is vrij onwaarschijnlijk dat u oude gegevens bijwerkt. Meestal verwijdert u bepaalde rijen niet, aan de andere kant wilt u misschien een soort aggregatie van de gegevens in de loop van de tijd. Wanneer hiermee rekening wordt gehouden bij het ontwerpen van de interne onderdelen van de database, zal dit een aanzienlijk verschil maken ten opzichte van "standaard" relationele (en niet ook relationele) databases die bedoeld zijn om verkeer van het type online transactieverwerking te bedienen:wat het belangrijkste is, is de mogelijkheid om consistent op te slaan (jngest) grote hoeveelheden gegevens die met de tijd binnenkomen.

Het is mogelijk om een ​​RDBMS te gebruiken om tijdreeksgegevens op te slaan, maar het RDBMS is er niet voor geoptimaliseerd. Gegevens en indexen die op de achterkant worden gegenereerd, kunnen erg groot worden en traag opvragen. Opslagengines die in RDBMS worden gebruikt, zijn ontworpen om verschillende gegevenstypen op te slaan. Ze zijn doorgaans geoptimaliseerd voor online transactieverwerking, waaronder frequente wijziging en verwijdering van gegevens. Relationele databases hebben ook de neiging om gespecialiseerde functies en kenmerken te missen die verband houden met het verwerken van tijdreeksgegevens. We hebben vermeld dat u waarschijnlijk gegevens wilt samenvoegen die ouder zijn dan een bepaalde periode. U wilt misschien ook eenvoudig enkele statistische functies op uw tijdreeksgegevens kunnen uitvoeren om deze glad te strijken, trends te bepalen en te vergelijken, gegevens te interpoleren en nog veel meer. Hier vindt u bijvoorbeeld enkele van de functies die Prometheus aan de gebruikers ter beschikking stelt.

Voorbeelden van tijdreeksdatabases

Er zijn meerdere bestaande tijdreeksdatabases op de markt, dus het is niet mogelijk om ze allemaal te dekken. We willen nog enkele voorbeelden geven van de tijdreeksdatabases die u misschien kent of misschien zelfs gebruikt (al dan niet bewust).

InfluxDB

InfluxDB is gemaakt door InfluxData. Het is een open-source tijdreeksdatabase geschreven in Go. De datastore biedt SQL-achtige taal om de gegevens op te vragen, waardoor het voor de ontwikkelaars gemakkelijk is om in hun applicaties te integreren. InfluxDB werkt ook als onderdeel van een commercieel aanbod, dat de hele stapel dekt die is ontworpen om een ​​volledige, zeer beschikbare omgeving te bieden voor het verwerken van tijdreeksgegevens.

Prometheus

Prometheus is een ander open source-project dat ook in Go is geschreven. Het wordt vaak gebruikt als backend voor verschillende open source tools en projecten, bijvoorbeeld Percona Monitoring en Management. Prometheus is ook een favoriete tijdreeksdatabase voor ClusterControl.

Prometheus kan worden ingezet vanuit ClusterControl om te worden gebruikt om de tijdreeksgegevens op te slaan die zijn verzameld op de databaseservers die worden bewaakt en beheerd door ClusterControl:

Prometheus wordt veel gebruikt in de open source-wereld en is vrij eenvoudig te integreren in uw bestaande omgeving met behulp van meerdere exportprogramma's.

RRD-tool

Dit kan een voorbeeld zijn van een tijdreeksdatabase die veel mensen gebruiken zonder te weten dat ze dat doen. RRDtool is een zeer populair open source-project voor het opslaan en visualiseren van tijdreeksgegevens. Als je ooit Cacti hebt gebruikt, was het gebaseerd op RRDtool. Als je je eigen oplossing hebt ontworpen, is de kans groot dat je RRDtool ook als backend hebt gebruikt om je gegevens op te slaan. Tegenwoordig is het niet meer zo populair als vroeger, maar in 2000 - 2010 was dit de meest gebruikelijke manier om tijdreeksgegevens op te slaan. Leuk weetje - vroege versies van ClusterControl maakten er gebruik van.

Tijdschaal

TimeScale is een tijdreeksdatabase die is ontwikkeld bovenop de PostgreSQL. Het is een extensie op PostgreSQL, die afhankelijk is van de onderliggende datastore voor het verlenen van toegang tot gegevens, wat betekent dat het alle SQL accepteert die u mogelijk wilt gebruiken. Omdat het een extensie is, maakt het gebruik van alle andere functies en extensies van PostgreSQL. U kunt tijdreeksen en andere soorten gegevens combineren, bijvoorbeeld om tijdreeksen en metagegevens samen te voegen, waardoor de uitvoer wordt verrijkt. U kunt ook geavanceerder filteren door gebruik te maken van JOIN's en niet-tijdreekstabellen. Door gebruik te maken van GIS-ondersteuning in PostgreSQL TimeScale kan gemakkelijk worden gebruikt om geografische locaties in de loop van de tijd te volgen. Het kan ook gebruikmaken van alle schaalmogelijkheden die PostgreSQL biedt, inclusief replicatie.

Tijdstroom

Amazon Web Services heeft ook een aanbod voor tijdreeksdatabases. Timestream is vrij recent aangekondigd, in november 2018. Het voegt nog een datastore toe aan het AWS-portfolio, dit keer om gebruikers te helpen tijdreeksgegevens te verwerken die afkomstig zijn van bronnen zoals Internet of Things-apparaten of bewaakte services. Het kan ook worden gebruikt om statistieken op te slaan die zijn afgeleid van logboeken die door meerdere services zijn gemaakt, zodat gebruikers er analytische query's op kunnen uitvoeren, wat helpt om patronen en voorwaarden te begrijpen waaronder services werken.

Timestream biedt, zoals de meeste AWS-services, een gemakkelijke manier van schalen als de behoefte aan opslag en analyse van de gegevens in de loop van de tijd groeit.

Zoals u kunt zien, zijn er tal van opties op de markt en dit is niet verwonderlijk. Tijdreeksgegevensanalyse wordt de laatste tijd steeds populairder en wordt steeds belangrijker voor de bedrijfsvoering. Gelukkig is het, gezien het grote aantal aanbiedingen, zowel open source als commercieel, vrij waarschijnlijk dat u een tool kunt vinden die aan uw behoeften voldoet.


  1. Een string toewijzen aan een DB-reeks in Hibernate

  2. MariaDB MaxScale Load Balancing op Docker:Beheer:deel twee

  3. Replicatiefailover voor MySQL en MariaDB beheren met pre- of post-failoverscripts

  4. MySQL - Herstel gedropte prestatieschemadatabase