« A time series database (TSDB) is a software system that is optimized for handling time series data, arrays of numbers indexed by time. [...] A time series of stock prices might be called a price curve. A time series of energy consumption might be called a load profile. A log of temperature values over time might be called a temperature trace.Despite the disparate names, many of the same mathematical operations, queries, or database transactions are useful for analysing all of them. The implementation of a database that can correctly, reliably, and efficiently implement these operations must be specialized for time-series data. [...]
A workable implementation of a time series database can be deployed in a conventional SQL-based relational database provided that the database software supports both binary large objects (BLOBs) and user-defined functions. SQL statements that operate on one or more time series quantities on the same row of a table or join can easily be written, as the user-defined time series functions operate comfortably inside of a SELECT statement. However, time series functionality such as a SUM function operating in the context of a GROUP BY clause cannot be easily achieved. »
OpenTSDB est quand même limité :
* Problème d'optimisation dans le stockage hbase utilisé derrière ;
* Au-delà de fonctions de base (sum, union, moyenne,...), rien n'est proposé par OpenTSDB, ce qui est extrêmement limitant ;
Pour les usages avancés, une société commerciale, Cityzen Data (
http://www.cityzendata.com/), propose une infrastructure et un langage (Einstein) pour stocker et traiter les séries temporelles. Quelques points sur cette techno :
* Ça marche et plutôt bien : je pousse environ 37000 métriques par minute, toutes les minutes de chaque jour et la plateforme les acquitte en 1-2 secondes (stockage sécurisé dans kafka et traitement au fil de l'eau) :D ;
* La documentation (
https://api0.cityzendata.net/doc/) est plutôt faible : un gros effort est fait mais il y a encore des fonctions non documentées. Exemples : FINDSTATS pour obtenir des informations sur vos séries (erreurs, nombre d'éléments stockés,...) ou '<votre_token>' AUTHENTICATE <nombre> LIMIT pour remonter (avec FETCH) plus de métriques que la limite pré-configurée,... De plus, la documentation existante n'est pas toujours complète... Comme la documentation officielle est encore la seule source d'information disponible, c'est parfois difficile de s'y retrouver ;
* Système interopérable : les données se poussent sur la plateforme via une requête HTTP POST, elles se récupèrent au format JSON via une requête HTTP GET. Un mécanisme de push/pull via les websockets est aussi disponible. Les erreurs retournées sont claires et compréhensibles ;
* Un langage de manipulation des séries est proposé : Einstein. Il est exécuté côté serveur donc on récupère uniquement les métriques qui nous intéressent, après traitement. C'est un langage à pile (exemple : 1 60 * 60 * 'noSecondesInOneHour' STORE) dont la gymnastique n'est pas celle naturelle à notre cerveau donc il faut de l'entraînement et de la persévérence ;
* Peut être couplé avec Grafana (
https://github.com/CityzenDataOSS/grafana-warp) pour produire facilement des visualisations graphiques ;
* Limite : il manque encore des fonctions super utiles comme un TOP n sur les valeurs ou un SORT des séries sur leur valeur (pour les valeurs numériques, of course) :
* Pour le SORT par valeur, on est obligé d'avoir recours à des macros et à une projection orthogonale (car les séries peuvent être triées sur leurs abscisses (timestamp en temps normal, sans projection) avec les fonctions SORT/RSORT) ;
* Pour un TOP n, il faut se souvenir que la fonction SHRINK trie automatiquement la série (c'est dans la doc') par ordre croissant. Donc, si l'on veut récupérer les N plus grandes valeurs, il faut demander à SHRINK de prendre ces N valeurs à partir de la fin : « N -1 * SHRINK ». Petite subtilité : si N est pile le nombre d'éléments dans la GTS, SHRINK n'est pas exécutée et donc vos élements sont affichés sans être triés. Donc ceinture et bretelles : « (R)SORT N -1 * SHRINK ». :)
Une autre source d'information sur CZD : Domotique : Valoriser et exploiter les données chez GuiguiAbloc -
http://blog.guiguiabloc.fr/?p=1700