L'époque où « la » base de données était un système de gestion de base de données relationnelle unique installé généralement sur le serveur le plus puissant du centre de données est révolue depuis longtemps. Une telle base de données a servi toutes sortes de demandes - OLTP, OLAP, tout ce qui était requis par les entreprises. De nos jours, les bases de données fonctionnent sur du matériel standard, elles sont également plus sophistiquées en termes de haute disponibilité et spécialisées pour gérer un type de trafic particulier. La spécialisation leur permet d'obtenir de bien meilleures performances - tout est optimisé pour traiter un type particulier de données :l'optimiseur, le moteur de stockage, même le langage n'a pas besoin d'être SQL, comme c'était le cas dans le passé. Il peut être basé sur SQL avec quelques extensions permettant une manipulation plus efficace des données, ou il peut également s'agir de quelque chose de totalement nouveau, créé à partir de rien.
Aujourd'hui, nous avons des bases de données analytiques en colonnes comme ClickHouse ou MariaDB AX, nous avons des plateformes de big data comme Hadoop, des solutions NoSQL comme MongoDB ou Cassandra, des datastores clé-valeur comme Redis. Nous avons également des bases de données Time-Series comme Prometheus ou TimeScaleDB. C'est ce sur quoi nous allons nous concentrer dans cet article de blog. Bases de données de séries chronologiques :de quoi s'agit-il et pourquoi voudriez-vous utiliser une autre banque de données dans votre environnement ?
À quoi servent les bases de données de séries chronologiques ?
Comme leur nom l'indique, les bases de données de séries chronologiques sont conçues pour stocker des données qui changent avec le temps. Il peut s'agir de n'importe quel type de données collectées au fil du temps. Il peut s'agir de mesures collectées à partir de certains systèmes :tous les systèmes de tendances sont des exemples de données de séries chronologiques.
Chaque fois que vous regardez les tableaux de bord dans ClusterControl, vous regardez en fait la représentation visuelle des données de séries chronologiques stockées dans Prometheus, une base de données de séries chronologiques.
Les données de séries chronologiques ne se limitent pas aux métriques de la base de données. Tout peut être une métrique. Comment le flux de personnes entrant dans un centre commercial évolue-t-il dans le temps ? Comment évolue la circulation dans une ville ? Comment évolue l'usage des transports en commun au cours de la journée ? Débit d'eau dans un ruisseau ou une rivière. Quantité d'énergie produite par une usine d'eau. Tout cela et tout ce qui peut être mesuré dans le temps est un exemple de données de séries chronologiques. Ces données que vous pouvez interroger, tracer, analyser afin de trouver des corrélations entre différentes métriques.
Comment les données sont-elles structurées dans une base de données chronologique ?
Comme vous pouvez l'imaginer, la donnée la plus importante dans la base de données de séries chronologiques est le temps. Il existe deux manières principales de stocker des données. Premièrement, quelque chose qui ressemble au stockage clé-valeur peut ressembler à ceci :
Horodatage | Métrique 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 |
En bref, pour chaque horodatage, nous avons une certaine valeur pour notre métrique.
Un autre exemple impliquera plus de métriques. Au lieu de stocker chaque métrique dans une table ou une collection distincte, il est possible de stocker plusieurs métriques à côté.
Horodatage | Métrique 1 | Métrique 2 | Métrique 3 | Métrique 4 | Métrique 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 |
Cette structure de données permet d'interroger les données plus efficacement lorsque les métriques sont liées. Au lieu de lire plusieurs tableaux et de les joindre pour rassembler toutes les métriques, il suffit de lire un seul tableau et toutes les données sont prêtes à être traitées et présentées.
Vous vous demandez peut-être - qu'est-ce qui est vraiment nouveau ici ? En quoi cela diffère-t-il d'une table normale dans MySQL ou d'une autre base de données relationnelle ? Eh bien, la conception des tables est assez similaire, mais il existe des différences significatives dans la charge de travail qui, lorsqu'un magasin de données est conçu pour les exploiter, peut améliorer considérablement les performances.
Les données de séries chronologiques sont généralement uniquement ajoutées - il est peu probable que vous mettiez à jour d'anciennes données. En règle générale, vous ne supprimez pas de lignes particulières, mais vous souhaiterez peut-être une sorte d'agrégation des données au fil du temps. Ceci, lorsqu'il est pris en compte lors de la conception des éléments internes de la base de données, fera une différence significative par rapport aux bases de données relationnelles "standard" (et non relationnelles également) destinées à servir le type de trafic de traitement des transactions en ligne :ce qui est le plus important est la capacité à stocker de manière cohérente (jngest) de grandes quantités de données qui arrivent avec le temps.
Il est possible d'utiliser un SGBDR pour stocker des données de séries chronologiques, mais le SGBDR n'est pas optimisé pour cela. Les données et les index générés à l'arrière peuvent devenir très volumineux et lents à interroger. Les moteurs de stockage utilisés dans RDBMS sont conçus pour stocker une variété de types de données différents. Ils sont généralement optimisés pour la charge de travail de traitement des transactions en ligne, qui inclut la modification et la suppression fréquentes de données. Les bases de données relationnelles ont également tendance à manquer de fonctions et de fonctionnalités spécialisées liées au traitement des données de séries chronologiques. Nous avons mentionné que vous souhaitiez probablement agréger des données antérieures à une certaine période. Vous voudrez peut-être également pouvoir exécuter facilement certaines fonctions statistiques sur vos données de séries chronologiques pour les lisser, déterminer et comparer les tendances, interpoler les données et bien d'autres. Par exemple, vous pouvez trouver ici certaines des fonctions que Prometheus met à la disposition des utilisateurs.
Exemples de bases de données de séries chronologiques
Il existe plusieurs bases de données de séries chronologiques sur le marché, il n'est donc pas possible de toutes les couvrir. Nous aimerions tout de même donner quelques exemples de bases de données chronologiques que vous connaissez peut-être ou que vous utilisez peut-être (sciemment ou non).
InfluxDB
InfluxDB a été créé par InfluxData. Il s'agit d'une base de données de séries chronologiques open source écrite en Go. Le magasin de données fournit un langage de type SQL pour interroger les données, ce qui facilite l'intégration des développeurs dans leurs applications. InfluxDB fonctionne également dans le cadre d'une offre commerciale, qui couvre l'ensemble de la pile conçue pour fournir un environnement complet et hautement disponible pour le traitement des données de séries chronologiques.
Prométhée
Prometheus est un autre projet open source également écrit en Go. Il est couramment utilisé comme backend pour différents outils et projets open source, par exemple Percona Monitoring and Management. Prometheus est également une base de données de séries chronologiques de choix pour ClusterControl.
Prometheus peut être déployé à partir de ClusterControl pour être utilisé pour stocker les données de séries chronologiques collectées sur les serveurs de base de données surveillés et gérés par ClusterControl :
Largement utilisé dans le monde open source, Prometheus est assez facile à intégrer dans votre environnement existant à l'aide de plusieurs exportateurs.
RRDoutil
Cela pourrait être un exemple de base de données de séries chronologiques que de nombreuses personnes utilisent sans le savoir. RRDtool est un projet open source très populaire pour stocker et visualiser des données de séries chronologiques. Si vous avez déjà utilisé Cacti, il était basé sur RRDtool. Si vous avez conçu votre propre solution, il est fort probable que vous ayez également utilisé RRDtool comme backend pour stocker vos données. De nos jours, il n'est plus aussi populaire qu'avant, mais en 2000-2010, c'était le moyen le plus courant de stocker les données de séries chronologiques. Fait amusant - les premières versions de ClusterControl l'utilisaient.
Échelle de temps
TimeScale est une base de données de séries chronologiques développée au-dessus de PostgreSQL. Il s'agit d'une extension sur PostgreSQL, qui s'appuie sur le magasin de données sous-jacent pour fournir l'accès aux données, ce qui signifie qu'il accepte tout le SQL que vous souhaitez utiliser. En tant qu'extension, il utilise toutes les autres fonctionnalités et extensions de PostgreSQL. Vous pouvez mélanger des séries chronologiques et d'autres types de données, par exemple pour joindre des séries chronologiques et des métadonnées, enrichissant la sortie. Vous pouvez également effectuer un filtrage plus avancé en utilisant des JOIN et des tables non chronologiques. Tirer parti de la prise en charge du SIG dans PostgreSQL TimeScale peut facilement être utilisé pour suivre les emplacements géographiques au fil du temps. Il peut également tirer parti de toutes les possibilités de mise à l'échelle offertes par PostgreSQL, y compris la réplication.
Flux temporel
Amazon Web Services propose également une offre pour les bases de données de séries chronologiques. Timestream a été annoncé assez récemment, en novembre 2018. Il ajoute un autre magasin de données au portefeuille AWS, aidant cette fois les utilisateurs à gérer des données de séries chronologiques provenant de sources telles que les appareils Internet des objets ou les services surveillés. Il peut également être utilisé pour stocker des métriques dérivées de journaux créés par plusieurs services, permettant aux utilisateurs d'exécuter des requêtes analytiques sur ceux-ci, aidant à comprendre les modèles et les conditions dans lesquelles les services fonctionnent.
Timestream, comme la plupart des services AWS, offre un moyen simple de mise à l'échelle si le besoin de stockage et d'analyse des données augmente avec le temps.
Comme vous pouvez le voir, il existe de nombreuses options sur le marché et ce n'est pas surprenant. L'analyse de données de séries chronologiques gagne en popularité ces derniers temps, elle devient de plus en plus critique pour les opérations commerciales. Heureusement, étant donné le grand nombre d'offres, à la fois open source et commerciales, il est fort probable que vous puissiez trouver un outil qui répondra à vos besoins.