Apache Doris est un système de gestion de base de données analytique en temps réel, fondé sur une architecture MPP (Massively Paralel Processing). Il permet d’exécuter des requêtes complexes sur de très grands volumes de données avec des latences inférieures à la seconde. Grâce à sa simplicité d’utilisation, sa compatibilité SQL étendue et ses capacités hybrides (OLAP + point queries), il convient à divers cas d’usage tels que les tableaux de bord interactifs, l’analyse comportementale, les expériences A/B ou encore l’exploration de logs.
Cas d’usage principaux
- Analyse en temps réel : rapports dynamiques, décisions automatisées, analyse ad hoc multi-dimensionnelle.
- Fédération lac/entrepôt : accélération des requêtes sur des lacs de données (S3, HDFS, etc.), interrogation fédérée entre sources hétérogènes.
- Traitement de données semi-structurées : analyse efficace de logs, événements ou traces applicatives.
Architecture
Doris expose une interface compatible MySQL et supporte le SQL standard. Deux modes arhcitecturaux coexistent :
- Architecture intégrée (colocated) :
Frontend (FE): gère les requêtes, le planificateur, les métadonnées.Backend (BE): stocke les données et exécute les fragments de requête. Les données sont partitionnées en shards distribués avec réplication.
- Architecture dissociée (disaggregated) :
- Métadonnées : gestion centralisée via le FE.
- Calcul : groupes de BE élastiques et sans état.
- Stockage : couche partagée (S3, OSS, Ceph, etc.) contenant les fichiers de segments et index inversés.
Caractéristiques clés
- Haute disponibilité : réplication via protocole Quorum, tolérance aux pannes, basculement automatique.
- Compatibilité MySQL : connexion via clients MySQL standards, intégration transparente avec les outils BI.
- Entrepôt en temps réel : ingestion à la seconde près, moteur vectoriel et pipeline MPP pour des réponses sub-secondes.
- Modélisation flexible : support des modèles large table, étoile/flocon, vues matérialisées (mono-table synchrones, multi-table asynchrones).
Modèles de tables
Les tables Doris reposent sur une séparation entre colonnes-clés (key) et colonnes-valeurs (value). Trois modèles sont disponibles :
Modèle détaillé (Duplicate Key)
Conserve toutes les lignes insérées, même avec des clés identiques. Idéal pour les logs.
CREATE TABLE event_log (
ts DATETIME NOT NULL,
category INT NOT NULL,
message VARCHAR(1024)
)
DUPLICATE KEY(ts, category)
DISTRIBUTED BY HASH(category) BUCKETS 8;
Modèle clé unique (Unique Key)
Assure l’unicité des clés ; les mises à jour remplacent les anciennes valeurs.
CREATE TABLE user_profile (
uid BIGINT NOT NULL,
name VARCHAR(50) NOT NULL,
region VARCHAR(20)
)
UNIQUE KEY(uid)
DISTRIBUTED BY HASH(uid) BUCKETS 16
PROPERTIES ("enable_unique_key_merge_on_write" = "true");
Modèle agrégé (Aggregate Key)
Regroupe les lignes partageant la même clé et applique des fonctions d’agrégation prédéfinies.
CREATE TABLE daily_metrics (
user_id BIGINT NOT NULL,
dt DATE NOT NULL,
last_seen DATETIME REPLACE,
total_cost BIGINT SUM DEFAULT "0",
max_session INT MAX DEFAULT "0"
)
AGGREGATE KEY(user_id, dt)
DISTRIBUTED BY HASH(user_id) BUCKETS 12;
Les fonctions d’agrégation supportées incluent SUM, MAX, MIN, REPLACE, HLL_UNION, etc.
Indexation avancée
Doris implémente deux familels d’index :
- Index de point query :
- Index préfixe : index creux automatique sur les premières colonnes triées (toutes les 1024 lignes).
- Index inversé : mapping valeur → IDs de lignes, utile pour les recherches textuelles ou filtres égaux.
- Index de saut (skip indexes) :
- ZoneMap : min/max/null par bloc — activé par défaut.
- BloomFilter : filtre probabiliste pour les colonnes à cardinalité élevée.
- NGram BloomFilter : accélération des requêtes
LIKEvia segmentation en n-grammes.
Exemple de création d’un index inversé :
CREATE INDEX idx_msg ON event_log(message) USING INVERTED;
Pour activer un BloomFilter lors de la création de table :
PROPERTIES ("bloom_filter_columns" = "uid,category");
Gestion du schéma
Les modifications de schéma sont classées en deux catégories :
| Type | Léger | Lourd |
|---|---|---|
| Opérations | Ajout/suppression de colonnes value, renommage |
Changement de type, modification de clé, réordonnancement |
| Durée | Instantané | Minutes à heures (dépend de la taille) |
| Réécriture | Non | Oui |
Types de données et agrégations avancées
Doris prend en charge des types spécialisés comme BITMAP, HLL, JSON, ARRAY, etc. (non utilisables comme clés).
Pour les requêtes analytiques, Doris supporte :
- Fenêtres (
ROW_NUMBER(),SUM() OVER()) - Fonctions d’approximation :
APPROX_COUNT_DISTINCT(),PERCENTILE_CONT() - Agrégations multi-niveaux :
ROLLUP,CUBE,GROUPING SETS