Passage à ClickHouse : 3 ans plus tard

Il y a trois ans, Viktor Tarnavsky et Alexey Milovidov de Yandex sur scène HighLoad ++ dit, quel ClickHouse est bon et comment il ne ralentit pas. Et à l'étape suivante, c'était Alexander Zaitsev с rapport sur le déménagement vers Cliquez Maison à partir d'un autre SGBD analytique et avec la conclusion que Cliquez Maison, bien sûr, c'est bien, mais pas très pratique. Lorsqu'en 2016 l'entreprise LifeStreet, où Alexander travaillait alors, convertissait un système analytique de plusieurs pétaoctets en Cliquez Maison, c'était une fascinante "route de briques jaunes", pleine de dangers inconnus - Cliquez Maison alors cela ressemblait à un champ de mines.

Trois ans plus tard Cliquez Maison est devenu bien meilleur - pendant ce temps, Alexander a fondé la société Altinity, qui aide non seulement à déménager Cliquez Maison des dizaines de projets, mais améliore également le produit lui-même avec des collègues de Yandex. Maintenant Cliquez Maison ce n'est toujours pas une promenade insouciante, mais ce n'est plus un champ de mines.

Alexander travaille avec des systèmes distribués depuis 2003, développant de grands projets sur MySQL, Oracle и Vertica. À la dernière HighLoad ++ 2019 Alexander, l'un des pionniers de l'utilisation Cliquez Maison, a expliqué ce qu'est ce SGBD maintenant. Nous découvrirons les principales fonctionnalités Cliquez Maison: en quoi il diffère des autres systèmes et dans quels cas il est plus efficace de l'utiliser. À l'aide d'exemples, considérons de nouvelles pratiques éprouvées par des projets pour construire des systèmes basés sur Cliquez Maison.


Rétrospective : ce qui s'est passé il y a 3 ans

Il y a trois ans, nous avons transféré l'entreprise LifeStreet sur Cliquez Maison à partir d'une autre base de données d'analyse, et la migration de l'analyse du réseau publicitaire ressemblait à ceci :

  • Juin 2016. Dans Open source est apparu Cliquez Maison et avons commencé notre projet ;
  • Août Preuve de concept: grand réseau publicitaire, infrastructure et 200-300 téraoctets de données ;
  • Octobre. Premières données de production ;
  • Décembre. Charge complète du produit : 10 à 50 milliards d'événements par jour.
  • Juin 2017. Migration réussie des utilisateurs vers Cliquez Maison, 2,5 pétaoctets de données sur un cluster de 60 serveurs.

À mesure que la migration progressait, on comprit de plus en plus que Cliquez Maison est un bon système avec lequel il est agréable de travailler, mais il s'agit d'un projet interne de Yandex. Il y a donc des nuances : Yandex s'occupera d'abord de ses propres clients internes et ensuite seulement de la communauté et des besoins des utilisateurs externes, tandis que ClickHouse n'atteignait alors pas le niveau de l'entreprise dans de nombreux domaines fonctionnels. Ainsi, en mars 2017, nous avons fondé Altinity pour faire Cliquez Maison encore plus rapide et plus pratique non seulement pour Yandex, mais aussi pour les autres utilisateurs. Et maintenant nous :

  • Nous formons et aidons à construire des solutions basées sur Cliquez Maison pour que les clients n'aient pas d'ennuis et que la solution fonctionne finalement ;
  • Nous fournissons une assistance 24h/7 et XNUMXj/XNUMX Cliquez Maison- les installations ;
  • Nous développons nos propres projets d'écosystèmes ;
  • Nous nous engageons activement envers nous-mêmes Cliquez Maison, répondant aux demandes des utilisateurs qui souhaitent voir certaines fonctionnalités.

Et bien sûr, nous aidons au déménagement vers Cliquez Maison с MySQL, Vertica, Oracle, Prune verte, Redshift et d'autres systèmes. Nous avons participé à diverses démarches, et elles ont toutes été couronnées de succès.

Passage à ClickHouse : 3 ans plus tard

Pourquoi déménager vers Cliquez Maison

Ne ralentit pas ! C’est la raison principale. Cliquez Maison - base de données très rapide pour différents scénarios :

Passage à ClickHouse : 3 ans plus tard

Citations aléatoires de personnes qui travaillent avec Cliquez Maison.

Évolutivité. Sur une autre base de données, vous pouvez obtenir de bonnes performances sur un seul élément matériel, mais Cliquez Maison vous pouvez évoluer non seulement verticalement, mais également horizontalement, simplement en ajoutant des serveurs. Tout ne se passe pas aussi bien que nous le souhaiterions, mais ça marche. Vous pouvez étendre le système à mesure que votre entreprise se développe. Il est important que nous ne soyons pas limités par la solution actuelle et qu’il existe toujours un potentiel de développement.

Portabilité. Il n’y a aucun attachement à une chose. Par exemple, avec Redshift d'Amazon difficile de déménager quelque part. UN Cliquez Maison vous pouvez le mettre sur votre ordinateur portable, votre serveur, le déployer sur le cloud, accéder à Kubernetes - il n'y a aucune restriction sur l'exploitation de l'infrastructure. C'est pratique pour tout le monde, et c'est un grand avantage dont de nombreuses autres bases de données similaires ne peuvent se vanter.

Flexibilité. Cliquez Maison ne s'arrête pas à une chose, par exemple Yandex.Metrica, mais se développe et est utilisé dans de plus en plus de projets et d'industries différents. Il peut être étendu en ajoutant de nouvelles capacités pour résoudre de nouveaux problèmes. Par exemple, on pense que stocker les journaux dans une base de données est une mauvaise manière, ils ont donc proposé ElasticSearch. Mais grâce à la flexibilité Cliquez Maison, vous pouvez également y stocker des journaux, et souvent c'est encore mieux que dans ElasticSearch - dans Cliquez Maison cela nécessite 10 fois moins de fer.

libre Open source. Vous n'avez rien à payer. Pas besoin de négocier l'autorisation pour installer le système sur votre ordinateur portable ou votre serveur. Il n'y a pas de frais cachés. Dans le même temps, aucune autre technologie de base de données Open Source ne peut rivaliser en vitesse avec Cliquez Maison. MySQL, MariaDB, Greenplum - ils sont tous beaucoup plus lents.

Communauté, conduite et amusement. En Cliquez Maison excellente communauté : rencontres, chats et Alexey Milovidov, qui nous charge tous de son énergie et de son optimisme.

Passer à ClickHouse

Pour passer à Cliquez Maison avec quelque chose, vous n'avez besoin que de trois choses :

  • Comprendre les limites Cliquez Maison et à quoi il ne convient pas.
  • Profitez des avantages la technologie et ses plus grands atouts.
  • Expérience. Même en sachant comment ça marche Cliquez Maison, il n’est pas toujours possible de prédire quand la situation sera plus rapide, quand elle sera plus lente, quand elle sera meilleure et quand elle sera pire. Alors essayez.

Le problème du déménagement

Il n'y a qu'un seul "mais" : si vous déménagez Cliquez Maison avec autre chose, quelque chose ne va généralement pas. Nous sommes habitués à certaines pratiques et choses qui fonctionnent dans notre base de données préférée. Par exemple, toute personne travaillant avec SQL-databases, considère l'ensemble de fonctions suivant comme obligatoire :

  • transactions;
  • contraintes;
  • cohérence;
  • des index;
  • MISE À JOUR/SUPPRIMER;
  • NULL;
  • millisecondes ;
  • conversions de types automatiques ;
  • plusieurs jointures ;
  • partitions arbitraires ;
  • outils de gestion de clusters.

Le recrutement est obligatoire, mais il y a trois ans Cliquez Maison il n'y avait aucune de ces fonctionnalités ! Il reste désormais moins de la moitié des éléments non réalisés : transactions, contraintes, cohérence, millisecondes et conversion de type.

Et l'essentiel est que dans Cliquez Maison certaines pratiques et approches standards ne fonctionnent pas ou ne fonctionnent pas comme nous en avons l’habitude. Tout ce qui apparaît dans Cliquez Maison, Correspond à "cliquez sur le chemin de la maison", c'est à dire. les fonctions sont différentes des autres bases de données. Par exemple:

  • Les index ne sont pas sélectionnés, mais ignorés.
  • MISE À JOUR/SUPPRIMER pas synchrone, mais asynchrone.
  • Il existe plusieurs jointures, mais il n'y a pas de planificateur de requêtes. La manière dont ils sont ensuite exécutés n’est généralement pas très claire pour les personnes du monde des bases de données.

Scénarios ClickHouse

En 1960, un mathématicien américain d'origine hongroise WignerEP a écrit un article "L'efficacité déraisonnable des mathématiques dans les sciences naturelles» (« L'efficacité incompréhensible des mathématiques dans les sciences naturelles ») que le monde qui nous entoure est, pour une raison quelconque, bien décrit par les lois mathématiques. Les mathématiques sont une science abstraite et les lois physiques exprimées sous forme mathématique ne sont pas triviales. WignerEP a souligné que c'était très étrange.

De mon point de vue, Cliquez Maison - la même bizarrerie. Pour reformuler Wigner, nous pouvons dire ceci : étonnante est l’efficacité inconcevable Cliquez Maison dans une grande variété d’applications analytiques !

Passage à ClickHouse : 3 ans plus tard

Par exemple, prenons Entrepôt de données en temps réel, dans lequel les données sont chargées presque continuellement. Nous souhaitons recevoir ses demandes avec un deuxième délai. Veuillez utiliser Cliquez Maison, car c'est le scénario pour lequel il a été conçu. Cliquez Maison c'est ainsi qu'il est utilisé non seulement sur le Web, mais aussi dans le marketing et l'analyse financière, AdTech, ainsi que dans Détection de frauden. DANS Entrepôt de données en temps réel un schéma structuré complexe tel que "étoile" ou "flocon de neige" est utilisé, de nombreux tableaux avec INSCRIPTION (parfois multiples), et les données sont généralement stockées et modifiées dans certains systèmes.

Prenons un autre scénario - Des séries chronologiques: dispositifs de surveillance, réseaux, statistiques d'utilisation, internet des objets. Nous rencontrons ici des événements assez simples ordonnés dans le temps. Cliquez Maison n'a pas été développé à l'origine pour cela, mais s'est avéré efficace, c'est pourquoi les grandes entreprises utilisent Cliquez Maison comme référentiel pour le suivi des informations. Pour voir si ça rentre Cliquez Maison pour les séries temporelles, nous avons réalisé un benchmark basé sur l'approche et les résultats InfluxDB и Échelle de tempsDB - spécialisé des séries chronologiques bases de données. Il s'est avéréQue Cliquez Maison, même sans optimisation pour de telles tâches, gagne également sur un domaine étranger :

Passage à ClickHouse : 3 ans plus tard

В des séries chronologiques Habituellement, un tableau étroit est utilisé - plusieurs petites colonnes. De nombreuses données peuvent provenir de la surveillance (des millions d'enregistrements par seconde) et elles arrivent généralement par petites rafales (en temps réel streaming). Par conséquent, un script d'insertion différent est nécessaire et les requêtes elles-mêmes ont leurs propres spécificités.

Log Management. La collecte de journaux dans une base de données est généralement mauvaise, mais Cliquez Maison cela peut être fait avec quelques commentaires comme décrit ci-dessus. De nombreuses entreprises utilisent Cliquez Maison juste pour ça. Dans ce cas, nous utilisons une table plate et large où nous stockons l'intégralité des journaux (par exemple, sous la forme JSON), ou coupé en morceaux. Les données sont généralement chargées en gros lots (fichiers) et nous recherchons par champ.

Pour chacune de ces fonctions, des bases de données spécialisées sont généralement utilisées. Cliquez Maison on peut tout faire et si bien qu'on les surpasse. Regardons maintenant de plus près des séries chronologiques scénario, et comment « cuisiner » correctement Cliquez Maison dans ce scénario.

Des séries chronologiques

C'est actuellement le scénario principal pour lequel Cliquez Maison considérée comme la solution standard. Des séries chronologiques est un ensemble d'événements classés dans le temps représentant les changements dans certains processus au fil du temps. Par exemple, il peut s'agir de la fréquence cardiaque quotidienne ou du nombre de processus dans le système. Tout ce qui donne au temps un tic-tac avec certaines dimensions est des séries chronologiques:

Passage à ClickHouse : 3 ans plus tard

La plupart de ces événements proviennent de la surveillance. Il peut s'agir non seulement de surveillance Web, mais également d'appareils réels : voitures, systèmes industriels, IdO, des taxis de production ou sans pilote, dans le coffre desquels Yandex met déjà Cliquez Maison-serveur.

Par exemple, certaines entreprises collectent des données sur les navires. Toutes les quelques secondes, les capteurs d’un porte-conteneurs envoient des centaines de mesures différentes. Les ingénieurs les étudient, construisent des modèles et tentent de comprendre l'efficacité avec laquelle le navire est utilisé, car un porte-conteneurs ne devrait pas rester inactif ne serait-ce qu'une seconde. Tout temps d'arrêt est une perte d'argent, il est donc important de prévoir l'itinéraire afin que les arrêts soient minimes.

On assiste désormais à une multiplication de bases de données spécialisées qui mesurent des séries chronologiques. Sur place Moteurs DB D'une manière ou d'une autre, différentes bases de données sont classées et peuvent être visualisées par type :

Passage à ClickHouse : 3 ans plus tard

Le type à la croissance la plus rapide des séries chronologiquess. Les bases de données graphiques se développent également, mais des séries chronologiquesLes ventes ont connu une croissance plus rapide ces dernières années. Les représentants typiques de cette famille de bases de données sont InfluxDB, Prométhée, KDB, Échelle de tempsDB (construit sur PostgreSQL), les solutions de Amazon. Cliquez Maison peut être utilisé ici aussi, et est utilisé. Permettez-moi de vous donner quelques exemples publics.

L'un des pionniers est l'entreprise CloudFlare (CANfournisseur). Ils surveillent leur CAN à travers Cliquez Maison (DNS-les demandes, HTTP-requêtes) avec une charge énorme - 6 millions d'événements par seconde. Tout passe par Kafka, va à Cliquez Maison, qui offre la possibilité de voir des tableaux de bord des événements dans le système en temps réel.

Comcast - l'un des leaders des télécommunications aux Etats-Unis : Internet, télévision numérique, téléphonie. Ils ont créé un système de contrôle similaire CAN à l'intérieur Open source projet Contrôle du trafic Apache pour travailler avec vos énormes données. Cliquez Maison utilisé comme backend pour l’analyse.

Percône intégré Cliquez Maison à l'intérieur de ton PMMpour stocker le suivi de divers MySQL.

Exigences particulières

Les bases de données de séries chronologiques ont leurs propres exigences spécifiques.

  • Insertion rapide depuis de nombreux agents. Nous devons insérer très rapidement les données de nombreux flux. Cliquez Maison le fait bien, car il a tous les inserts non bloquants. N'importe lequel insérer est un nouveau fichier sur le disque et les petites insertions peuvent être mises en mémoire tampon d'une manière ou d'une autre. DANS Cliquez Maison il est préférable d'insérer les données par lots plutôt que ligne par ligne.
  • Circuit flexible. la des séries chronologiques nous ne connaissons généralement pas complètement la structure des données. Il est possible de créer un système de surveillance pour une application spécifique, mais il est alors difficile de l'utiliser pour une autre application. Cela nécessite un système plus flexible. Cliquez Maison, vous permet de le faire, même s'il s'agit d'une base fortement typée.
  • Stockage efficace et « oubli » des données. Habituellement dans des séries chronologiques une énorme quantité de données, elles doivent donc être stockées aussi efficacement que possible. Par exemple, à InfluxDB une bonne compression est sa principale caractéristique. Mais en plus du stockage, il faut aussi pouvoir « oublier » les anciennes données et faire quelques downsampling — comptage automatique des agrégats.
  • Requêtes rapides sur des données agrégées. Parfois, il est intéressant d'examiner les 5 dernières minutes avec une précision de quelques millisecondes, mais pour les données mensuelles, une granularité à la minute ou à la seconde peut ne pas être nécessaire - les statistiques générales suffisent. Un tel soutien est nécessaire, sinon une demande de 3 mois prendra beaucoup de temps à être complétée, même en Cliquez Maison.
  • Des demandes comme "dernier point, dès». Ceux-ci sont typiques pour des séries chronologiques requêtes : regarder la dernière mesure ou l'état du système à un instant donné t. Ce ne sont pas des requêtes très agréables pour une base de données, mais il faut aussi pouvoir les exécuter.
  • série chronologique de "collage". Des séries chronologiques est une série chronologique. S’il existe deux séries chronologiques, elles doivent souvent être connectées et corrélées. Il n'est pas pratique de faire cela sur toutes les bases de données, en particulier avec des séries temporelles non alignées : voici quelques repères temporels, il y en a d'autres. On peut considérer la moyenne, mais du coup il y aura quand même un trou, donc ce n'est pas clair.

Voyons comment ces exigences sont remplies dans Cliquez Maison.

Conduire

В Cliquez Maison régime pour des séries chronologiques peut être effectué de différentes manières, en fonction du degré de régularité des données. Il est possible de construire un système sur des données régulières lorsque l’on connaît toutes les métriques à l’avance. Par exemple, est-ce que CloudFlare avec surveillance CAN est un système bien optimisé. Vous pouvez créer un système plus général qui surveille l’ensemble de l’infrastructure et divers services. Dans le cas de données irrégulières, nous ne savons pas à l’avance ce que nous surveillons – et c’est probablement le cas le plus courant.

données régulières. Colonnes. Le schéma est simple - des colonnes avec les types nécessaires :

CREATE TABLE cpu (
  created_date Date DEFAULT today(),  
  created_at DateTime DEFAULT now(),  
  time String,  
  tags_id UInt32,  /* join to dim_tag */
  usage_user Float64,  
  usage_system Float64,  
  usage_idle Float64,  
  usage_nice Float64,  
  usage_iowait Float64,  
  usage_irq Float64,  
  usage_softirq Float64,  
  usage_steal Float64,  
  usage_guest Float64,  
  usage_guest_nice Float64
) ENGINE = MergeTree(created_date, (tags_id, created_at), 8192);

Il s'agit d'un tableau standard qui surveille une sorte d'activité de démarrage du système (utilisateur, combustion propre, ralenti, agréable). Simple et pratique, mais pas flexible. Si nous voulons un schéma plus flexible, nous pouvons utiliser des tableaux.

Données irrégulières. Tableaux:

CREATE TABLE cpu_alc (
  created_date Date,  
  created_at DateTime,  
  time String,  
  tags_id UInt32,  
  metrics Nested(
    name LowCardinality(String),  
    value Float64
  )
) ENGINE = MergeTree(created_date, (tags_id, created_at), 8192);

SELECT max(metrics.value[indexOf(metrics.name,'usage_user')]) FROM ...

structure Niché sont deux tableaux : métriques.nom и métriques.valeur. Ici, vous pouvez stocker des données de surveillance arbitraires sous forme d'un tableau de noms et d'un tableau de mesures pour chaque événement. Pour une optimisation plus poussée, plusieurs de ces structures peuvent être réalisées au lieu d'une. Par exemple, un pour flotter-valeur, un autre - pour int-c'est-à-dire parce que int Je veux stocker plus efficacement.

Mais une telle structure est plus difficile d’accès. Vous devrez utiliser une construction spéciale, en utilisant des fonctions spéciales pour extraire d'abord les valeurs de l'index puis du tableau :

SELECT max(metrics.value[indexOf(metrics.name,'usage_user')]) FROM ...

Mais cela fonctionne quand même assez vite. Une autre façon de stocker des données irrégulières consiste à utiliser des lignes.

Données irrégulières. Cordes. De cette manière traditionnelle, sans tableaux, les noms et les valeurs sont stockés en même temps. Si 5 000 mesures proviennent d'un seul appareil à la fois, 5 000 lignes sont générées dans la base de données :

CREATE TABLE cpu_rlc (
  created_date Date,  
  created_at DateTime,  
  time String,  
  tags_id UInt32,  
  metric_name LowCardinality(String),  
  metric_value Float64
) ENGINE = MergeTree(created_date, (metric_name, tags_id, created_at), 8192);


SELECT 
    maxIf(metric_value, metric_name = 'usage_user'),
    ... 
FROM cpu_r
WHERE metric_name IN ('usage_user', ...)

Cliquez Maison fait face à cela - il a des extensions spéciales Cliquez Maison SQL. Par exemple, maxSi — une fonction spéciale qui calcule le maximum par une métrique lorsqu'une condition est remplie. Vous pouvez écrire plusieurs expressions de ce type dans une seule requête et calculer immédiatement la valeur de plusieurs métriques.

Comparons trois approches :

Passage à ClickHouse : 3 ans plus tard

Les détails

Ici, j'ai ajouté "Taille des données sur le disque" pour certains ensembles de données de test. Dans le cas des colonnes, nous avons la plus petite taille de données : compression maximale, vitesse de requête maximale, mais nous payons en devant tout réparer en même temps.

Dans le cas des tableaux, les choses sont un peu pires. Les données se compressent toujours bien et il est possible de stocker un motif irrégulier. Mais Cliquez Maison - une base de données de colonnes, et lorsque nous commençons à tout stocker dans un tableau, elle se transforme en une base de données de chaînes, et nous payons pour la flexibilité par l'efficacité. Pour toute opération, vous devrez lire l'intégralité du tableau en mémoire, puis y trouver l'élément souhaité - et si le tableau s'agrandit, la vitesse se dégrade.

Dans l'une des entreprises qui utilisent cette approche (par exemple, Uber), les tableaux sont découpés en morceaux de 128 éléments. Les données de plusieurs milliers de métriques avec un volume de 200 To de données/jour ne sont pas stockées dans une seule baie, mais dans 10 ou 30 baies avec une logique de stockage particulière.

L'approche la plus simple consiste à utiliser des chaînes. Mais les données sont mal compressées, la taille du tableau est grande, et même lorsque les requêtes sont basées sur plusieurs métriques, ClickHouse ne fonctionne pas de manière optimale.

schéma hybride

Supposons que nous ayons choisi un schéma de tableau. Mais si nous savons que la plupart de nos tableaux de bord affichent uniquement les métriques utilisateur et système, nous pouvons en outre matérialiser ces métriques en colonnes à partir d'un tableau au niveau de la table de cette manière :

CREATE TABLE cpu_alc (
  created_date Date,  
  created_at DateTime,  
  time String,  
  tags_id UInt32,  
  metrics Nested(
    name LowCardinality(String),  
    value Float64
  ),
  usage_user Float64 
             MATERIALIZED metrics.value[indexOf(metrics.name,'usage_user')],
  usage_system Float64 
             MATERIALIZED metrics.value[indexOf(metrics.name,'usage_system')]
) ENGINE = MergeTree(created_date, (tags_id, created_at), 8192);

Une fois collé Cliquez Maison les comptera automatiquement. De cette façon, vous pouvez joindre l'utile à l'agréable : le schéma est flexible et général, mais nous avons sélectionné les colonnes les plus fréquemment utilisées. A noter que cela n'a pas nécessité de changer l'insert et ETL, qui continue d'insérer des tableaux dans la table. Nous venons de le faire ALTER TABLE, ajouté quelques haut-parleurs et obtenu un schéma hybride et plus rapide que vous pouvez commencer à utiliser immédiatement.

Codecs et compression

Pour des séries chronologiques La qualité du regroupement des données est importante, car la quantité d'informations peut être très importante. DANS Cliquez Maison Il existe un ensemble d'outils permettant d'obtenir un effet de compression de 1:10, 1:20 et parfois plus. Cela signifie que 1 To de données décompressées sur le disque occupe entre 50 et 100 Go. Une taille plus petite est une bonne chose, les données peuvent être lues et traitées plus rapidement.

Pour atteindre un niveau de compression élevé, Cliquez Maison prend en charge les codecs suivants :

Passage à ClickHouse : 3 ans plus tard

Exemple de tableau :

CREATE TABLE benchmark.cpu_codecs_lz4 (
    created_date Date DEFAULT today(), 
    created_at DateTime DEFAULT now() Codec(DoubleDelta, LZ4), 
    tags_id UInt32, 
    usage_user Float64 Codec(Gorilla, LZ4), 
    usage_system Float64 Codec(Gorilla, LZ4), 
    usage_idle Float64 Codec(Gorilla, LZ4), 
    usage_nice Float64 Codec(Gorilla, LZ4), 
    usage_iowait Float64 Codec(Gorilla, LZ4), 
    usage_irq Float64 Codec(Gorilla, LZ4), 
    usage_softirq Float64 Codec(Gorilla, LZ4), 
    usage_steal Float64 Codec(Gorilla, LZ4), 
    usage_guest Float64 Codec(Gorilla, LZ4), 
    usage_guest_nice Float64 Codec(Gorilla, LZ4), 
    additional_tags String DEFAULT ''
)
ENGINE = MergeTree(created_date, (tags_id, created_at), 8192);

Ici nous définissons le codec DoubleDelta dans un cas, dans le second - Gorille, et assurez-vous d'en ajouter d'autres LZ4 compression. De ce fait, la taille des données sur le disque est considérablement réduite :

Passage à ClickHouse : 3 ans plus tard

Cela montre combien d'espace occupent les mêmes données, mais en utilisant des codecs et des compressions différents :

  • dans un fichier GZIP sur disque ;
  • dans ClickHouse sans codecs, mais avec compression ZSTD ;
  • dans ClickHouse avec les codecs et la compression LZ4 et ZSTD.

On voit que les tables avec codecs prennent beaucoup moins de place.

Size matters

Pas moins important choisir type de données correct :

Passage à ClickHouse : 3 ans plus tard

Dans tous les exemples ci-dessus, j'ai utilisé Float64. Mais si nous choisissons Float32alors ce serait encore mieux. Cela a été bien démontré par les gars de Perkona dans l'article sur le lien ci-dessus. Il est important d'utiliser le type le plus compact adapté à la tâche : encore moins pour la taille sur le disque que pour la vitesse des requêtes. Cliquez Maison très sensible à cela.

Si vous pouvez utiliser int32 au lieu de int64, alors attendez-vous à une multiplication par deux des performances. Les données occupent moins de mémoire et toute « l'arithmétique » fonctionne beaucoup plus rapidement. Cliquez Maison à l'intérieur se trouve un système très strictement typé, il exploite au maximum toutes les possibilités qu'offrent les systèmes modernes.

Agrégation et Vues matérialisées

L'agrégation et les vues matérialisées permettent de réaliser des agrégats pour différentes occasions :

Passage à ClickHouse : 3 ans plus tard

Par exemple, vous pouvez avoir des données sources non agrégées et vous pouvez y accrocher diverses vues matérialisées avec sommation automatique via un moteur spécial. SummingMergeTree (SMT). SMT est une structure de données d'agrégation spéciale qui calcule automatiquement les agrégats. Les données brutes sont insérées dans la base de données, elles sont automatiquement agrégées et les tableaux de bord peuvent être utilisés immédiatement.

TTL - "oublier" les anciennes données

Comment « oublier » les données dont on n’a plus besoin ? Cliquez Maison sait comment le faire. Lors de la création de tables, vous pouvez spécifier TTL expressions : par exemple, que nous stockons des données minute pendant une journée, des données quotidiennes pendant 30 jours et que nous ne touchons jamais aux données hebdomadaires ou mensuelles :

CREATE TABLE aggr_by_minute
…
TTL time + interval 1 day

CREATE TABLE aggr_by_day
…
TTL time + interval 30 day

CREATE TABLE aggr_by_week
…
/* no TTL */

Multi-niveaux - partitionnement des données sur les disques

En poussant cette idée plus loin, les données peuvent être stockées dans Cliquez Maison à différents endroits. Supposons que nous souhaitions stocker les données chaudes de la semaine dernière sur un réseau local très rapide. SSD, et nous ajoutons plus de données historiques à un autre endroit. DANS Cliquez Maison c'est désormais possible :

Passage à ClickHouse : 3 ans plus tard

Vous pouvez configurer la politique de rétention (politique de stockage) Donc Cliquez Maison transférera automatiquement les données une fois certaines conditions atteintes vers un autre stockage.

Mais ce n'est pas tout. Au niveau d'une table spécifique, vous pouvez définir des règles indiquant exactement quand les données sont stockées à froid. Par exemple, les données sont stockées sur un disque très rapide pendant 7 jours et tout ce qui est plus ancien est transféré sur un disque lent. C'est bien car cela vous permet de maintenir le système à des performances maximales, tout en contrôlant les coûts et en ne gaspillant pas d'argent en données froides :

CREATE TABLE 
... 
TTL date + INTERVAL 7 DAY TO VOLUME 'cold_volume', 
    date + INTERVAL 180 DAY DELETE

Caractéristiques uniques Cliquez Maison

Dans presque tout Cliquez Maison Il existe de tels « points forts », mais ils sont compensés par l'exclusivité - quelque chose qui n'existe pas dans d'autres bases de données. Par exemple, voici quelques-unes des fonctionnalités uniques Cliquez Maison:

  • Tableaux. la Cliquez Maison très bonne prise en charge des tableaux, ainsi que la possibilité d'effectuer des calculs complexes sur ceux-ci.
  • Agrégation de structures de données. C'est l'une des "fonctionnalités qui tuent" Cliquez Maison. Malgré le fait que les gars de Yandex disent que nous ne voulons pas agréger les données, tout est agrégé dans Cliquez Maisonparce que c'est rapide et pratique.
  • Vues matérialisées. Associées à l'agrégation des structures de données, les vues matérialisées vous permettent de créer une en temps réel agrégation.
  • ClickHouse SQL. Ceci est une extension de langage SQL avec quelques fonctionnalités supplémentaires et exclusives qui ne sont disponibles que dans Cliquez Maison. Auparavant, c'était en quelque sorte une extension d'une part et un inconvénient de l'autre. Maintenant, presque toutes les lacunes par rapport à SQL 92 nous l'avons supprimé, maintenant ce n'est plus qu'une extension.
  • Lambda-expressions. Sont-ils toujours dans une base de données ?
  • ML-soutien. Ceci est disponible dans différentes bases de données, certaines sont meilleures, d'autres sont pires.
  • Open source. Nous pouvons étendre Cliquez Maison ensemble. Maintenant en Cliquez Maison environ 500 contributeurs, et ce nombre est en constante augmentation.

Requêtes délicates

В Cliquez Maison il existe de nombreuses façons différentes de faire la même chose. Par exemple, vous pouvez renvoyer la dernière valeur d'une table de trois manières différentes pour Processeur (il y en a aussi un quatrième, mais il est encore plus exotique).

Le premier montre à quel point il est pratique de le faire Cliquez Maison requêtes lorsque vous souhaitez vérifier cela tuple contenu dans la sous-requête. C'est quelque chose qui me manquait personnellement dans d'autres bases de données. Si je veux comparer quelque chose avec une sous-requête, alors dans d'autres bases de données, seul un scalaire peut être comparé, et pour plusieurs colonnes, je dois écrire INSCRIPTION. la Cliquez Maison vous pouvez utiliser un tuple :

SELECT *
  FROM cpu 
 WHERE (tags_id, created_at) IN 
    (SELECT tags_id, max(created_at)
        FROM cpu 
        GROUP BY tags_id)

La deuxième méthode fait la même chose mais utilise une fonction d'agrégation argMax:

SELECT 
    argMax(usage_user), created_at),
    argMax(usage_system), created_at),
...
 FROM cpu 

В Cliquez Maison il existe plusieurs dizaines de fonctions d'agrégation, et si vous utilisez des combinateurs, alors selon les lois de la combinatoire, vous en obtenez environ un millier. ArgMax - une des fonctions qui calcule la valeur maximale : la requête renvoie la valeur usage_user, à laquelle la valeur maximale est atteinte créé à:

SELECT now() as created_at,
       cpu.*
  FROM (SELECT DISTINCT tags_id from cpu) base 
  ASOF LEFT JOIN cpu USING (tags_id, created_at)

REJOIGNEZ-NOUS — « coller » des lignes avec des heures différentes. Il s'agit d'une fonctionnalité unique pour les bases de données et n'est disponible que dans kdb +. S'il existe deux séries chronologiques avec des heures différentes, REJOIGNEZ-NOUS vous permet de les déplacer et de les fusionner en une seule requête. Pour chaque valeur d'une série temporelle, la valeur la plus proche de l'autre est trouvée et elles sont renvoyées sur la même ligne :

Passage à ClickHouse : 3 ans plus tard

Fonctions analytiques

Dans la norme SQL-2003 tu peux écrire comme ceci :

SELECT origin,
       timestamp,
       timestamp -LAG(timestamp, 1) OVER (PARTITION BY origin ORDER BY timestamp) AS duration,
       timestamp -MIN(timestamp) OVER (PARTITION BY origin ORDER BY timestamp) AS startseq_duration,
       ROW_NUMBER() OVER (PARTITION BY origin ORDER BY timestamp) AS sequence,
       COUNT() OVER (PARTITION BY origin ORDER BY timestamp) AS nb
  FROM mytable
ORDER BY origin, timestamp;

В Cliquez Maison Vous ne pouvez pas faire ça : il ne prend pas en charge la norme. SQL-2003 et ne le fera probablement jamais. Au lieu de cela, dans Cliquez Maison il est d'usage d'écrire ainsi :

Passage à ClickHouse : 3 ans plus tard

J'ai promis des lambdas – les voici !

Il s'agit d'un analogue d'une requête analytique dans la norme SQL-2003: ça compte la différence entre deux horodatage, durée, ordinal - tout ce que nous considérons habituellement comme des fonctions analytiques. DANS Cliquez Maison Nous les comptons à travers des tableaux : nous réduisons d'abord les données dans un tableau, après quoi nous faisons tout ce que nous voulons sur le tableau, puis nous l'étendons. Ce n'est pas très pratique, cela nécessite au minimum un amour de la programmation fonctionnelle, mais c'est très flexible.

Fonctionnalités spéciales

D’ailleurs, dans Cliquez Maison de nombreuses fonctionnalités spécialisées. Par exemple, comment déterminer combien de sessions s’exécutent en même temps ? Une tâche typique de surveillance consiste à déterminer la charge maximale en une seule requête. DANS Cliquez Maison il existe une fonction spéciale à cet effet :

Passage à ClickHouse : 3 ans plus tard

En général, ClickHouse a des fonctions spéciales à de nombreuses fins :

  • runningDifference, runningAccumulate, voisin ;
  • sumMap(clé, valeur);
  • timeSeriesGroupSum(uid, horodatage, valeur);
  • timeSeriesGroupRateSum(uid, horodatage, valeur);
  • skewPop, skewSamp, kurtPop, kurtSamp ;
  • AVEC REMPLISSAGE / AVEC LIENS ;
  • simpleLinearRegression, stochasticLinearRegression.

Ce n'est pas une liste complète des fonctionnalités, il n'y en a que 500 à 600. Astuce : toutes les fonctions dans Cliquez Maison est dans la table système (tous ne sont pas documentés, mais tous sont intéressants) :

select * from system.functions order by name

Cliquez Maison stocke de nombreuses informations sur lui-même, notamment tables de journalisation, journal_requête, journal de trace, journal des opérations avec blocs de données (part_log), le journal des métriques et le journal système, qu'il écrit généralement sur le disque. Les métriques du journal sont des séries chronologiques в Cliquez Maison en fait Cliquez Maison: la base de données elle-même peut jouer un rôle des séries chronologiques bases de données, se « dévorant » ainsi.

Passage à ClickHouse : 3 ans plus tard

C'est aussi une chose unique - puisque nous faisons du bon travail pour des séries chronologiques, pourquoi ne pouvons-nous pas stocker en nous tout ce dont nous avons besoin ? Nous n'avons pas besoin Prométhée, on garde tout pour nous. Connecté grafana et nous nous surveillons. Toutefois, si Cliquez Maison tombe, nous ne verrons pas pourquoi, alors ils ne le font généralement pas.

Grand cluster ou plusieurs petits Cliquez Maison

Qu'est-ce qui est mieux : un grand cluster ou plusieurs petits ClickHouses ? Approche traditionnelle de DWH est un grand cluster dans lequel des schémas sont alloués pour chaque application. Nous sommes venus voir l'administrateur de la base de données - donnez-nous un schéma, et on nous l'a donné :

Passage à ClickHouse : 3 ans plus tard

В Cliquez Maison vous pouvez le faire différemment. Chaque application peut-elle créer la sienne Cliquez Maison:

Passage à ClickHouse : 3 ans plus tard

Nous n'avons plus besoin d'un gros monstre DWH et des administrateurs intraitables. Nous pouvons donner la sienne à chaque application Cliquez Maison, et le développeur peut le faire lui-même, puisque Cliquez Maison très simple à installer et ne nécessite pas d'administration complexe :

Passage à ClickHouse : 3 ans plus tard

Mais si nous en avons beaucoup Cliquez Maison, et que vous devez l'installer souvent, vous souhaitez alors automatiser ce processus. Pour cela on peut par exemple utiliser Kubernetes и click house-opérateur. DANS Kubernetes ClickHouse vous pouvez mettre "au clic" : je peux cliquer sur un bouton, exécuter le manifeste et la base de données est prête. Vous pouvez immédiatement créer un schéma, commencer à y charger des métriques et après 5 minutes, j'ai un tableau de bord prêt grafana. C'est si simple !

Le résultat?

ainsi, Cliquez Maison - c'est:

  • Rapidement. Tout le monde le sait.
  • Juste. Un peu controversé, mais je crois que c'est difficile à l'entraînement, facile au combat. Si tu comprends comment Cliquez Maison fonctionne, tout est très simple.
  • Universellement. Il convient à différents scénarios : DWH, séries chronologiques, stockage de journaux. Mais ce n'est pas OLTP base de données, alors n'essayez pas d'y faire de courtes insertions et lectures.
  • Il est intéressant de. Probablement celui qui travaille avec Cliquez Maison, a vécu de nombreux moments intéressants dans le bon et le mauvais sens du terme. Par exemple, une nouvelle version est sortie, tout a cessé de fonctionner. Ou lorsque vous avez lutté avec une tâche pendant deux jours, mais qu'après avoir posé une question dans le chat Telegram, la tâche a été résolue en deux minutes. Ou comme lors de la conférence sur le rapport de Lesha Milovidov, une capture d'écran de Cliquez Maison a interrompu la diffusion HighLoad ++. Ce genre de choses arrive tout le temps et rend notre vie difficile. Cliquez Maison lumineux et intéressant !

La présentation peut être consultée ici.

Passage à ClickHouse : 3 ans plus tard

La réunion tant attendue des développeurs de systèmes à forte charge à HighLoad ++ aura lieu les 9 et 10 novembre à Skolkovo. Enfin, il s'agira d'une conférence hors ligne (mais avec toutes les précautions), car l'énergie de HighLoad++ ne peut pas être conditionnée en ligne.

Pour la conférence, nous trouvons et vous montrons des cas sur les capacités maximales de la technologie : HighLoad++ était, est et sera le seul endroit où vous pourrez apprendre en deux jours comment fonctionnent Facebook, Yandex, VKontakte, Google et Amazon.

Après avoir tenu nos réunions sans interruption depuis 2007, nous nous réunirons cette année pour la 14ème fois. Pendant ce temps, la conférence a été multipliée par 10, l'année dernière, l'événement clé de l'industrie a rassemblé 3339 participants, 165 intervenants de rapports et de rencontres, et 16 morceaux étaient diffusés en même temps.
L'année dernière, il y avait 20 bus pour vous, 5280 1650 litres de thé et de café, 10200 2640 litres de boissons aux fruits et 16 000 bouteilles d'eau. Et 25 000 kilogrammes supplémentaires de nourriture, 100 XNUMX assiettes et XNUMX XNUMX tasses. D'ailleurs, avec l'argent récolté grâce au papier recyclé, nous avons planté XNUMX plants de chêne 🙂

Les billets peuvent être achetés ici, recevez des nouvelles de la conférence — ici, et parlez sur tous les réseaux sociaux : Telegram, Facebook, Vkontakte и Twitter.

Source: habr.com

Ajouter un commentaire