ClickHouse

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher
ClickHouse
Logo

Développeur Yandex
Dernière version 1.1.54284
Écrit en C++
Licence Apache
Site web https://clickhouse.yandex/

ClickHouse est un logiciel libre de Base de données (DBMS) orientée colonnes pour le Traitement analytique en ligne (OLAP).

ClickHouse a été développé par la société russe Yandex pour le service d'analyse web Yandex.Metrica[1],[2],[3],[4]. ClickHouse permet l'analyse de données mises à jour en temps réel. Ce système est développé pour la haute performance[5].

Le projet a été publié sous forme de logiciel libre sous les termes de la Licence Apache en juin 2016[6].

ClickHouse est utilisé par la suite de test Yandex.Tank[6]. Yandex.Market utilise ClickHouse pour surveiller l’accessibilité de sites et KPIs[7]. ClickHouse a aussi été déployé au CERN LHCb[8] pour stocker et traiter les métadonnées de 10 milliards d’événements contenant 1000 attributs chacun, et Tinkoff Bank utilise ClickHouse comme stockage de données pour l'un de ces projets[9]. ClickHouse est également utilisé par Cloudflare pour stocker et traiter les logs provenant de ses serveurs DNS[10].

Historique[modifier | modifier le code]

Yandex.Metrica utilisait précédemment une approche plus classique lorsque les données brutes étaient stockées dans une forme agrégée[11]. Cette approche permet de réduire la quantité de données stockée. Cependant, elle possède plusieurs désavantages et limitations:

  • La liste des rapports disponibles doit être pré-déterminé, sans possibilité de faire un rapport personnalisé.
  • Le volume de données peut augmenter après agrégation. Cela se produit quand les données sont agrégées avec un grand nombre de clés ou en utilisant des clés à grandes cardinalité (comme les URL).
  • Il est difficile de gérer la consistance logique autour des rapports contenant différentes agrégations.

Une approche différente consiste dans le stockage de données non agrégées. Traiter des données brutes requiert un système haute-performance, car tous les calculs sont faits en temps réel. Pour résoudre ce problème, une base de données orientée colonnes est requise afin de pouvoir évoluer à l’échelle d'Internet. Yandex commença donc à développer sa propre solution. Le premier prototype de ClickHouse est apparu en 2009. À la fin de l’année 2014, Yandex.Metrica version 2.0 est publié. La nouvelle version possède une interface pour créer des rapports personnalisés et utilise ClickHouse pour le stockage et le traitement des données.

Caractéristiques[modifier | modifier le code]

Les principales caractéristiques de ClickHouse sont[12]:

  • Véritable base de données orientée colonnes. Rien n'est stocké avec les valeurs. Par exemple, les valeurs de tailles fixes sont gérées pour éviter de stocker leur taille à coté des valeurs.
  • Extension linéaire. Il est possible d’étendre un cluster en ajoutant des serveurs.
  • Tolérance aux pannes. Le système est un cluster de fragments, dans lequel chaque fragment est un groupe de replicas. ClickHouse utilise une réplication multi-master asynchrone. Les données sont écrites sur n'importe lequel des replicas disponibles, puis distribuées sur les replicas restants. ZooKeeper est utilise pour synchroniser les processus, mais ne participe pas aux traitements et à l’exécution des requêtes.
  • Capacité à stocker et traiter plusieurs péta-octets de données.
  • prise en charge de SQL. ClickHouse prend en charge un langage étendu proche de SQL qui inclut les tableaux et les structures de données imbriquées, les approximations et les fonctions URI, et permet la connexion à un stockage clé-valeur externe.
  • Haute performance.[13]
    • Les calculs par vecteurs sont utilisés. Les données sont stockées seulement par colonnes, mais sont traitées par vecteurs (portions de colonnes). Cette approche permet d'atteindre de hautes performances CPU.
    • Les calculs par approximation et l’échantillonnage sont gérés.
    • Les traitements de requêtes distribuées et parallèles sont disponibles (incluant les JOINs).
  • Compression de données.
  • Optimisation pour les disques durs. Le système peut traiter des données qui ne tiennent pas en Mémoire vive.
  • Clients pour la connexion a la base de données. Les options de connexion a la base de données inclut le client en mode console, HTTP API, ou l'un des wrappers (les wrappers sont disponible pour Python, PHP[14], NodeJS[15], Perl[16], Ruby[17] et R[18]). Un driver JDBC est également disponible pour ClickHouse[19].
  • Documentation détaillée.

Limitations[modifier | modifier le code]

ClickHouse possède plusieurs caractéristiques pouvant être considéré comme des désavantages:

  • Aucune gestion des transactions.
  • Par défaut, quand on effectue des agrégations, les états de la requête intermédiaire doivent tenir en RAM sur un serveur unique. Cependant, peut être configuré afin de déborder sur le disque dans ce cas de figure.
  • Un manque dans l’implémentation complète des UPDATE/DELETE.

Cas d'usage[modifier | modifier le code]

ClickHouse est également conçu pour pour les requêtes OLAP[12].

  • Cela fonctionne pour un petit nombre de tables qui contiennent un grand nombre de colonnes.
  • Les requêtes peuvent utiliser un grand nombre de lignes extraient de la BDD, mais seulement un sous-ensemble de colonnes.
  • Les requêtes sont relativement rare (autour de 100 RPS par serveur).
  • Pour des requêtes simples, des latences d'environ 50 ms sont acceptables.
  • Les valeurs de colonnes sont raisonnablement petites, consistant en des nombres et de petites chaînes de caractères (par exemple, 60 octets par URL).
  • Un haut débit est requis lorsque l'on traite une requête simple (jusqu’à plusieurs milliards de lignes par seconde par serveur).
  • Un résultat de requête est souvent filtré et agrégé.
  • La mise à jour des données utilise un scenario simple (souvent un batch, sans transactions complexes).

Un des cas courants de ClickHouse serveur est l'analyse de logs. Après avoir peuplé des données dans ClickHouse (il est recommandé d’insérer des données avec un relativement gros batch contenant plus de 1000 lignes), il est possible d'analyser les incidents avec des requêtes instantanées ou de surveiller les métriques du service, comme le taux d'erreurs, les temps de réponses, etc.

ClickHouse peut aussi être utilisé comme entrepôt de données pour de l'analyse en interne. ClickHouse peut stocker des données de différents systèmes (par exemple Hadoop ou certain logs) et les analystes peuvent construire des tableaux de visualisations avec les données ou réaliser des analyses temps réels à des fins commerciales.

Résultats de benchmark[modifier | modifier le code]

Selon les tests de performance conduit par les développeurs[13], pour les requetes OLAP, ClickHouse est plus de 100 fois plus rapide que Hive (une BDD basé sur la technologie Hadoop) ou MySQL (RDBMS).

Références[modifier | modifier le code]

(en) Cet article est partiellement ou en totalité issu de l’article de Wikipédia en anglais intitulé « ClickHouse » (voir la liste des auteurs).

  1. (en) « Usage Statistics and Market Share of Traffic Analysis Tools for Websites, November 2016 », sur w3techs.com
  2. (en) Datanyze, « Analytics Market Share Report | Competitor Analysis | Google Analytics, Google Universal Analytics, Yandex Metrica », sur Datanyze
  3. Wappalyzer, « Analytics »(ArchiveWikiwixArchive.isGoogleQue faire ?), sur wappalyzer.com,
  4. « Analytics - SEOMON.com », sur seomon.com
  5. (en) « ClickHouse: High-Performance Distributed DBMS for Analytics | Percona Live Amsterdam - Open Source Database Conference 2016 », sur www.percona.com,
  6. a et b (ru) « Яндекс открывает ClickHouse »
  7. (ru) « Здоровье Маркета: как мы превращаем логи в графики, Дмитрий Андреев (Яндекс) — События Яндекса », sur events.yandex.ru
  8. (en) « Yandex — Yandex Launches Search Tool for LHC Events at CERN », Yandex,‎ (lire en ligne)
  9. (ru) « Сравнение аналитических in-memory баз данных »
  10. « How Cloudflare analyzes 1M DNS queries per second »
  11. (ru) « Эволюция структур данных в Яндекс.Метрике »
  12. a et b (en) « ClickHouse Guide », sur clickhouse.yandex
  13. a et b « Performance comparison of analytical DBMS », sur clickhouse.yandex
  14. (en) « smi2/phpClickHouse », sur GitHub
  15. (en) « apla/node-clickhouse », sur GitHub
  16. (en) « elcamlost/perl-DBD-ClickHouse », sur GitHub
  17. (en) « archan937/clickhouse », sur GitHub
  18. (en) « hannesmuehleisen/clickhouse-r », sur GitHub
  19. (en) « yandex/clickhouse-jdbc », sur GitHub

External links[modifier | modifier le code]