Database
 sql >> Database >  >> RDS >> Database

Un'introduzione ai database delle serie temporali

Sono lontani i tempi in cui "il" database era un unico sistema di gestione di database relazionali installato in genere sul server più potente del datacenter. Tale database ha servito tutti i tipi di richieste:OLTP, OLAP, qualsiasi cosa richiesta dall'azienda. Al giorno d'oggi i database funzionano su hardware di base, sono anche più sofisticati in termini di alta disponibilità e specializzati per gestire particolari tipi di traffico. La specializzazione consente loro di ottenere prestazioni molto migliori:tutto è ottimizzato per gestire un particolare tipo di dati:ottimizzatore, motore di archiviazione e persino il linguaggio non deve essere SQL, come in passato. Può essere basato su SQL con alcune estensioni che consentono una manipolazione dei dati più efficiente, oppure può anche essere qualcosa di totalmente nuovo, creato da zero.

Oggi abbiamo database analitici e colonnari come ClickHouse o MariaDB AX, abbiamo piattaforme per big data come Hadoop, soluzioni NoSQL come MongoDB o Cassandra, datastore chiave-valore come Redis. Abbiamo anche database Time-Series come Prometheus o TimeScaleDB. Questo è ciò su cui ci concentreremo in questo post sul blog. Database delle serie temporali:cosa sono e perché vorresti utilizzare un altro datastore nel tuo ambiente.

A cosa servono i database delle serie temporali?

Come suggerisce il nome, i database di serie temporali sono progettati per archiviare dati che cambiano nel tempo. Può trattarsi di qualsiasi tipo di dato che è stato raccolto nel tempo. Potrebbero essere metriche raccolte da alcuni sistemi:tutti i sistemi di tendenza sono esempi di dati di serie temporali.

Ogni volta che guardi i dashboard in ClusterControl, stai effettivamente osservando la rappresentazione visiva dei dati di serie temporali archiviati in Prometheus, un database di serie temporali.

I dati delle serie temporali non si limitano alle metriche del database. Tutto può essere una metrica. Come cambia nel tempo il flusso di persone che entrano in un centro commerciale? Come cambia il traffico in una città? Come cambia l'uso dei mezzi pubblici durante il giorno? Flusso d'acqua in un ruscello o in un fiume. Quantità di energia generata da un impianto idrico. Tutto questo e tutto ciò che può essere misurato nel tempo è un esempio di dati di serie temporali. Tali dati possono essere interrogati, tracciati, analizzati per trovare correlazioni tra diverse metriche.

Come sono strutturati i dati in un database di serie temporali?

Come puoi immaginare, il dato più importante nel database delle serie temporali è il tempo. Esistono due modi principali per archiviare i dati. Uno, qualcosa che assomiglia all'archiviazione dei valori-chiave potrebbe assomigliare a questo:

Timestamp Metrica 1
28-03-2019 00:00:01 2356
28-03-2019 00:00:02 6874
28-03-2019 00:00:03 3245
28-03-2019 00:00:04 2340

In breve, per ogni timestamp abbiamo un valore per la nostra metrica.

Un altro esempio coinvolgerà più metriche. Invece di archiviare ogni metrica in una tabella o raccolta separata, è possibile archiviare più metriche insieme.

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

Questa struttura di dati aiuta a interrogare i dati in modo più efficiente quando le metriche sono correlate. Invece di leggere più tabelle e unirle per riunire tutte le metriche, è sufficiente leggere una singola tabella e tutti i dati sono pronti per essere elaborati e presentati.

Potresti chiederti:cosa c'è di veramente nuovo qui? In che cosa differisce da una normale tabella in MySQL o in un altro database relazionale? Ebbene, il design della tabella è abbastanza simile ma ci sono differenze significative nel carico di lavoro che, quando un datastore è progettato per sfruttarle, può migliorare notevolmente le prestazioni.

I dati delle serie temporali in genere vengono solo aggiunti:è abbastanza improbabile che vengano aggiornati i vecchi dati. In genere non elimini righe particolari, d'altra parte potresti volere una sorta di aggregazione dei dati nel tempo. Questo, se preso in considerazione nella progettazione degli interni del database, farà una differenza significativa rispetto ai database relazionali "standard" (e non anche relazionali) destinati a servire il tipo di traffico di elaborazione delle transazioni online:ciò che è più importante è la capacità di archiviare in modo coerente (jngest) grandi quantità di dati che arrivano con il tempo.

È possibile utilizzare un RDBMS per archiviare dati di serie temporali, ma l'RDBMS non è ottimizzato per questo. I dati e gli indici generati sul retro possono diventare molto grandi e lenti da interrogare. I motori di archiviazione utilizzati in RDBMS sono progettati per archiviare una varietà di tipi di dati diversi. In genere sono ottimizzati per il carico di lavoro di elaborazione delle transazioni online, che include frequenti modifiche ed eliminazioni dei dati. I database relazionali tendono anche a mancare di funzioni e caratteristiche specializzate relative all'elaborazione di dati di serie temporali. Abbiamo detto che probabilmente desideri aggregare dati più vecchi di un certo periodo di tempo. Potresti anche voler eseguire facilmente alcune funzioni statistiche sui dati delle serie temporali per smussare, determinare e confrontare le tendenze, interpolare i dati e molto altro. Ad esempio, qui puoi trovare alcune delle funzioni che Prometheus mette a disposizione degli utenti.

Esempi di database di serie temporali

Esistono più database di serie temporali sul mercato, quindi non è possibile coprirli tutti. Vorremmo ancora fornire alcuni esempi di database di serie temporali che potresti conoscere o forse anche utilizzare (consapevolmente o meno).

Afflusso DB

InfluxDB è stato creato da InfluxData. È un database di serie temporali open source scritto in Go. Il datastore fornisce un linguaggio simile a SQL per interrogare i dati, il che semplifica l'integrazione degli sviluppatori nelle loro applicazioni. InfluxDB funziona anche come parte di un'offerta commerciale, che copre l'intero stack progettato per fornire un ambiente completo e altamente disponibile per l'elaborazione di dati di serie temporali.

Prometeo

Prometheus è un altro progetto open source scritto anche in Go. È comunemente usato come back-end per diversi strumenti e progetti open source, ad esempio Percona Monitoring and Management. Prometheus è stato anche un database di serie temporali preferito da ClusterControl.

Prometheus può essere distribuito da ClusterControl per essere utilizzato per archiviare i dati di serie temporali raccolti sui server di database monitorati e gestiti da ClusterControl:

Essendo ampiamente utilizzato nel mondo open source, Prometheus è abbastanza facile da integrare nel tuo ambiente esistente utilizzando più esportatori.

Strumento RRD

Questo potrebbe essere un esempio di database di serie temporali che molte persone usano senza sapere di farlo. RRDtool è un progetto open source molto popolare per l'archiviazione e la visualizzazione di dati di serie temporali. Se hai mai usato Cacti, era basato su RRDtool. Se hai progettato la tua soluzione, è molto probabile che tu abbia utilizzato anche RRDtool come back-end per archiviare i tuoi dati. Al giorno d'oggi non è così popolare come una volta, ma nel 2000 - 2010 questo era il modo più comune per archiviare i dati delle serie temporali. Curiosità:le prime versioni di ClusterControl ne facevano uso.

Scala temporale

TimeScale è un database di serie temporali sviluppato su PostgreSQL. È un'estensione su PostgreSQL, che si basa sul datastore sottostante per fornire l'accesso ai dati, il che significa che accetta tutto l'SQL che potresti voler usare. Essendo un'estensione, utilizza tutte le altre funzionalità ed estensioni di PostgreSQL. È possibile combinare serie temporali e altri tipi di dati, ad esempio per unire serie temporali e metadati, arricchendo l'output. Puoi anche eseguire filtri più avanzati utilizzando JOIN e tabelle non di serie temporali. Sfruttare il supporto GIS in PostgreSQL TimeScale può essere facilmente utilizzato per tenere traccia delle posizioni geografiche nel tempo. Può anche sfruttare tutte le possibilità di ridimensionamento offerte da PostgreSQL, inclusa la replica.

Streaming temporale

Amazon Web Services offre anche un'offerta per i database di serie temporali. Timestream è stato annunciato abbastanza di recente, a novembre 2018. Aggiunge un altro datastore al portafoglio AWS, questa volta aiutando gli utenti a gestire i dati di serie temporali provenienti da fonti come apparecchiature Internet of Things o servizi monitorati. Può anche essere utilizzato per archiviare metriche derivate da registri creati da più servizi, consentendo agli utenti di eseguire query analitiche su di essi, aiutando a comprendere i modelli e le condizioni in cui funzionano i servizi.

Timestream, come la maggior parte dei servizi AWS, fornisce un modo semplice per scalare se la necessità di archiviare e analizzare i dati cresce nel tempo.

Come puoi vedere, ci sono numerose opzioni sul mercato e questo non sorprende. L'analisi dei dati delle serie temporali di recente sta prendendo sempre più piede e diventa sempre più critica per le operazioni aziendali. Fortunatamente, dato il gran numero di offerte, sia open source che commerciali, è molto probabile che tu possa trovare uno strumento adatto alle tue esigenze.