VT2020-QuestDB-Fiche
QuestDB est la base de données Open Source axée sur les séries temporelles la plus rapide.
Résumé
QuestDB est une extension du ANSI SQL classique. Il permet d'utiliser de nouvelles options lors des requêtes pour manipuler les données temporelles. La manière d'effectuer les lectures et écritures dans les tables de données à totalement était repensée et optimisée, afin d'avoir des temps d’exécution très court. L'outil dispose d'une console web intégrée, mais est également accessible à travers des requêtes REST, Postgre, et InfluxDB. Ses différentes fonctionnalités en font un outil parfait pour les entreprises qui utilisent des données temporelles précises.
Concepts
Modèle de stockage
QuestDB utilise un modèle de stockage basé sur les colonnes. Chaque colonne d'une table est stockée dans un fichier séparé. Chaque nouvelle entrée dans une table est ajoutée à la fin de chaque fichier colonne ("append"), de manière a pouvoir récupérer des données dans le même ordre qu'elles ont été ajoutées.
Écriture
Les écritures dans une tables sont effectuées à la fin de chaque fichier table une par une. La fin d'un fichier colonne est mappée dans une page mémoire de la RAM, l'ajout est donc essentiellement une écriture en mémoire. Une fois que la page mémoire est remplie, elle est dé-mappé et une nouvelle page est construite. Les données sont donc écrites dans le disque dur au moment du dé-mappage.
Cette méthode d'écriture a été conçue pour assurer un temps consistent en écriture, et une consommation de ressources minimale.
Lecture
Si les données de la colonne ont une taille fixe (comme un int par exemple), alors la donnée en lecture est accessible grâce à un shift de bits, qui donne un offset dans le fichier. Cet offset est ensuite transformé en un offset dans la page mémoire correspondante, d'où on récupère la valeur.
Atomicité
QuestDB assure que les tables sont consistantes avec l'utilisation de l'atomicité pour les mise à jour. Chaque écriture, une fois effectuée, produit un commit qui valide l'insertion. Si il y a un problème, il n'y a pas de commit et donc l'opération est rollback. Les métadonnées sont stockées dans un fichier séparé. Il sert notamment à empêcher la lecture de données non commité.
"designated timestamp"
L'attribut "designated timestamp" permet de spécifier une colonne dans une table qui aura des fonctionnalités supplémentaire. Effectuer des requêtes sur une colonne qui possède l'attribut réduit grandement le temps d’exécution.
Propriétés
- Une seule colonne peut être désignée "designated timestamp" par table.
- Seule une colonne "timestamp" peut être désignée.
- L'attribut se fixe uniquement lors de la création d'un table ou d'une sous-table.
- Une fois qu'une colonne possède l'attribut, il n'est plus possible d'insérer des données plus ancienne que la dernière ajoutée.
Avantages
En plus du temps réduit de requête, "designated timestamp" offre d'autres avantages :
- Créer des partitions de tables.
- Utiliser des JOIN sur le temps, comme "ASOF JOIN".
Partitions
QuestDB permet de partitionner les données en fonction du temps. Chaque partition est stockée dans un fichier différent.
Propriétés
- Les partitions peuvent être crée par intervalle de jours, mois, ou année. (DAY, MONTH, YEAR)
- Par défaut, un table n'est pas partitionnée. (NONE)
- Une partition est définie lors de la création d'une table.
Avantages
Symboles
Propriétés
Avantages
Indexes
Avantages
Extensions SQL
Nouvelles clauses
Simplifications
Utilisation
Installation
Exécution
Références
Veille Technologique 2020
- Année : VT2020
- Sujet : QuestDB
- Présentation
- Démonstration
- Auteurs : Tom Graugnard