Apache Druid
# Apache Druid

Druid est une base de données distribuée, orientée colonnes et open source, écrite en Java. Druid est conçu pour ingérer rapidement d’énormes quantités de données d’événement et renvoyer les données avec un faible temps de latence. Le nom Druid fait référence aux druides de nombreux jeux de rôle, par analogie à l'aptitude de l'architecture du système à se métamorphoser pour résoudre différents types de problèmes de données.

Druid est couramment utilisé dans les applications d'informatique décisionnelle et de traitement analytique en ligne pour analyser de gros volumes de données historiques et en temps réel. Druid est utilisé en production par les sociétés technologiques telles que Alibaba, Airbnb, Cisco, eBay, Netflix, PayPal, Yahoo et Wikimedia Foundation.

## Historique

Druid a été lancé en 2011 pour alimenter le produit d'analyse de la société Metamarkets. Le projet a été open source sous licence GPL en octobre $2012^,$ et est passé à une licence Apache en février $2015^,.$

Au fil du temps, un certain nombre d’organisations et de sociétés ont intégré Druid dans leur back office et des committers de nombreuses organisations différentes ont été ajoutés.

En octobre 2015, la société commerciale Imply a été lancée pour fournir un produit d'entreprise construit autour de Druid.

En octobre 2018, Spicule Ltd a publié une version prise en charge de Druid sur la plate-forme Juju de Canonical.

## Architecture

Entièrement déployé, Druid s'exécute en tant que cluster de processus spécialisés (appelés nœuds dans Druid) afin de prendre en charge une architecture tolérante aux pannes les données sont stockées de manière redondante et en l'absence de point de défaillance unique. Le cluster inclut des dépendances externes pour la coordination (Apache ZooKeeper), le stockage de métadonnées (par exemple MySQL, PostgreSQL ou Derby) et une installation de stockage profond (par exemple HDFS ou Amazon S3) pour la sauvegarde permanente des données.

### Gestion des requêtes

Les requêtes du client sont d’abord envoyées aux nœuds broker, qui les transfèrent ensuite aux nœuds appropriés (historiques ou en temps réel). Comme les segments Druid peuvent être partitionnés, une requête entrante peut nécessiter des données provenant de plusieurs segments et partitions stockés sur différents nœuds du cluster. Les brokers peuvent savoir quels nœuds ont les données requises et fusionner ensuite des résultats partiels avant de renvoyer le résultat agrégé.

### Gestion de cluster

Les opérations relatives à la gestion des données dans les nœuds historiques sont supervisées par des nœuds de coordination. Apache ZooKeeper est utilisé pour enregistrer tous les nœuds, gérer certains aspects des communications entre nœuds et organiser des élections d'un leader.

## Caractéristiques

* Ingestion de données à faible latence (streaming)
* Exploration de données arbitraire sur les tranches
* Requêtes analytiques en moins d'une seconde
* Calculs approximatifs et exacts
