Déverrouiller les données TimeSeries avec Redis

Déverrouiller les données TimeSeries avec Redis

(Remarque : cet article de blog a été adapté d’un webinaire que j’ai présenté en juin. Pour aller encore plus loin dans RedisTimeSeries, inscrivez-vous et regardez le webinaire maintenant!)

La plupart des développeurs savent que les capacités de réponse en temps réel de Redis le rendent bien adapté pour travailler avec des données de séries chronologiques. Mais quoi exactement est Données de séries chronologiques? De nombreuses définitions s’étendent page après page d’explication, mais je pense que cela peut être considérablement simplifié:

Fondamentalement, les données de séries chronologiques sont des données qui encodent le temps sous forme d’index et où chaque temps enregistré a une valeur numérique. Si vous le visualisez en deux colonnes, une colonne aurait une sorte d’index de temps, généralement des horodatages sous la forme d’époque Unix. Et l’autre colonne aurait une sorte de valeur numérique.

Très simple.

De manière critique, vous pouvez analyser les données de séries chronologiques à l’aide de limites temporelles, par exemple, pour voir ce qui s’est passé entre le 1er janvier et le 3 janvier. Vous pouvez également obtenir des informations granulaires, en secondes, parfois même en millisecondes. Vous pouvez également séparer vos données en unités de temps, pour voir ce qui s’est passé sur une base horaire. Ensuite, si vous ne souhaitez pas examiner chaque événement de vos données de séries chronologiques, vous pouvez ajouter une agrégation à cela, pour obtenir des moyennes par heure, par exemple.

Beaucoup de gens imaginent des graphiques boursiers lorsqu’ils pensent à des données de séries chronologiques. C’est un bon moyen d’examiner la performance d’une action au cours d’une période donnée. Un cas d’utilisation de données de séries chronologiques que je regarde beaucoup est la charge du processeur sur un serveur pendant un intervalle spécifié. Les données de séries chronologiques sont également un bon moyen d’examiner les données des capteurs et d’autres informations sur l’Internet des objets (IoT). Chaque fois que vous examinez les tendances au fil du temps, cela provient généralement d’une sorte de base de données de séries chronologiques ou de structure de séries chronologiques.

L’histoire de Redis et les données chronologiques

Concentrons-nous maintenant sur Redis et les séries chronologiques. Tout a commencé avec les ensembles triés, l’une des structures de données intégrées dans Redis. Les gens ont commencé très tôt à utiliser les ensembles triés pour les données de séries chronologiques, ressemblant à ceci :

> ZADD mySortedSet 1559938522 1000

Cet exemple comprend le ZADD commande, mesjeuxtriés comme clé, et un horodatage, qui comme score. Et enfin le membre, qui était la valeur.

C’était génial, mais vous ne pouviez obtenir que des plages, vous ne pouviez pas faire de moyennes ou de sous-échantillonnage.

Les ensembles ne peuvent pas avoir de répétitions. Ici, si vous avez deux horodatages différents avec la même valeur, l’ensemble est basé sur le membre (dans ce cas, ce que nous définissons comme la valeur.) Ainsi, dans l’exemple ci-dessous, le second serait en fait un upsert—il écraserait le premier. Cela ne fonctionne pas pour les données de séries chronologiques et les gens ont eu des réveils difficiles lorsqu’ils l’ont utilisé de cette façon :

> ZADD mySortedSet 1559938522 1000
> ZADD mySortedSet 1559938534 1000 

Les développeurs ont proposé un certain nombre de solutions de contournement complexes en termes de calcul et très difficiles à mettre en œuvre. Il devait y avoir un moyen plus simple.

Entrez les flux Redis

Puis, il y a environ deux ans, Redis 4.0 a fait ses débuts avec Redis Streams, qui a été conçu pour résoudre les problèmes de création d’applications avec l’architecture de journal unifiée et pour la messagerie interprocessus.

Redis Streams offrait des avantages importants par rapport aux ensembles triés pour les cas d’utilisation de séries chronologiques. Il autorisait les identifiants générés automatiquement, l’absence de doublons et les paires champ/valeur par échantillon.

> XADD myStream * myValue 1000

> XADD myStream * myValue 1000 anotherField hello

Comme vous pouvez le voir dans la première commande, nous définissons le champ mon champ à 1000. Dans la deuxième commande, une nouvelle entrée a été créée avec maValeur mis à 1000 aussi bien que un autreChamp mis à bonjour. Chacun d’eux sont des entrées dans le flux situé à la clé mon flux.

Mais cela manquait encore de fonctionnalités importantes et n’était pas vraiment conçu pour les données de séries chronologiques. Vous pouvez facilement obtenir des plages de temps, mais pas grand-chose d’autre.

Revenons maintenant un peu en arrière pour parler de l’API des modules Redis, qui est sortie un peu avant Streams et a permis à Redis d’avoir des communautés et des types de données supplémentaires. Les utilisateurs de Redis pourraient créer des modules qui agiraient comme des citoyens de première classe à l’intérieur de Redis. Les modules existants incluent tout, de RediRecherche à RedisGraph à RedisJSON. Et maintenant il y a RedisTimeSeriesRedisTimeSeriesqui crée essentiellement une base de données de séries chronologiques complète dans Redis.

Fonctionnement du module RedisTimeSeries

Avant d’aborder la façon d’utiliser le Module RedisTimeSeries, il est important de comprendre ce qui se passe sous le capot.

La première chose que vous devez apprendre est « le morceau ». En fait, vous ne manipulez jamais directement un bloc, mais RedisTimeSeries stocke toutes les données dans ces blocs. Chaque bloc se compose de deux tableaux corrélés (un pour les horodatages et un pour les valeurs d’échantillon) dans une liste à double lien.

Par exemple, disons que je veux mettre un horodatage dans ma base de données de séries chronologiques. Il va sur la première ligne dans les deux tableaux. Si vous avez des échantillons supplémentaires, ils iront simplement dans le tableau.

image1 1

Les morceaux ont une taille fixe. Lorsque le bloc est plein, les données supplémentaires passent automatiquement au bloc suivant. L’ajout au début ou à la fin d’une liste chaînée est trivial en termes de calcul, donc lorsque de nouveaux morceaux sont ajoutés, c’est très léger.

Mais contrairement à la plupart des types de données Redis, il est recommandé de créer d’abord votre clé de série chronologique. Dans ce cas, ma commande est TS.CRÉER. Et puis j’ai monTSqui est la clé que j’utilise ici.

Supposons donc que nous souhaitions ajouter des métadonnées à cette clé. Imaginez que nous gérons une pépinière de légumes et que nous voulons suivre le chou numéro 47 dans la serre numéro 4 ; nous appellerions cela des étiquettes de métadonnées. Cela s’appliquerait à chaque échantillon sur l’ensemble de la série chronologique :

image2 1

Une autre partie importante du travail avec des données de séries chronologiques est la rétention. Disons que nous ne nous soucions pas de tout ce qui dépasse 60 secondes. RedisTimeSeries peut supprimer les éléments qui se trouvent en dehors des périodes de rétention que vous spécifiez.

Nous pouvons ajouter des valeurs en utilisant une opération appelée TS.AJOUTER. Le premier argument est la clé monTS et l’astérisque est une syntaxe empruntée à Redis Streams indiquant que Redis générera automatiquement l’horodatage. Dans ce cas, la valeur est 834.

image3 1

Ajoutons un autre échantillon et spécifions un horodatage. Notez que les horodatages sont effectivement ajoutés uniquement, vous ne pouvez donc pas entrer et ajouter quelque chose au-delà de l’horodatage le plus récemment utilisé. La suite TS.AJOUTER devrait être un horodatage supérieur à cette valeur.

Ensuite, pour obtenir des résultats limités, vous demanderiez tous les échantillons entre les deux horodatages. En utilisant notre exemple, vous pouvez voir que le premier horodatage a une valeur de 834 et le second a une valeur de 1000. image4

C’est utile, mais peut-être voulez-vous la moyenne pour chaque période de 30 secondes. Ici, moyenne C’est notre mot-clé et le 917, bien sûr, est la moyenne de 834 et 1 000.

image5 1

Mais que se passe-t-il lorsque vous avez beaucoup plus de données ? Vous ne voudrez peut-être pas exécuter cela GAMME.TS commande tout le temps et je veux juste extraire ces données de manière granulaire.

Eh bien, nous avons la possibilité de créer des règles ! monTS est ma clé : C’est la source. La destination est monTS2 et c’est la deuxième clé. Tous les morceaux ici représentent 30 secondes de temps et RedisTimeSeries les placera automatiquement dans la clé secondaire de la clé de destination. Ainsi, toutes les 30 secondes, vous obtiendrez un échantillon supplémentaire ajouté à monTS2.

Mais attendez, il y a plus ! Ce n’est pas seulement limité aux moyennes. Vous pouvez additionner, vous pouvez obtenir le minimum, vous pouvez obtenir le maximum, vous pouvez obtenir une fourchette. Vous pouvez obtenir le décompte – combien – et le premier ou le dernier. Et toutes ces différentes fonctions d’agrégation s’appliquent également à GAMME TS.

Plus de commandes pour RedisTimeSeries

Voyons ce que RedisTimeSeries peut faire d’autre. Les commandes TS.INCRBY et TS.DECRBY servent à compter dans le temps. TS.INCRBY incrémente l’entrée précédente d’une certaine valeur. Disons que vous savez qu’en 10 secondes, vous avez collecté 10 widgets. tu courrais TS.INCRBY sur une clé. De cette façon, vous n’avez pas besoin de connaître la valeur précédente et vous pouvez garder un décompte courant. Il en va de même pour TS.DECRBYuniquement en sens inverse.

TS.GET, quant à lui, saisit la dernière valeur. Et TS.ALTER vous permet de modifier les métadonnées des clés que vous avez créées, y compris les champs, la conservation des valeurs, etc.

TS.MRANGE et TS.MGET sont intéressants mais un peu compliqués à expliquer. RedisTimeSeries suit toutes les différentes clés de séries chronologiques dans la base de données. TS.MRANGE vous permet de spécifier une paire clé/valeur d’étiquettes. Ainsi, dans notre exemple de serre, vous pouvez obtenir les relevés de température pour la serre 4, puis utiliser TS.MRANGE pour regarder différentes clés sur l’ensemble de l’espace de clés. De la même manière, TS.MGET vous permet d’obtenir les valeurs les plus récentes par étiquettes. Vous pouvez connecter RedisTimeSeries à différentes parties de votre infrastructure, telles que Prometheus et Grafana, ce qui est un excellent moyen d’alimenter les tableaux de bord de surveillance.

Mise en cache de RedisTimeSeries

Même si nous constatons que nos clients utilisent des données de séries chronologiques pour de plus en plus de cas d’utilisation, de nombreuses entreprises stockent encore leur type de séries chronologiques dans des bases de données relationnelles. Ce n’est tout simplement pas un bon choix d’un point de vue technologique lorsqu’il s’agit de faire évoluer les choses. Cela peut fonctionner correctement lorsque seulement deux ou trois personnes consultent un tableau de bord, mais lorsque vous souhaitez que des milliers de personnes dans toute l’organisation consultent les mêmes tableaux de bord analytiques, les requêtes ad hoc d’une base de données relationnelle ne peuvent souvent pas suivre.

C’est pourquoi nous voyons RedisTimeSeries être utilisé pour mettre en cache des données de séries chronologiques qui seraient autrement utilisées dans une base de données plus lente, et également pour obtenir d’autres avantages Redis, y compris le choix de conserver vos données ou de les garder éphémères.

Vous voulez en savoir plus ?

Development Source

Related Posts

RLEC 4.2.1 apporte des contrôles granulaires à la haute disponibilité et aux performances

RLEC 4.2.1 apporte des contrôles granulaires à la haute disponibilité et aux performances

Comment HolidayMe utilise Redis Enterprise comme base de données principale

Comment HolidayMe utilise Redis Enterprise comme base de données principale

Annonce de RedisGears 1.0 : un moteur sans serveur pour Redis

Annonce de RedisGears 1.0 : un moteur sans serveur pour Redis

Clés Redis dans la RAM |  Redis

Clés Redis dans la RAM | Redis

No Comment

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *