{"id":89878,"date":"2020-07-27T01:42:42","date_gmt":"2020-07-26T23:42:42","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/teoriya-i-praktika-ispolzovaniya-clickhouse-v-realnyh-prilozheniyah-aleksandr-zajczev-2018g"},"modified":"2020-07-27T01:42:42","modified_gmt":"2020-07-26T23:42:42","slug":"teoriya-i-praktika-ispolzovaniya-clickhouse-v-realnyh-prilozheniyah-aleksandr-zajczev-2018g","status":"publish","type":"post","link":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/teoriya-i-praktika-ispolzovaniya-clickhouse-v-realnyh-prilozheniyah-aleksandr-zajczev-2018g","title":{"rendered":"Th\u00e9orie et pratique de l'utilisation de ClickHouse dans des applications r\u00e9elles. Alexandre Za\u00eftsev (2018)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Th\u00e9orie et pratique de l&#039;utilisation de ClickHouse dans des applications r\u00e9elles. Alexandre Za\u00eftsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/b46b964324a3311157d5df737526b1d1.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Bien qu'il y ait beaucoup de donn\u00e9es presque partout, les bases de donn\u00e9es analytiques restent assez exotiques. Elles sont mal connues et encore moins bien utilis\u00e9es de mani\u00e8re efficace. Beaucoup continuent \u00e0 \"manger des cactus\" avec MySQL ou PostgreSQL, qui sont con\u00e7ues pour d'autres sc\u00e9narios, \u00e0 lutter avec NoSQL ou \u00e0 payer trop cher pour des solutions commerciales. ClickHouse change la donne et r\u00e9duit consid\u00e9rablement le seuil d'entr\u00e9e dans le monde des SGBD analytiques.<\/p>\n<p><\/p>\n<p>Pr\u00e9sentation de BackEnd Conf 2018, publi\u00e9e avec l'autorisation de l'intervenant.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n<center><div class=\"youtube-placeholder\" data-id=\"9MwKE30aUPs\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/9MwKE30aUPs\/hqdefault.jpg\" alt=\"Lire la vid\u00e9o\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<p><img decoding=\"async\" alt=\"Th\u00e9orie et pratique de l&#039;utilisation de ClickHouse dans des applications r\u00e9elles. Alexandre Za\u00eftsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/6c55b639d9703f460d99e0b0b1194507.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nQui suis-je et pourquoi parle-t-il de ClickHouse ? Je suis directeur du d\u00e9veloppement chez LifeStreet, une entreprise qui utilise ClickHouse. De plus, je suis le fondateur d'Altinity. C'est un partenaire de Yandex, qui promeut ClickHouse et aide Yandex \u00e0 le rendre plus performant. Je suis \u00e9galement pr\u00eat \u00e0 partager mes connaissances sur ClickHouse. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Th\u00e9orie et pratique de l&#039;utilisation de ClickHouse dans des applications r\u00e9elles. Alexandre Za\u00eftsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/36af6acba62271f7aa19dda2eb470870.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Et non, je ne suis pas le fr\u00e8re de Petya Zaytsev. On me pose souvent cette question. Non, nous ne sommes pas fr\u00e8res.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Th\u00e9orie et pratique de l&#039;utilisation de ClickHouse dans des applications r\u00e9elles. Alexandre Za\u00eftsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/6ca605f97619a1373bb8a92f88d480d5.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00ab Il est de notori\u00e9t\u00e9 publique \u00bb que ClickHouse :<\/p>\n<p><\/p>\n<ul>\n<li>Tr\u00e8s rapide,<\/li>\n<li>Tr\u00e8s facile \u00e0 utiliser, <\/li>\n<li>Utilis\u00e9 chez Yandex. <\/li>\n<\/ul>\n<p><\/p>\n<p>Il est un peu moins connu dans quelles entreprises et comment il est utilis\u00e9. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Th\u00e9orie et pratique de l&#039;utilisation de ClickHouse dans des applications r\u00e9elles. Alexandre Za\u00eftsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/c097b003bf8ea13b8a3bb765270e99c8.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Je vais vous expliquer pourquoi, o\u00f9 et comment ClickHouse est utilis\u00e9, au-del\u00e0 de Yandex. <\/p>\n<p><\/p>\n<p>Je vais montrer comment des t\u00e2ches sp\u00e9cifiques sont r\u00e9solues avec ClickHouse dans diff\u00e9rentes entreprises, quels outils ClickHouse vous pouvez utiliser pour vos besoins, et comment ils ont \u00e9t\u00e9 employ\u00e9s dans diverses entreprises.<\/p>\n<p><\/p>\n<p>J'ai s\u00e9lectionn\u00e9 trois exemples qui montrent ClickHouse sous diff\u00e9rents angles. Je pense que cela sera int\u00e9ressant.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Th\u00e9orie et pratique de l&#039;utilisation de ClickHouse dans des applications r\u00e9elles. Alexandre Za\u00eftsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/d3cab92ceccd6c7d01ca1f28b028803f.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Premi\u00e8re question : \u00ab Pourquoi ClickHouse ? \u00bb. Cela semble assez \u00e9vident, mais il y a plus d'une r\u00e9ponse. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Th\u00e9orie et pratique de l&#039;utilisation de ClickHouse dans des applications r\u00e9elles. Alexandre Za\u00eftsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/1a4e14cc041a3c01ad0fd2a305aeeab0.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>La premi\u00e8re r\u00e9ponse est la performance. ClickHouse est tr\u00e8s rapide. L'analyse avec ClickHouse est \u00e9galement tr\u00e8s rapide. On peut souvent l'utiliser l\u00e0 o\u00f9 d'autres solutions fonctionnent tr\u00e8s lentement ou tr\u00e8s mal. <\/li>\n<li>La deuxi\u00e8me r\u00e9ponse est le co\u00fbt. Et surtout le co\u00fbt de l'\u00e9volutivit\u00e9. Par exemple, Vertica est une base de donn\u00e9es absolument excellente. Elle fonctionne tr\u00e8s bien si vous avez moins de quelques t\u00e9raoctets de donn\u00e9es. Mais d\u00e8s qu'il s'agit de centaines de t\u00e9raoctets ou de p\u00e9taoctets, le co\u00fbt de la licence et du support devient assez cons\u00e9quent. Et cela devient cher. Alors que ClickHouse est gratuit. <\/li>\n<li>La troisi\u00e8me r\u00e9ponse concerne le co\u00fbt op\u00e9rationnel. C'est une approche un peu diff\u00e9rente. RedShift est une excellente alternative. Avec RedShift, vous pouvez rapidement trouver une solution. Elle fonctionnera bien, mais chaque heure, chaque jour et chaque mois, vous paierez assez cher Amazon, car c'est un service consid\u00e9rablement co\u00fbteux. Google BigQuery aussi. Ceux qui l'ont utilis\u00e9 savent qu'il est possible d'ex\u00e9cuter plusieurs requ\u00eates et de recevoir soudainement une facture de plusieurs centaines de dollars. <\/li>\n<\/ul>\n<p><\/p>\n<p>Ces probl\u00e8mes n'existent pas avec ClickHouse. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Th\u00e9orie et pratique de l&#039;utilisation de ClickHouse dans des applications r\u00e9elles. Alexandre Za\u00eftsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/3084a8bd9271f14726d73989946816c5.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>O\u00f9 ClickHouse est-il utilis\u00e9 actuellement ? En plus de Yandex, ClickHouse est utilis\u00e9 par de nombreuses entreprises et soci\u00e9t\u00e9s. <\/p>\n<p><\/p>\n<ul>\n<li>Avant tout, il s'agit d'analytique des applications web, c'est-\u00e0-dire un cas d'utilisation qui provient de Yandex.<\/li>\n<li>De nombreuses entreprises AdTech utilisent ClickHouse. <\/li>\n<li>De nombreuses soci\u00e9t\u00e9s qui ont besoin d'analyser des journaux op\u00e9rationnels provenant de diff\u00e9rentes sources.<\/li>\n<li>Quelques entreprises utilisent ClickHouse pour le monitoring des journaux de s\u00e9curit\u00e9. Elles les chargent dans ClickHouse, r\u00e9alisent des rapports et obtiennent les r\u00e9sultats dont elles ont besoin.<\/li>\n<li>Les entreprises commencent \u00e0 l'utiliser dans l'analyse financi\u00e8re, c'est-\u00e0-dire que lentement, les grandes entreprises se tournent \u00e9galement vers ClickHouse. <\/li>\n<li>CloudFlare. Si quelqu'un suit ClickHouse, il a sans doute entendu le nom de cette entreprise. C'est l'un des contributeurs majeurs de la communaut\u00e9. Et ils ont une installation ClickHouse tr\u00e8s s\u00e9rieuse. Par exemple, ils ont cr\u00e9\u00e9 Kafka Engine pour ClickHouse. <\/li>\n<li>Les entreprises de t\u00e9l\u00e9communications ont commenc\u00e9 \u00e0 l'utiliser. Quelques entreprises utilisent ClickHouse soit comme preuve de concept, soit d\u00e9j\u00e0 en production.<\/li>\n<li>Une entreprise utilise ClickHouse pour surveiller les processus de production. Elles testent des puces, notent de nombreux param\u00e8tres, environ 2000 caract\u00e9ristiques. Puis elles analysent \u2013 est-ce un bon lot ou un mauvais.<\/li>\n<li>Analyse blockchain. Il existe une entreprise russe, Bloxy.info. C'est une analyse du r\u00e9seau Ethereum. C'est \u00e9galement ce qu'ils ont r\u00e9alis\u00e9 sur ClickHouse. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Th\u00e9orie et pratique de l&#039;utilisation de ClickHouse dans des applications r\u00e9elles. Alexandre Za\u00eftsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/8a0c1924a20ed2d15cd0f959e9b3e499.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>De plus, la taille n'a pas d'importance. De nombreuses entreprises utilisent un petit serveur. Et cela leur permet de r\u00e9soudre leurs probl\u00e8mes. Encore plus d'entreprises utilisent de grands clusters compos\u00e9s de nombreux <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/fr\/server\/\"   title=\"serveurs\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"1513\">serveurs<\/a> ou de dizaines de serveurs. <\/p>\n<p><\/p>\n<p>Et si l'on regarde les records, voici :<\/p>\n<p><\/p>\n<ul>\n<li>Yandex : plus de 500 serveurs, 25 milliards d'enregistrements par jour qu'ils y conservent.<\/li>\n<li>LifeStreet : 60 serveurs, environ 75 milliards d'enregistrements par jour. Moins de serveurs, plus d'enregistrements que chez Yandex. <\/li>\n<li>CloudFlare : 36 serveurs, 200 milliards d'enregistrements par jour qu'ils conservent. Ils ont encore moins de serveurs et encore plus de donn\u00e9es qu'ils conservent. <\/li>\n<li>Bloomberg : 102 <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/fr\/server\/dts-los-angeles\/\"   title=\"de serveurs\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"3643\">de serveurs<\/a>, environ un trillion d'enregistrements par jour. Champion des enregistrements.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Th\u00e9orie et pratique de l&#039;utilisation de ClickHouse dans des applications r\u00e9elles. Alexandre Za\u00eftsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/49194030b6586221cb17029889ce33da.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>G\u00e9ographiquement, c'est aussi beaucoup. Cette carte montre la heatmap o\u00f9 ClickHouse est utilis\u00e9 dans le monde. La Russie, la Chine et l'Am\u00e9rique y sont bien mises en \u00e9vidence. Peu de pays europ\u00e9ens. Et on peut distinguer 4 clusters.<\/p>\n<p><\/p>\n<p>Il s'agit d'une analyse comparative, il n'est pas n\u00e9cessaire de chercher des chiffres absolus. C'est une analyse des visiteurs qui lisent des contenus en anglais sur le site d'Altinity, car il n'y a pas de contenus en russe. Et la Russie, l'Ukraine, la Bi\u00e9lorussie, c'est-\u00e0-dire la partie russophone de la communaut\u00e9, ce sont les utilisateurs les plus nombreux. Ensuite viennent les \u00c9tats-Unis et le Canada. La Chine les rattrape tr\u00e8s vite. Il y a six mois, la Chine \u00e9tait presque absente, maintenant la Chine a d\u00e9j\u00e0 d\u00e9pass\u00e9 l'Europe et continue de cro\u00eetre. La vieille Europe ne reste pas en arri\u00e8re, et le leader de l'utilisation de ClickHouse est, curieusement, la France. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Th\u00e9orie et pratique de l&#039;utilisation de ClickHouse dans des applications r\u00e9elles. Alexandre Za\u00eftsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/3a8305c51b1bd62f3467b795402df4ed.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><strong>Pourquoi je vous raconte tout cela ? Pour montrer que ClickHouse devient une solution standard pour l'analyse de grandes donn\u00e9es et est d\u00e9j\u00e0 utilis\u00e9 dans de nombreux domaines.<\/strong> Si vous l'utilisez, vous \u00eates dans la bonne tendance. Si vous ne l'avez pas encore utilis\u00e9, n'ayez pas peur de vous retrouver seul et de ne pas avoir d'aide, car beaucoup s'y consacrent d\u00e9j\u00e0.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Th\u00e9orie et pratique de l&#039;utilisation de ClickHouse dans des applications r\u00e9elles. Alexandre Za\u00eftsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/6aa635f3a35034d3af837c78b2c8fe60.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Voici des exemples d'utilisation r\u00e9elle de ClickHouse dans plusieurs entreprises. <\/p>\n<p><\/p>\n<ul>\n<li>Le premier exemple est un r\u00e9seau publicitaire : migration de Vertica vers ClickHouse. Et je connais plusieurs entreprises qui sont pass\u00e9es de Vertica ou qui sont en train de migrer. <\/li>\n<li>Le deuxi\u00e8me exemple est un entrep\u00f4t transactionnel sur ClickHouse. C'est un exemple construit sur des antipatterns. Tout ce qu'il ne faut pas faire dans ClickHouse selon les conseils des d\u00e9veloppeurs a \u00e9t\u00e9 r\u00e9alis\u00e9 ici. Et en m\u00eame temps, c'est fait de mani\u00e8re tellement efficace que cela fonctionne. Et cela fonctionne bien mieux qu'une solution transactionnelle typique. <\/li>\n<li>Le troisi\u00e8me exemple est le calcul distribu\u00e9 sur ClickHouse. Il y avait une question sur comment int\u00e9grer ClickHouse dans l'\u00e9cosyst\u00e8me Hadoop. Je vais montrer un exemple de la mani\u00e8re dont une entreprise a fait sur ClickHouse quelque chose de similaire \u00e0 un conteneur Map Reduce, en surveillant la localisation des donn\u00e9es, etc., pour r\u00e9soudre une t\u00e2che tr\u00e8s non triviale. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Th\u00e9orie et pratique de l&#039;utilisation de ClickHouse dans des applications r\u00e9elles. Alexandre Za\u00eftsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/e08ab5418500599f08d40324ccdfbcd0.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>LifeStreet \u2013 C'est une entreprise Ad Tech qui poss\u00e8de toutes les technologies li\u00e9es au r\u00e9seau publicitaire. <\/li>\n<li>Elle se concentre sur l'optimisation des annonces et le programmatic bidding. <\/li>\n<li>Beaucoup de donn\u00e9es : environ 10 milliards d'\u00e9v\u00e9nements par jour. De plus, ces \u00e9v\u00e9nements peuvent \u00eatre divis\u00e9s en plusieurs sous-\u00e9v\u00e9nements.<\/li>\n<li>De nombreux clients utilisent ces donn\u00e9es, et ce ne sont pas seulement des personnes, mais bien plus encore \u2013 ce sont divers algorithmes qui s'occupent des ench\u00e8res programmatiques. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Th\u00e9orie et pratique de l&#039;utilisation de ClickHouse dans des applications r\u00e9elles. Alexandre Za\u00eftsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/2da99b53eb25f675a2431027f86db934.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>L'entreprise a parcouru un long et difficile chemin. J'en ai d\u00e9j\u00e0 parl\u00e9 lors de HighLoad. Au d\u00e9but, LifeStreet est pass\u00e9e de MySQL (avec un bref arr\u00eat sur Oracle) \u00e0 Vertica. On peut trouver un r\u00e9cit \u00e0 ce sujet. <\/p>\n<p><\/p>\n<p>Tout allait tr\u00e8s bien, mais il est rapidement devenu \u00e9vident que les donn\u00e9es augmentaient et que Vertica devenait co\u00fbteux. Nous cherchions donc diff\u00e9rentes alternatives. Certaines d'entre elles sont list\u00e9es ici. En r\u00e9alit\u00e9, nous avons r\u00e9alis\u00e9 une preuve de concept ou parfois un test de performance pour presque toutes les bases de donn\u00e9es qui \u00e9taient disponibles sur le march\u00e9 entre 2013 et 2016 et qui correspondaient \u00e0 nos besoins fonctionnels. J'en ai \u00e9galement parl\u00e9 lors de HighLoad.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Th\u00e9orie et pratique de l&#039;utilisation de ClickHouse dans des applications r\u00e9elles. Alexandre Za\u00eftsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/4bebd2f43892cbef9249ddded1b8a70a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>L'objectif \u00e9tait de migrer de Vertica en premier lieu, car les donn\u00e9es croissaient. Et elles ont augment\u00e9 de mani\u00e8re exponentielle pendant plusieurs ann\u00e9es. Ensuite, elles ont atteint un plateau, mais n\u00e9anmoins. En pr\u00e9voyant cette croissance, les exigences commerciales en mati\u00e8re de volume de donn\u00e9es pour lesquelles une analyse \u00e9tait n\u00e9cessaire laissaient entendre que dans peu de temps, nous parlerions de p\u00e9taoctets. Et payer pour des p\u00e9taoctets co\u00fbte tr\u00e8s cher, nous cherchions donc une alternative vers laquelle nous diriger. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Th\u00e9orie et pratique de l&#039;utilisation de ClickHouse dans des applications r\u00e9elles. Alexandre Za\u00eftsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/f170a4307168e8560122966eab85c24e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>O\u00f9 aller ? Pendant longtemps, il \u00e9tait totalement unclear o\u00f9 se diriger, car d'une part, il existe des bases de donn\u00e9es commerciales qui semblent fonctionner assez bien. Certaines fonctionnent presque aussi bien que Vertica, d'autres un peu moins. Mais elles sont toutes ch\u00e8res, rien de moins cher et de meilleur ne semblait disponible. <\/p>\n<p><\/p>\n<p>D'autre part, il existe des solutions open source, qui ne sont pas tr\u00e8s nombreuses, c'est-\u00e0-dire qu'on peut les compter sur les doigts d'une main pour l'analyse. Elles sont gratuites ou peu co\u00fbteuses, mais fonctionnent lentement. De plus, elles manquent souvent de la fonctionnalit\u00e9 n\u00e9cessaire et utile.<\/p>\n<p><\/p>\n<p>En somme, rien ne combinait les avantages des bases de donn\u00e9es commerciales et tout ce qui est gratuit dans l'open source \u2013 il n'y avait rien. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Th\u00e9orie et pratique de l&#039;utilisation de ClickHouse dans des applications r\u00e9elles. Alexandre Za\u00eftsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/abbefbf0d9578b554f81579b87213a50.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Il n'y avait rien jusqu'\u00e0 ce qu'inattendu, Yandex sorte, comme un magicien tirant un lapin de son chapeau, ClickHouse. Et c'\u00e9tait une solution inattendue, la question reste pos\u00e9e : \u00ab Pourquoi ? \u00bb, mais n\u00e9anmoins. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Th\u00e9orie et pratique de l&#039;utilisation de ClickHouse dans des applications r\u00e9elles. Alexandre Za\u00eftsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/c88981aace9d5925396ca5171241b7d2.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Et d\u00e8s l'\u00e9t\u00e9 2016, nous avons commenc\u00e9 \u00e0 nous int\u00e9resser \u00e0 ClickHouse. Et il s'est av\u00e9r\u00e9 qu'il peut parfois \u00eatre plus rapide que Vertica. Nous avons test\u00e9 diff\u00e9rents sc\u00e9narios avec diff\u00e9rentes requ\u00eates. Et si la requ\u00eate n'utilisait qu'une seule table, c'est-\u00e0-dire sans aucune jointure, alors ClickHouse \u00e9tait deux fois plus rapide que Vertica. <\/p>\n<p><\/p>\n<p>Je n'ai pas \u00e9t\u00e9 paresseux et j'ai \u00e9galement regard\u00e9 d'autres tests de Yandex r\u00e9cemment. L\u00e0, c'est la m\u00eame chose : ClickHouse est deux fois plus rapide que Vertica, c'est pourquoi ils en parlent souvent. <\/p>\n<p><\/p>\n<p>Mais si les requ\u00eates comportent des jointures, alors tout devient moins clair. Et ClickHouse peut \u00eatre deux fois plus lent que Vertica. Si l'on modifie l\u00e9g\u00e8rement la requ\u00eate et qu'on la r\u00e9\u00e9crit, cela devient \u00e0 peu pr\u00e8s \u00e9quivalent. Pas mal. Et c'est gratuit. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Th\u00e9orie et pratique de l&#039;utilisation de ClickHouse dans des applications r\u00e9elles. Alexandre Za\u00eftsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/188bf56b72123175a18d2cb97d989a47.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Et apr\u00e8s avoir obtenu les r\u00e9sultats des tests et les avoir examin\u00e9s sous diff\u00e9rents angles, LifeStreet a adopt\u00e9 ClickHouse.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Th\u00e9orie et pratique de l&#039;utilisation de ClickHouse dans des applications r\u00e9elles. Alexandre Za\u00eftsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/1183b9b7681916686c52786fc95ccb45.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nous sommes donc en 2016, je vous le rappelle. C'\u00e9tait comme dans l'anecdote sur les souris qui pleuraient et se piquaient, mais continuaient \u00e0 manger le cactus. Cela a \u00e9t\u00e9 expliqu\u00e9 en d\u00e9tail, il y a une vid\u00e9o \u00e0 ce sujet, etc. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Th\u00e9orie et pratique de l&#039;utilisation de ClickHouse dans des applications r\u00e9elles. Alexandre Za\u00eftsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/993052ed83dc295c3777e614c7703456.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Je ne vais donc pas en parler en d\u00e9tail, je vais seulement vous parler des r\u00e9sultats et de quelques \u00e9l\u00e9ments int\u00e9ressants que je n'avais pas mentionn\u00e9s \u00e0 l'\u00e9poque. <\/p>\n<p><\/p>\n<p>Les r\u00e9sultats sont :<\/p>\n<p><\/p>\n<ul>\n<li>Migration r\u00e9ussie et le syst\u00e8me fonctionne d\u00e9j\u00e0 en production depuis plus d'un an. <\/li>\n<li>La performance et la flexibilit\u00e9 ont augment\u00e9. Des 10 milliards d'enregistrements que nous pouvions nous permettre de stocker par jour et pour une courte p\u00e9riode, LifeStreet stocke maintenant 75 milliards d'enregistrements par jour et peut le faire pendant 3 mois et plus. Si l'on consid\u00e8re les pics, cela repr\u00e9sente jusqu'\u00e0 un million d'\u00e9v\u00e9nements par seconde. Plus d'un million de requ\u00eates SQL par jour arrivent dans ce syst\u00e8me, principalement provenant de diff\u00e9rents robots. <\/li>\n<li>Bien que ClickHouse utilise plus de serveurs que Vertica, il y a eu des \u00e9conomies sur le mat\u00e9riel, car Vertica utilisait des disques SAS relativement co\u00fbteux. En revanche, ClickHouse utilisait des disques SATA. Pourquoi ? Parce qu'avec Vertica, l'insertion est synchrone. Et la synchronisation n\u00e9cessite que les disques ne ralentissent pas trop, ainsi que le r\u00e9seau, c'est-\u00e0-dire que c'est une op\u00e9ration relativement co\u00fbteuse. En revanche, avec ClickHouse, l'insertion est asynchrone. De plus, on peut toujours \u00e9crire localement, sans co\u00fbts suppl\u00e9mentaires, ce qui permet d'ins\u00e9rer des donn\u00e9es dans ClickHouse beaucoup plus rapidement que dans Vertica, m\u00eame sur des disques pas forc\u00e9ment tr\u00e8s rapides. La lecture est \u00e0 peu pr\u00e8s \u00e9quivalente. La lecture sur SATA, si elles sont en RAID, est assez rapide. <\/li>\n<li>Pas de limitations de licence, c'est-\u00e0-dire 3 p\u00e9taoctets de donn\u00e9es sur 60 serveurs (20 serveurs correspondent \u00e0 une r\u00e9plique) et 6 trillions d'enregistrements dans les faits et les agr\u00e9gats. Rien de tel ne peut \u00eatre envisag\u00e9 sur Vertica. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Th\u00e9orie et pratique de l&#039;utilisation de ClickHouse dans des applications r\u00e9elles. Alexandre Za\u00eftsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/f461cdc12917ee655655dd7eb9c32bb2.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Je vais maintenant passer aux aspects pratiques dans cet exemple.<\/p>\n<p><\/p>\n<ul>\n<li>Le premier point est l'efficacit\u00e9 du sch\u00e9ma. Le sch\u00e9ma a un impact significatif sur beaucoup de choses. <\/li>\n<li>Le deuxi\u00e8me point est la g\u00e9n\u00e9ration d'un SQL efficace.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Th\u00e9orie et pratique de l&#039;utilisation de ClickHouse dans des applications r\u00e9elles. Alexandre Za\u00eftsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/e7dc2a217e77c8794ff6e8a754e78c85.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Une requ\u00eate OLAP typique est un select. Certaines colonnes sont utilis\u00e9es dans le group by, d'autres dans des fonctions d'agr\u00e9gat. Il y a un where, que l'on peut consid\u00e9rer comme une tranche du cube. L'ensemble du group by peut \u00eatre vu comme une projection. C'est ainsi que cela est appel\u00e9 une analyse multidimensionnelle des donn\u00e9es. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Th\u00e9orie et pratique de l&#039;utilisation de ClickHouse dans des applications r\u00e9elles. Alexandre Za\u00eftsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/a03a2d7fd28905ae83183346f0c673e2.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Et cela est souvent mod\u00e9lis\u00e9 sous forme de sch\u00e9ma en \u00e9toile, o\u00f9 il y a un fait central et des caract\u00e9ristiques de ce fait sur les c\u00f4t\u00e9s, comme des rayons. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Th\u00e9orie et pratique de l&#039;utilisation de ClickHouse dans des applications r\u00e9elles. Alexandre Za\u00eftsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/d9671af4b39cc83e1ae49e6fd75d0e02.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Et en termes de conception physique, c'est-\u00e0-dire de la fa\u00e7on dont cela est organis\u00e9 dans une table, on fait g\u00e9n\u00e9ralement une repr\u00e9sentation normalis\u00e9e. Vous pouvez d\u00e9normaliser, mais cela co\u00fbte cher en disque et n'est pas tr\u00e8s efficace pour les requ\u00eates. C'est pourquoi on fait g\u00e9n\u00e9ralement une repr\u00e9sentation normalis\u00e9e, c'est-\u00e0-dire une table de faits et de nombreuses tables de dimensions. <\/p>\n<p><\/p>\n<p>Mais cela fonctionne mal dans ClickHouse. Il y a deux raisons : <\/p>\n<p><\/p>\n<ul>\n<li>La premi\u00e8re est que ClickHouse n'a pas de bonnes jointures (join), c'est-\u00e0-dire que les jointures (join) existent, mais elles sont mauvaises. Pour l'instant, elles sont mauvaises. <\/li>\n<li>La deuxi\u00e8me est que les tables ne sont pas mises \u00e0 jour. En g\u00e9n\u00e9ral, dans ces tables autour du sch\u00e9ma en \u00e9toile, il faut changer quelque chose. Par exemple, le nom du client, le nom de l'entreprise, etc. Et cela ne fonctionne pas. <\/li>\n<\/ul>\n<p><\/p>\n<p>Il existe une solution dans ClickHouse. En fait, deux : <\/p>\n<p><\/p>\n<ul>\n<li>La premi\u00e8re est l'utilisation de dictionnaires. Les Dictionnaires externes aident \u00e0 r\u00e9soudre \u00e0 99 % le probl\u00e8me du sch\u00e9ma en \u00e9toile, des mises \u00e0 jour et d'autres choses. <\/li>\n<li>La deuxi\u00e8me est l'utilisation de tableaux. Les tableaux aident \u00e9galement \u00e0 \u00e9viter les jointures (join) et les probl\u00e8mes de normalisation. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Th\u00e9orie et pratique de l&#039;utilisation de ClickHouse dans des applications r\u00e9elles. Alexandre Za\u00eftsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/775972cc412651600799173407384492.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>Les jointures (join) ne sont pas n\u00e9cessaires. <\/li>\n<li>Mises \u00e0 jour. Depuis mars 2018, une possibilit\u00e9 non document\u00e9e (vous ne la trouverez pas dans la documentation) de mettre \u00e0 jour partiellement les dictionnaires est disponible, c'est-\u00e0-dire les enregistrements qui ont chang\u00e9. En pratique, c'est comme une table.<\/li>\n<li>Toujours en m\u00e9moire, donc les jointures (join) avec le dictionnaire fonctionnent plus rapidement que si c'\u00e9tait une table stock\u00e9e sur disque et qui n'est pas forc\u00e9ment dans le cache, probablement pas. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Th\u00e9orie et pratique de l&#039;utilisation de ClickHouse dans des applications r\u00e9elles. Alexandre Za\u00eftsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/f73176a650b6d885011e3265c2af2fc3.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>Les jointures (join) ne sont \u00e9galement pas n\u00e9cessaires.<\/li>\n<li>C'est une repr\u00e9sentation compacte un \u00e0 plusieurs. <\/li>\n<li>Et \u00e0 mon avis, les tableaux sont faits pour les geeks. Ce sont des fonctions lambda et autres. <\/li>\n<\/ul>\n<p><\/p>\n<p>Ce n'est pas juste une belle phrase. C'est une fonctionnalit\u00e9 tr\u00e8s puissante qui permet de faire beaucoup de choses de mani\u00e8re simple et \u00e9l\u00e9gante. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Th\u00e9orie et pratique de l&#039;utilisation de ClickHouse dans des applications r\u00e9elles. Alexandre Za\u00eftsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/5d813952ca8f3da7a74c6f2a15d80a9b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Des exemples typiques qui aident \u00e0 g\u00e9rer des tableaux. Ces exemples sont simples et assez explicites :<\/p>\n<p><\/p>\n<ul>\n<li>Recherche par tags. Si vous avez des hashtags et que vous souhaitez trouver des enregistrements par hashtag. <\/li>\n<li>Recherche par paires cl\u00e9-valeur. Il y a aussi des attributs avec des valeurs. <\/li>\n<li>Stockage de listes de cl\u00e9s que vous devez convertir en autre chose.<\/li>\n<\/ul>\n<p><\/p>\n<p>Toutes ces t\u00e2ches peuvent \u00eatre accomplies sans tableaux. Les tags peuvent \u00eatre plac\u00e9s dans une cha\u00eene et \u00eatre extraits avec une expression r\u00e9guli\u00e8re, ou dans une table s\u00e9par\u00e9e, mais dans ce cas, il faudra effectuer des jointures.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Th\u00e9orie et pratique de l&#039;utilisation de ClickHouse dans des applications r\u00e9elles. Alexandre Za\u00eftsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/dbbf90eee098c4564206532f24156823.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dans ClickHouse, rien de tout cela n'est n\u00e9cessaire, il suffit de d\u00e9crire un tableau de cha\u00eenes pour les hashtags ou de cr\u00e9er une structure imbriqu\u00e9e pour des syst\u00e8mes de type cl\u00e9-valeur.<\/p>\n<p><\/p>\n<p>Une structure imbriqu\u00e9e n'est peut-\u00eatre pas le meilleur nom. Ce sont deux tableaux qui ont une partie commune dans leur nom et certaines caract\u00e9ristiques li\u00e9es. <\/p>\n<p><\/p>\n<p>Et il est tr\u00e8s facile de faire une recherche par tag. Il y a une fonction <code>has<\/code>, qui v\u00e9rifie si un \u00e9l\u00e9ment est pr\u00e9sent dans le tableau. Voil\u00e0, nous avons trouv\u00e9 tous les enregistrements qui concernent notre conf\u00e9rence.<\/p>\n<p><\/p>\n<p>La recherche par subid est un peu plus complexe. Nous devons d'abord trouver l'indice de la cl\u00e9, puis prendre l'\u00e9l\u00e9ment avec cet indice et v\u00e9rifier si sa valeur correspond \u00e0 ce dont nous avons besoin. Mais malgr\u00e9 tout, c'est tr\u00e8s simple et compact.<\/p>\n<p><\/p>\n<p>L'expression r\u00e9guli\u00e8re que vous voudriez \u00e9crire si vous stockiez tout cela dans une seule ligne serait, d'une part, maladroite. D'autre part, elle fonctionnerait beaucoup plus lentement que deux tableaux. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Th\u00e9orie et pratique de l&#039;utilisation de ClickHouse dans des applications r\u00e9elles. Alexandre Za\u00eftsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/17664c3121b2b0d33188adbfaa653d4e.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Un autre exemple. Vous avez un tableau dans lequel vous stockez des ID. Et vous pouvez les convertir en noms. La fonction <code>arrayMap<\/code>. C'est une fonction lambda typique. Vous y passez des expressions lambda. Et elle extrait la valeur du nom pour chaque ID du dictionnaire.<\/p>\n<p><\/p>\n<p>De m\u00eame, la recherche peut \u00eatre effectu\u00e9e. Une fonction pr\u00e9dicative est pass\u00e9e, qui v\u00e9rifie \u00e0 quoi correspondent les \u00e9l\u00e9ments. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Th\u00e9orie et pratique de l&#039;utilisation de ClickHouse dans des applications r\u00e9elles. Alexandre Za\u00eftsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/146917b71a35d38a550cd9accf6ab2f7.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ces \u00e9l\u00e9ments simplifient consid\u00e9rablement le sch\u00e9ma et r\u00e9solvent de nombreux probl\u00e8mes. <\/p>\n<p><\/p>\n<p>Mais le prochain probl\u00e8me auquel nous avons \u00e9t\u00e9 confront\u00e9s, et que je voudrais mentionner, ce sont les requ\u00eates efficaces. <\/p>\n<p><\/p>\n<ul>\n<li>Dans ClickHouse, il n'y a pas de planificateur de requ\u00eates. Absolument pas. <\/li>\n<li>Cependant, il est n\u00e9cessaire de planifier les requ\u00eates complexes. Dans quels cas ? <\/li>\n<li>Lorsqu'une requ\u00eate comporte plusieurs jointures (join) que vous encapsulez dans des sous-requ\u00eates. L'ordre dans lequel elles s'ex\u00e9cutent a son importance. <\/li>\n<li>Et deuxi\u00e8mement \u2013 si la requ\u00eate est distribu\u00e9e. Parce que dans une requ\u00eate distribu\u00e9e, seule la sous-requ\u00eate la plus interne s'ex\u00e9cute de mani\u00e8re distribu\u00e9e, tandis que tout le reste est envoy\u00e9 \u00e0 un seul serveur, auquel vous \u00eates connect\u00e9 et s'ex\u00e9cute l\u00e0-bas. Donc, si vous avez des requ\u00eates distribu\u00e9es avec de nombreuses jointures (join), il est essentiel de choisir l'ordre. <\/li>\n<\/ul>\n<p><\/p>\n<p>Et m\u00eame dans des cas plus simples, il est parfois judicieux d'effectuer un petit travail de r\u00e9\u00e9criture des requ\u00eates. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Th\u00e9orie et pratique de l&#039;utilisation de ClickHouse dans des applications r\u00e9elles. Alexandre Za\u00eftsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/217d422b429e8b4bc13abbf0efdf6be1.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Voici un exemple. \u00c0 gauche, une requ\u00eate qui montre le top 5 des pays. Elle s'ex\u00e9cute en 2,5 secondes, je crois. \u00c0 droite, la m\u00eame requ\u00eate, mais l\u00e9g\u00e8rement r\u00e9\u00e9crite. Au lieu de grouper par cha\u00eene, nous avons commenc\u00e9 \u00e0 grouper par cl\u00e9 (int). Et c'est plus rapide. Ensuite, nous avons joint un dictionnaire au r\u00e9sultat. Au lieu de 2,5 secondes, la requ\u00eate s'ex\u00e9cute en 1,5 seconde. C'est tr\u00e8s bien. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Th\u00e9orie et pratique de l&#039;utilisation de ClickHouse dans des applications r\u00e9elles. Alexandre Za\u00eftsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/f19fb7d7f0397a3b38b2a3bd179c156b.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Un exemple similaire avec la r\u00e9\u00e9criture des filtres. Ici, une requ\u00eate sur la Russie. Elle s'ex\u00e9cute en 5 secondes. Si nous la r\u00e9\u00e9crivons de mani\u00e8re \u00e0 comparer \u00e0 nouveau non pas des cha\u00eenes, mais des nombres avec un ensemble de cl\u00e9s qui concernent la Russie, ce sera beaucoup plus rapide. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Th\u00e9orie et pratique de l&#039;utilisation de ClickHouse dans des applications r\u00e9elles. Alexandre Za\u00eftsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/0c1dd1f317133d1d106ffef85f337079.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Il existe de nombreuses astuces. Elles permettent de consid\u00e9rablement acc\u00e9l\u00e9rer des requ\u00eates qui semblent d\u00e9j\u00e0 fonctionner rapidement, ou au contraire, qui fonctionnent lentement. Elles peuvent \u00eatre rendues encore plus rapides.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Th\u00e9orie et pratique de l&#039;utilisation de ClickHouse dans des applications r\u00e9elles. Alexandre Za\u00eftsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/25b132790b03f239e38237af5e92ab63.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>Maximum de travail en mode distribu\u00e9. <\/li>\n<li>Tri par types minimaux, comme je l'ai fait avec les ints. <\/li>\n<li>S'il y a des jointures (join) ou des dictionnaires, il est pr\u00e9f\u00e9rable de les effectuer en dernier, lorsque vous avez d\u00e9j\u00e0 des donn\u00e9es au moins partiellement regroup\u00e9es, alors l'op\u00e9ration de jointure (join) ou l'appel du dictionnaire sera moins fr\u00e9quente et donc plus rapide. <\/li>\n<li>Remplacement des filtres. <\/li>\n<\/ul>\n<p><\/p>\n<p>Il existe d'autres techniques, et pas seulement celles que j'ai d\u00e9montr\u00e9es. Elles permettent parfois d'acc\u00e9l\u00e9rer consid\u00e9rablement l'ex\u00e9cution des requ\u00eates.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Th\u00e9orie et pratique de l&#039;utilisation de ClickHouse dans des applications r\u00e9elles. Alexandre Za\u00eftsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/175832796bee525909d8875bd723a881.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Passons \u00e0 l'exemple suivant. L'entreprise X des \u00c9tats-Unis. Que fait-elle? <\/p>\n<p><\/p>\n<p>Il y avait une t\u00e2che : <\/p>\n<p><\/p>\n<ul>\n<li>Liaison hors ligne des transactions publicitaires. <\/li>\n<li>Mod\u00e9lisation de diff\u00e9rents types de liaison. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Th\u00e9orie et pratique de l&#039;utilisation de ClickHouse dans des applications r\u00e9elles. Alexandre Za\u00eftsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/0136b71a1205512d86f13e86761146f4.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Quel est le sc\u00e9nario?<\/p>\n<p><\/p>\n<p>Un visiteur ordinaire acc\u00e8de \u00e0 un site, par exemple, 20 fois par mois via diff\u00e9rentes annonces ou se rend simplement sur le site sans aucune annonce, car il s'en souvient. Il regarde certains produits, les ajoute au panier, puis les retire de son panier. Et, finalement, il ach\u00e8te quelque chose. <\/p>\n<p><\/p>\n<p>Les questions raisonnables sont : \u00ab \u00c0 qui doit-on payer pour la publicit\u00e9, si n\u00e9cessaire ? \u00bb et \u00ab Quelle publicit\u00e9 a pu l'influencer, si elle a eu un impact ? \u00bb. C'est-\u00e0-dire, pourquoi a-t-il achet\u00e9 et comment faire pour que des personnes similaires ach\u00e8tent aussi ?<\/p>\n<p><\/p>\n<p>Pour r\u00e9soudre cette t\u00e2che, il faut lier les \u00e9v\u00e9nements qui se produisent sur le site web de mani\u00e8re appropri\u00e9e, c'est-\u00e0-dire \u00e9tablir des connexions entre eux. Ensuite, il faut les transmettre pour analyse dans un DWH. Et sur la base de cette analyse, construire des mod\u00e8les pour savoir \u00e0 qui et quelle publicit\u00e9 montrer.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Th\u00e9orie et pratique de l&#039;utilisation de ClickHouse dans des applications r\u00e9elles. Alexandre Za\u00eftsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/e53ec81ce89150697d0eca4d72886638.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Une transaction publicitaire est un ensemble d'\u00e9v\u00e9nements li\u00e9s \u00e0 un utilisateur, commen\u00e7ant par l'affichage d'une annonce, puis se poursuivant avec d'autres actions, suivi, \u00e9ventuellement, d'un achat, et ensuite d'autres achats dans cet achat. Par exemple, dans le cas d'une application mobile ou d'un jeu mobile, l'installation de l'application est g\u00e9n\u00e9ralement gratuite, mais des paiements peuvent \u00eatre n\u00e9cessaires pour d'autres actions. Plus une personne d\u00e9pense dans l'application, plus elle a de la valeur. Mais pour cela, il faut tout relier. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Th\u00e9orie et pratique de l&#039;utilisation de ClickHouse dans des applications r\u00e9elles. Alexandre Za\u00eftsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/a2213613f1ef660409124ef8bcdd4fe3.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Il existe de nombreux mod\u00e8les de liaison. <\/p>\n<p><\/p>\n<p>Les plus populaires sont :<\/p>\n<p><\/p>\n<ul>\n<li>Derni\u00e8re interaction, o\u00f9 l'interaction est soit un clic, soit une impression.<\/li>\n<li>Premi\u00e8re interaction, c'est-\u00e0-dire la premi\u00e8re action qui a amen\u00e9 la personne sur le site.<\/li>\n<li>Combinaison lin\u00e9aire \u2013 tout le monde est trait\u00e9 de mani\u00e8re \u00e9gale. <\/li>\n<li>Att\u00e9nuation.<\/li>\n<li>Et autres. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Th\u00e9orie et pratique de l&#039;utilisation de ClickHouse dans des applications r\u00e9elles. Alexandre Za\u00eftsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/9523307d557e094d981da5b525ed0b59.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Et comment tout cela fonctionnait-il \u00e0 l'origine ? Il y avait un Runtime et Cassandra. Cassandra \u00e9tait utilis\u00e9e comme stockage de transactions, c'est-\u00e0-dire qu'elle conservait toutes les transactions li\u00e9es. Et lorsque qu\u2019un \u00e9v\u00e9nement arrivait dans le Runtime, par exemple, l'affichage d'une certaine page ou autre, il y avait une requ\u00eate dans Cassandra \u2013 existe-t-il cette personne ou non. Ensuite, les transactions qui lui \u00e9taient associ\u00e9es \u00e9taient r\u00e9cup\u00e9r\u00e9es. Et la liaison \u00e9tait effectu\u00e9e.<\/p>\n<p><\/p>\n<p>Et s'il \u00e9tait chanceux et que la requ\u00eate contenait un identifiant de transaction, cela devenait facile. Mais en g\u00e9n\u00e9ral, ce n'est pas le cas. Il fallait donc trouver la derni\u00e8re transaction ou la transaction avec le dernier clic, etc. <\/p>\n<p><\/p>\n<p>Et tout cela fonctionnait tr\u00e8s bien tant que la liaison \u00e9tait effectu\u00e9e sur le dernier clic. Car avec 10 millions de clics par jour, soit 300 millions par mois, si l'on prend une fen\u00eatre d'un mois. Et puisque tout doit \u00eatre en m\u00e9moire dans Cassandra pour que cela fonctionne rapidement, car le Runtime doit r\u00e9pondre rapidement, il fallait environ 10-15 serveurs. <\/p>\n<p><\/p>\n<p>Mais lorsque nous avons voulu lier la transaction \u00e0 l'affichage, cela s'est tout de suite av\u00e9r\u00e9 moins amusant. Pourquoi ? Il est \u00e9vident qu'il faut stocker 30 fois plus d'\u00e9v\u00e9nements. Par cons\u00e9quent, il faut 30 fois plus de serveurs. Ce qui donne un chiffre astronomique. Avoir jusqu'\u00e0 500 serveurs pour effectuer une liaison, alors qu'il y en a beaucoup moins en Runtime, c'est un chiffre absurde. Nous avons donc commenc\u00e9 \u00e0 r\u00e9fl\u00e9chir \u00e0 ce qu'il fallait faire. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Th\u00e9orie et pratique de l&#039;utilisation de ClickHouse dans des applications r\u00e9elles. Alexandre Za\u00eftsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/7af35f1ade680232cc83a6887891bc5c.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nous avons donc d\u00e9couvert ClickHouse. Mais comment l'utiliser avec ClickHouse ? \u00c0 premi\u00e8re vue, cela semble \u00eatre un ensemble d'antipatterns. <\/p>\n<p><\/p>\n<ul>\n<li>La transaction grandit, nous y accrochons de plus en plus d'\u00e9v\u00e9nements, c'est-\u00e0-dire qu'elle est mutable, alors que ClickHouse ne g\u00e8re pas tr\u00e8s bien les objets mutables. <\/li>\n<li>Lorsque nous recevons un visiteur, nous devons extraire ses transactions par cl\u00e9, par son identifiant de visite. C'est aussi une requ\u00eate point, ce qui n'est pas habituellement fait dans ClickHouse. En g\u00e9n\u00e9ral, ClickHouse fonctionne avec de grands... scans, mais ici, nous avons besoin de r\u00e9cup\u00e9rer plusieurs enregistrements. C'est encore un antipattern. <\/li>\n<li>De plus, la transaction \u00e9tait en json, mais nous ne voulions pas la r\u00e9\u00e9crire, donc nous souhaitions stocker le json de mani\u00e8re non structur\u00e9e et, si n\u00e9cessaire, en extraire quelque chose. Et cela aussi constitue un antipattern. <\/li>\n<\/ul>\n<p><\/p>\n<p>C'est-\u00e0-dire un ensemble d'antipatterns. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Th\u00e9orie et pratique de l&#039;utilisation de ClickHouse dans des applications r\u00e9elles. Alexandre Za\u00eftsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/2473129a5880ee3172b8ab7bf4afc376.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>N\u00e9anmoins, nous avons r\u00e9ussi \u00e0 cr\u00e9er un syst\u00e8me qui fonctionnait tr\u00e8s bien. <\/p>\n<p><\/p>\n<p>Qu'a-t-on fait ? ClickHouse a \u00e9t\u00e9 mis en place, o\u00f9 les journaux, divis\u00e9s en enregistrements, \u00e9taient envoy\u00e9s. Un service attribu\u00e9 est apparu, qui r\u00e9cup\u00e9rait les journaux \u00e0 partir de ClickHouse. Apr\u00e8s cela, pour chaque enregistrement par identifiant de visite, il obtenait des transactions qui pouvaient encore ne pas \u00eatre trait\u00e9es, ainsi que des instantan\u00e9s, c'est-\u00e0-dire des transactions d\u00e9j\u00e0 li\u00e9es, soit le r\u00e9sultat du travail pr\u00e9c\u00e9dent. \u00c0 partir de l\u00e0, nous avons d\u00e9j\u00e0 \u00e9labor\u00e9 la logique, choisi la bonne transaction et connect\u00e9 de nouveaux \u00e9v\u00e9nements. Nous avons de nouveau enregistr\u00e9 dans le journal. Le journal \u00e9tait renvoy\u00e9 dans ClickHouse, c'est-\u00e0-dire que c'\u00e9tait un syst\u00e8me constamment cyclique. En outre, il \u00e9tait envoy\u00e9 dans le DWH pour \u00eatre analys\u00e9 l\u00e0-bas. <\/p>\n<p><\/p>\n<p>C'est dans cette forme que cela fonctionnait assez mal. Pour faciliter les choses pour ClickHouse lorsqu'une requ\u00eate \u00e9tait faite par identifiant de visite, les requ\u00eates \u00e9taient regroup\u00e9es en blocs de 1 000 \u00e0 2 000 identifiants de visite, et toutes les transactions pour 1 000 \u00e0 2 000 personnes \u00e9taient extraites. Tout a alors fonctionn\u00e9.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Th\u00e9orie et pratique de l&#039;utilisation de ClickHouse dans des applications r\u00e9elles. Alexandre Za\u00eftsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/d920ce231e6e4b5fd5b27ab28f848aed.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Si l'on regarde \u00e0 l'int\u00e9rieur de ClickHouse, il n'y a que 3 tables principales qui g\u00e8rent tout cela. <\/p>\n<p><\/p>\n<p>La premi\u00e8re table dans laquelle les logs sont inject\u00e9s, et ces logs sont en grande partie ins\u00e9r\u00e9s sans traitement.<\/p>\n<p><\/p>\n<p>La deuxi\u00e8me table. Gr\u00e2ce \u00e0 une vue mat\u00e9rialis\u00e9e, les \u00e9v\u00e9nements non attribu\u00e9s \u00e9taient extraits de ces logs, c'est-\u00e0-dire ceux qui n'\u00e9taient pas li\u00e9s. Et \u00e0 partir de ces logs, les transactions \u00e9taient extraites pour construire un instantan\u00e9. En d'autres termes, une vue mat\u00e9rialis\u00e9e sp\u00e9cifique construisait un instantan\u00e9, c'est-\u00e0-dire l'\u00e9tat final accumul\u00e9 des transactions. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Th\u00e9orie et pratique de l&#039;utilisation de ClickHouse dans des applications r\u00e9elles. Alexandre Za\u00eftsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/12b0adb691f483923a6c35bb6e4a5017.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ici, le texte SQL est \u00e9crit. Je voudrais commenter plusieurs choses importantes \u00e0 ce sujet. <\/p>\n<p><\/p>\n<p>La premi\u00e8re chose importante est la possibilit\u00e9 dans ClickHouse d'extraire des colonnes et des champs depuis un json. C'est-\u00e0-dire que ClickHouse dispose de certaines m\u00e9thodes pour travailler avec json. Elles sont tr\u00e8s, tr\u00e8s primitives. <\/p>\n<p><\/p>\n<p>visitParamExtractInt permet d'extraire des attributs d'un json, c'est-\u00e0-dire que le premier match se d\u00e9clenche. Ainsi, il est possible d'extraire l'identifiant de transaction ou l'identifiant de visite. C'est un point. <\/p>\n<p><\/p>\n<p>Deuxi\u00e8mement, ici un champ mat\u00e9rialis\u00e9 rus\u00e9 a \u00e9t\u00e9 utilis\u00e9. Qu'est-ce que cela signifie ? Cela signifie que vous ne pouvez pas l'ins\u00e9rer dans la table, c'est-\u00e0-dire qu'il n'est pas ins\u00e9r\u00e9, il est calcul\u00e9 et stock\u00e9 lors de l'insertion. Lors de l'insertion, ClickHouse fait le travail pour vous. Et ce qui est extrait du json est ce dont vous aurez besoin ensuite.<\/p>\n<p><\/p>\n<p>Dans ce cas, la vue mat\u00e9rialis\u00e9e concerne les lignes non trait\u00e9es. Elle utilise justement la premi\u00e8re table avec pratiquement des logs bruts. Et que fait-elle ? Tout d'abord, elle change le tri, c'est-\u00e0-dire que le tri est d\u00e9sormais effectu\u00e9 par identifiant de visite, car nous avons besoin d'extraire rapidement la transaction associ\u00e9e \u00e0 une personne pr\u00e9cise. <\/p>\n<p><\/p>\n<p>La deuxi\u00e8me chose importante est l'index_granularity. Si vous avez vu MergeTree, l'index_granularity est g\u00e9n\u00e9ralement par d\u00e9faut de 8192. Qu'est-ce que cela signifie ? C'est un param\u00e8tre de densit\u00e9 de l'index. Dans ClickHouse, l'index est clairsem\u00e9, il n'indexe jamais chaque enregistrement. Cela se fait toutes les 8192 lignes. C'est bien lorsque de nombreuses donn\u00e9es doivent \u00eatre calcul\u00e9es, mais moins bon lorsqu'il s'agit d'une petite quantit\u00e9 en raison d'un overhead important. Si l'on r\u00e9duit la granularit\u00e9 de l'index, on diminue donc l'overhead. R\u00e9duire \u00e0 un est impossible car la m\u00e9moire pourrait manquer. L'index est toujours stock\u00e9 en m\u00e9moire. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Th\u00e9orie et pratique de l&#039;utilisation de ClickHouse dans des applications r\u00e9elles. Alexandre Za\u00eftsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/5fe303061977cad64e6c0333b125d595.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Un snapshot utilise encore certaines fonctionnalit\u00e9s int\u00e9ressantes de ClickHouse.<\/p>\n<p><\/p>\n<p>Tout d'abord, il y a AggregatingMergeTree. Et dans AggregatingMergeTree, l'argMax est stock\u00e9, c'est-\u00e0-dire l'\u00e9tat de la transaction correspondant au dernier timestamp. De nouvelles transactions sont toujours g\u00e9n\u00e9r\u00e9es pour ce visiteur. Et dans le dernier \u00e9tat de cette transaction, nous avons ajout\u00e9 un \u00e9v\u00e9nement et nous avons obtenu un nouvel \u00e9tat. Cela a de nouveau \u00e9t\u00e9 int\u00e9gr\u00e9 dans ClickHouse. Et gr\u00e2ce \u00e0 argMax dans cette vue mat\u00e9rialis\u00e9e, nous pouvons toujours obtenir l'\u00e9tat actuel.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Th\u00e9orie et pratique de l&#039;utilisation de ClickHouse dans des applications r\u00e9elles. Alexandre Za\u00eftsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/d1b87301ab5206a36bf035679f79d35a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>La liaison est \u00ab d\u00e9li\u00e9e \u00bb du Runtime. <\/li>\n<li>Jusqu'\u00e0 3 milliards de transactions sont stock\u00e9es et trait\u00e9es par mois. C'est plusieurs fois plus que ce qu'il y avait dans Cassandra, c'est-\u00e0-dire dans un syst\u00e8me transactionnel typique. <\/li>\n<li>Un cluster de 2x5 serveurs ClickHouse. 5 serveurs et chaque serveur a une r\u00e9plique. C'est m\u00eame moins que ce qu'il y avait dans Cassandra pour r\u00e9aliser une attribution bas\u00e9e sur les clics, alors qu'ici nous avons une attribution bas\u00e9e sur les impressions. Cela signifie qu'au lieu de multiplier le nombre de serveurs par 30, nous avons r\u00e9ussi \u00e0 le r\u00e9duire. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Th\u00e9orie et pratique de l&#039;utilisation de ClickHouse dans des applications r\u00e9elles. Alexandre Za\u00eftsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/583779fe9e133df519411e2256401eb3.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Et le dernier exemple est une soci\u00e9t\u00e9 financi\u00e8re Y qui analysait les corr\u00e9lations des variations des cotations boursi\u00e8res. <\/p>\n<p><\/p>\n<p>Et la t\u00e2che \u00e9tait la suivante :<\/p>\n<p><\/p>\n<ul>\n<li>Il y a environ 5 000 actions. <\/li>\n<li>Les cotations sont connues toutes les 100 millisecondes. <\/li>\n<li>Les donn\u00e9es ont \u00e9t\u00e9 accumul\u00e9es pendant 10 ans. Evidemment, pour certaines entreprises, il y en a plus, pour d'autres moins. <\/li>\n<li>Au total, environ 100 milliards de lignes. <\/li>\n<\/ul>\n<p><\/p>\n<p>Il fallait calculer la corr\u00e9lation des variations. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Th\u00e9orie et pratique de l&#039;utilisation de ClickHouse dans des applications r\u00e9elles. Alexandre Za\u00eftsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/b02051e6cadec8c51e7f6e351ef903f9.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ici, il y a deux actions et leurs cotations. Si l'une monte et que l'autre monte aussi, c'est une corr\u00e9lation positive, c'est-\u00e0-dire que l'une augmente et l'autre aussi. Si l'une monte, comme \u00e0 la fin du graphique, tandis que l'autre descend, c'est une corr\u00e9lation n\u00e9gative, c'est-\u00e0-dire que lorsque l'une augmente, l'autre baisse. <\/p>\n<p><\/p>\n<p>En analysant ces variations mutuelles, on peut faire des pr\u00e9visions sur le march\u00e9 financier. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Th\u00e9orie et pratique de l&#039;utilisation de ClickHouse dans des applications r\u00e9elles. Alexandre Za\u00eftsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/31329cf7523eef6a167632d281a634ce.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mais la t\u00e2che est complexe. Que faire pour cela ? Nous avons 100 milliards d'enregistrements qui contiennent : le temps, l'action et le prix. Nous devons d'abord calculer les 100 milliards de fois la runningDifference de l'algorithme de prix. La runningDifference est une fonction dans ClickHouse qui calcule la diff\u00e9rence entre deux lignes de mani\u00e8re s\u00e9quentielle. <\/p>\n<p><\/p>\n<p>Apr\u00e8s cela, il faut calculer la corr\u00e9lation, et cette corr\u00e9lation doit \u00eatre calcul\u00e9e pour chaque paire. Pour 5 000 actions, cela fait 12,5 millions de paires. C'est beaucoup, c'est-\u00e0-dire qu'il faut calculer cette fonction de corr\u00e9lation 12,5 fois. <\/p>\n<p><\/p>\n<p>Et si quelqu'un avait oubli\u00e9, x et y sont les attentes math\u00e9matiques d'un \u00e9chantillon. Cela signifie qu'il faut non seulement calculer les racines et les sommes, mais \u00e9galement effectuer des sommes \u00e0 l'int\u00e9rieur de ces sommes. Une quantit\u00e9 \u00e9norme de calculs doit \u00eatre effectu\u00e9e 12,5 millions de fois, et en plus, il faut les regrouper par heures. Et nous avons \u00e9galement beaucoup d'heures. Et il faut le faire en 60 secondes. C'est une blague. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Th\u00e9orie et pratique de l&#039;utilisation de ClickHouse dans des applications r\u00e9elles. Alexandre Za\u00eftsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/567a07f586a824c91671820fe21ec305.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Il fallait y parvenir d'une mani\u00e8re ou d'une autre, car tout cela fonctionnait tr\u00e8s, tr\u00e8s lentement avant l'arriv\u00e9e de ClickHouse.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Th\u00e9orie et pratique de l&#039;utilisation de ClickHouse dans des applications r\u00e9elles. Alexandre Za\u00eftsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/3eca1af4c3f25ff4b23fce9b84e16659.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ils ont essay\u00e9 de le calculer sur Hadoop, sur Spark, sur Greenplum. Et tout cela \u00e9tait tr\u00e8s lent ou co\u00fbteux. C'est-\u00e0-dire qu'il \u00e9tait possible de faire des calculs d'une certaine mani\u00e8re, mais cela revenait cher. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Th\u00e9orie et pratique de l&#039;utilisation de ClickHouse dans des applications r\u00e9elles. Alexandre Za\u00eftsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/37608c7e87ddb9a7d54854643044c369.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Puis ClickHouse est arriv\u00e9 et tout est devenu beaucoup mieux. <\/p>\n<p><\/p>\n<p>Je rappelle que nous avons un probl\u00e8me de localit\u00e9 des donn\u00e9es, donc les corr\u00e9lations ne peuvent pas \u00eatre localis\u00e9es. Nous ne pouvons pas agr\u00e9ger certaines donn\u00e9es sur un serveur, d'autres sur un autre et faire le calcul ; nous devons avoir toutes les donn\u00e9es partout. <\/p>\n<p><\/p>\n<p>Que ont-ils fait ? Initialement, les donn\u00e9es sont localis\u00e9es. Sur chacun des serveurs, les donn\u00e9es relatives \u00e0 la tarification d'un ensemble sp\u00e9cifique d'actions sont stock\u00e9es. Et elles ne se chevauchent pas. Par cons\u00e9quent, il est possible de calculer logReturn en parall\u00e8le et de mani\u00e8re ind\u00e9pendante, tout se passe donc simultan\u00e9ment et de mani\u00e8re distribu\u00e9e. <\/p>\n<p><\/p>\n<p>Ensuite, ils ont d\u00e9cid\u00e9 de r\u00e9duire ces donn\u00e9es tout en conservant leur expressivit\u00e9. R\u00e9duire \u00e0 l'aide de tableaux, c'est-\u00e0-dire pour chaque segment de temps cr\u00e9er un tableau d'actions et un tableau de prix. Ainsi, cela prend beaucoup moins d'espace pour les donn\u00e9es. Et il est un peu plus facile de travailler avec eux. Ce sont presque des op\u00e9rations parall\u00e8les, c'est-\u00e0-dire que nous calculons partiellement en parall\u00e8le, puis nous \u00e9crivons sur le serveur. <\/p>\n<p><\/p>\n<p>Apr\u00e8s cela, ces donn\u00e9es peuvent \u00eatre r\u00e9pliqu\u00e9es. La lettre \u00ab r \u00bb signifie que ces donn\u00e9es ont \u00e9t\u00e9 r\u00e9pliqu\u00e9es. C'est-\u00e0-dire que nous avons les m\u00eames donn\u00e9es sur les trois serveurs \u2013 ces tableaux. <\/p>\n<p><\/p>\n<p>Et ensuite, \u00e0 l'aide d'un script sp\u00e9cial, \u00e0 partir de cet ensemble de 12,5 millions de corr\u00e9lations \u00e0 calculer, il est possible de cr\u00e9er des paquets. C'est-\u00e0-dire 2 500 t\u00e2ches de 5 000 paires de corr\u00e9lations. Et cette t\u00e2che est calcul\u00e9e sur un serveur ClickHouse sp\u00e9cifique. Toutes les donn\u00e9es sont pr\u00e9sentes, car les donn\u00e9es sont identiques et il peut les calculer successivement. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Th\u00e9orie et pratique de l&#039;utilisation de ClickHouse dans des applications r\u00e9elles. Alexandre Za\u00eftsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/587c6d587a48f2407dd2687f5423d44a.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Encore une fois, voici \u00e0 quoi cela ressemble. D'abord, nous avons toutes les donn\u00e9es sous cette structure : temps, actions, prix. Ensuite, nous avons calcul\u00e9 le logReturn, c'est-\u00e0-dire les m\u00eames donn\u00e9es, mais au lieu du prix, nous avons d\u00e9j\u00e0 le logReturn. Puis nous les avons retravaill\u00e9es, c'est-\u00e0-dire que nous avons obtenu le temps et le groupArray par actions et par prix. Nous les avons r\u00e9pliqu\u00e9es. Et apr\u00e8s cela, nous avons g\u00e9n\u00e9r\u00e9 une multitude de t\u00e2ches et les avons aliment\u00e9es \u00e0 ClickHouse pour qu'il les traite. Et cela fonctionne. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Th\u00e9orie et pratique de l&#039;utilisation de ClickHouse dans des applications r\u00e9elles. Alexandre Za\u00eftsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/434e7385aebcffcc03d1bd1a2020c8bf.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pour le proof of concept, la t\u00e2che \u00e9tait une sous-t\u00e2che, c'est-\u00e0-dire qu'elle prenait moins de donn\u00e9es. Et cela se d\u00e9roulait sur seulement trois serveurs.<\/p>\n<p><\/p>\n<p>Les deux premi\u00e8res \u00e9tapes : le calcul du Log_return et l'emballage dans des tableaux ont pris environ une heure chacune. <\/p>\n<p><\/p>\n<p>Le calcul de la corr\u00e9lation a pris environ 50 heures. Mais 50 heures, c'est peu, car auparavant, cela prenait des semaines. C'\u00e9tait un grand succ\u00e8s. Et si l'on compte, cela se faisait 70 fois par seconde sur ce cluster.<\/p>\n<p><\/p>\n<p>Mais le plus important est que ce syst\u00e8me est pratiquement sans goulets d'\u00e9tranglement, c'est-\u00e0-dire qu'il se scalabilit\u00e9 presque de mani\u00e8re lin\u00e9aire. Et ils l'ont v\u00e9rifi\u00e9. Ils l'ont r\u00e9ussi \u00e0 faire \u00e9voluer. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Th\u00e9orie et pratique de l&#039;utilisation de ClickHouse dans des applications r\u00e9elles. Alexandre Za\u00eftsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/5a595a84897e492b49dccfb0f058b1b8.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>Un sch\u00e9ma correct est la moiti\u00e9 du succ\u00e8s. Et un sch\u00e9ma correct repose sur l'utilisation de toutes les technologies n\u00e9cessaires de ClickHouse. <\/li>\n<li>Les Summing\/AggregatingMergeTrees sont des technologies qui permettent d'agr\u00e9ger ou de calculer des snapshots d'\u00e9tat comme un cas particulier. Cela simplifie consid\u00e9rablement beaucoup de choses. <\/li>\n<li>Les Materialized Views permettent de contourner la limitation d'un seul index. Peut-\u00eatre que je ne l'ai pas tr\u00e8s bien expliqu\u00e9, mais quand nous avons charg\u00e9 les logs, les logs bruts \u00e9taient dans une table avec un seul index, alors que les logs d'attributs \u00e9taient dans une autre table, c'est-\u00e0-dire les m\u00eames donn\u00e9es, mais filtr\u00e9es, mais l'index \u00e9tait compl\u00e8tement diff\u00e9rent. Bien qu'il s'agisse des m\u00eames donn\u00e9es, la tri \u00e9tait diff\u00e9rente. Et les Materialized Views permettent, si vous en avez besoin, de contourner cette limitation de ClickHouse. <\/li>\n<li>R\u00e9duisez la granularit\u00e9 de l'index pour des requ\u00eates ponctuelles. <\/li>\n<li>Et r\u00e9partissez les donn\u00e9es de mani\u00e8re intelligente, essayez de maximiser la localisation des donn\u00e9es \u00e0 l'int\u00e9rieur du serveur. Et essayez de faire en sorte que les requ\u00eates utilisent \u00e9galement la localisation l\u00e0 o\u00f9 cela est possible. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Th\u00e9orie et pratique de l&#039;utilisation de ClickHouse dans des applications r\u00e9elles. Alexandre Za\u00eftsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/c0fc1737986e3f18ed1d3c53df9f0252.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>En r\u00e9sum\u00e9, on peut dire que ClickHouse a maintenant fermement \u00e9tabli son territoire tant dans les bases de donn\u00e9es commerciales que dans les bases de donn\u00e9es open source, c'est-\u00e0-dire pour l'analytique. Il s'int\u00e8gre parfaitement dans ce paysage. De plus, il commence lentement \u00e0 faire de l'ombre \u00e0 d'autres, car quand on a ClickHouse, on n'a pas besoin d'InfiniDB. Vertica, peut-\u00eatre, ne sera plus n\u00e9cessaire bient\u00f4t s'ils offrent un bon support SQL. Profitez-en !<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Th\u00e9orie et pratique de l&#039;utilisation de ClickHouse dans des applications r\u00e9elles. Alexandre Za\u00eftsev (2018)\" src=\"\/wp-content\/uploads\/2020\/07\/6e9a65d32eb6de7f9f139a30e7ab0d25.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u2014<em>Merci pour la pr\u00e9sentation ! C'\u00e9tait tr\u00e8s int\u00e9ressant ! Y a-t-il eu des comparaisons avec Apache Phoenix ?<\/em><\/p>\n<p><\/p>\n<p>-Non, je n'ai pas entendu parler de comparaisons. Nous et Yandex essayons de suivre toutes les comparaisons de ClickHouse avec diff\u00e9rentes bases de donn\u00e9es. Parce que si jamais quelque chose se r\u00e9v\u00e8le plus rapide que ClickHouse, Alexe\u00ef Milovidov ne peut pas dormir la nuit et commence \u00e0 optimiser rapidement. Je n'ai pas entendu parler d'une telle comparaison. <\/p>\n<p><\/p>\n<ul>\n<li>\n<p><em>(Alexe\u00ef Milovidov) Apache Phoenix est un moteur SQL sur Hbase. Hbase est principalement con\u00e7u pour des sc\u00e9narios de travail de type cl\u00e9-valeur. Chaque ligne peut avoir un nombre arbitraire de colonnes avec des noms arbitraires. Cela peut \u00eatre dit pour des syst\u00e8mes tels que Hbase, Cassandra. Et pour eux, les requ\u00eates analytiques lourdes ne fonctionneront pas correctement. Ou vous pouvez penser qu'elles fonctionnent correctement si vous n'avez pas d'exp\u00e9rience avec ClickHouse.<\/em><\/p>\n<p>\n<\/li>\n<li>\n<p>Merci<\/p>\n<p><\/p>\n<ul>\n<li>\n<p><em>Bonjour ! Je m'int\u00e9resse beaucoup \u00e0 ce sujet, car j'ai un sous-syst\u00e8me analytique. Mais quand je regarde ClickHouse, j'ai l'impression qu'il est tr\u00e8s adapt\u00e9 pour l'analyse d'\u00e9v\u00e9nements, mutables. Et si j'ai besoin d'analyser beaucoup de donn\u00e9es commerciales avec d'\u00e9normes tableaux, ClickHouse, autant que je le comprends, ne me conviendrait pas vraiment ? Surtout s'ils changent. Est-ce correct ou y a-t-il des exemples qui pourraient contredire cela ?<\/em><\/p>\n<p>\n<\/li>\n<li>\n<p>C'est exact. Et cela est vrai pour la plupart des bases de donn\u00e9es analytiques sp\u00e9cialis\u00e9es. Elles sont con\u00e7ues pour g\u00e9rer une ou plusieurs grandes tables qui sont mutables, et de nombreuses petites, qui changent lentement. C'est-\u00e0-dire que ClickHouse n'est pas comme Oracle, o\u00f9 l'on peut tout mettre et construire des requ\u00eates tr\u00e8s complexes. Pour utiliser ClickHouse de mani\u00e8re efficace, il faut structurer le sch\u00e9ma d'une mani\u00e8re qui fonctionne bien avec ClickHouse. Autrement dit, \u00e9viter une normalisation excessive, utiliser des dictionnaires et essayer de r\u00e9duire les longues relations. Si le sch\u00e9ma est structur\u00e9 de cette mani\u00e8re, alors des t\u00e2ches commerciales similaires sur ClickHouse peuvent \u00eatre r\u00e9solues beaucoup plus efficacement que dans une base de donn\u00e9es relationnelle traditionnelle. <\/p>\n<p>\n<\/li>\n<\/ul>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p><em>Merci pour votre pr\u00e9sentation ! J'ai une question sur le dernier cas financier. Ils avaient une analyse. Il fallait comparer comment \u00e7a monte et descend. Et je comprends que vous avez construit le syst\u00e8me sp\u00e9cifiquement pour cette analyse ? Si demain, par exemple, ils ont besoin d'un autre rapport sur ces donn\u00e9es, il faut reconstruire le sch\u00e9ma et recharger les donn\u00e9es ? C'est-\u00e0-dire faire un pr\u00e9traitement pour obtenir la requ\u00eate ?<\/em><\/p>\n<p><\/p>\n<p>Bien s\u00fbr, il s'agit d'une utilisation de ClickHouse pour une t\u00e2che tr\u00e8s pr\u00e9cise. Cela aurait pu \u00eatre r\u00e9solu de mani\u00e8re plus traditionnelle dans le cadre de Hadoop. Pour Hadoop, c'est une t\u00e2che id\u00e9ale. Mais avec Hadoop, c'est tr\u00e8s lent. Mon objectif est de d\u00e9montrer que sur ClickHouse, on peut r\u00e9soudre des probl\u00e8mes qui sont habituellement trait\u00e9s par d'autres moyens, mais de mani\u00e8re beaucoup plus efficace. C'est taill\u00e9 pour une t\u00e2che sp\u00e9cifique. Bien s\u00fbr, s'il y a une t\u00e2che similaire, on peut la r\u00e9soudre de mani\u00e8re similaire. <\/p>\n<p><\/p>\n<p><em>D'accord. Vous avez dit que 50 heures \u00e9taient n\u00e9cessaires pour le traitement. Cela commence d\u00e8s le d\u00e9but, lorsque les donn\u00e9es sont charg\u00e9es ou lorsque les r\u00e9sultats sont obtenus ?<\/em><\/p>\n<p><\/p>\n<p>Oui-oui.<\/p>\n<p><\/p>\n<p><em>Tr\u00e8s bien, merci beaucoup.<\/em><\/p>\n<p><\/p>\n<p>C'est sur un cluster de 3 serveurs. <\/p>\n<p><\/p>\n<p><em>Bonjour ! Merci pour votre pr\u00e9sentation ! C'\u00e9tait tr\u00e8s int\u00e9ressant. Je ne vais pas vraiment parler de la fonctionnalit\u00e9, mais de l'utilisation de ClickHouse en termes de stabilit\u00e9. Avez-vous rencontr\u00e9 des probl\u00e8mes de r\u00e9cup\u00e9ration ? Comment ClickHouse r\u00e9agit-il dans de tels cas ? Avez-vous d\u00e9j\u00e0 eu une instance qui plantait, y compris les r\u00e9pliques ? Nous, par exemple, avons rencontr\u00e9 un probl\u00e8me avec ClickHouse lorsqu'il d\u00e9passe ses limites et plante.<\/em><\/p>\n<p><\/p>\n<p>Bien s\u00fbr, il n'existe pas de syst\u00e8mes parfaits. Et ClickHouse a aussi ses probl\u00e8mes. Mais avez-vous entendu parler du fait que Yandex.Metrica ne fonctionne pas pendant longtemps ? Probablement pas. Elle fonctionne de mani\u00e8re fiable depuis environ 2012-2013 sur ClickHouse. Je peux \u00e9galement parler de ma propre exp\u00e9rience. Nous n'avons jamais eu de pannes totales. Certaines choses partielles pouvaient se produire, mais elles n'ont jamais \u00e9t\u00e9 suffisamment critiques pour avoir un impact s\u00e9rieux sur les affaires. Jamais cela ne s'est produit. ClickHouse est assez fiable et ne tombe pas de mani\u00e8re al\u00e9atoire. On peut s'en pr\u00e9occuper. Ce n'est pas une chose brute. Cela a \u00e9t\u00e9 prouv\u00e9 par de nombreuses entreprises. <\/p>\n<p><\/p>\n<p><em>Bonjour ! Vous avez dit qu'il fallait bien r\u00e9fl\u00e9chir d\u00e8s le d\u00e9but au sch\u00e9ma de donn\u00e9es. Et si cela arrive ? Mes donn\u00e9es s'\u00e9coulent sans cesse. Six mois passent, et je r\u00e9alise que je ne peux pas continuer comme \u00e7a, il me faut recharger les donn\u00e9es et faire quelque chose avec elles.<\/em> <\/p>\n<p><\/p>\n<p>Cela d\u00e9pend bien s\u00fbr de votre syst\u00e8me. Il existe plusieurs fa\u00e7ons de le faire presque sans interruption. Par exemple, vous pouvez cr\u00e9er une vue mat\u00e9rialis\u00e9e, dans laquelle vous d\u00e9finissez une autre structure de donn\u00e9es, si elle peut \u00eatre mapp\u00e9e de mani\u00e8re univoque. C'est-\u00e0-dire que si elle permet de faire du mapping avec les fonctionnalit\u00e9s de ClickHouse, c'est-\u00e0-dire d'extraire certaines choses, de changer la cl\u00e9 primaire, de modifier le partitionnement, alors vous pouvez cr\u00e9er une vue mat\u00e9rialis\u00e9e. Vous y r\u00e9\u00e9crivez vos anciennes donn\u00e9es, les nouvelles seront \u00e9crites automatiquement. Ensuite, il vous suffira de basculer vers l'utilisation de la vue mat\u00e9rialis\u00e9e, puis de passer l'\u00e9criture \u00e0 celle-ci et de supprimer l'ancienne table. C'est une m\u00e9thode sans interruption. <\/p>\n<p><\/p>\n<p><em>Merci.<\/em><\/p>\n<p>Source : <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/512304\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0435\u0439\u0447\u0430\u0441 \u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0447\u0442\u0438 \u0432\u0435\u0437\u0434\u0435, \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0411\u0414 \u0432\u0441\u0435 \u0435\u0449\u0435 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u044d\u043a\u0437\u043e\u0442\u0438\u0447\u043d\u044b. \u0418\u0445 \u043f\u043b\u043e\u0445\u043e \u0437\u043d\u0430\u044e\u0442 \u0438 \u0435\u0449\u0435 \u0445\u0443\u0436\u0435 \u0443\u043c\u0435\u044e\u0442 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c. \u041c\u043d\u043e\u0433\u0438\u0435 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044e\u0442 &quot;\u0435\u0441\u0442\u044c \u043a\u0430\u043a\u0442\u0443\u0441&quot; \u0441 MySQL \u0438\u043b\u0438 PostgreSQL, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043f\u043e\u0434 \u0434\u0440\u0443\u0433\u0438\u0435 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438, \u043c\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u0441 NoSQL \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u043f\u043b\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u0437\u0430 \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u0438\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f. ClickHouse \u043c\u0435\u043d\u044f\u0435\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0438\u0433\u0440\u044b \u0438 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043d\u0438\u0436\u0430\u0435\u0442 \u043f\u043e\u0440\u043e\u0433 \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0432 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":89879,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-89878","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/teoriya-i-praktika-ispolzovaniya-clickhouse-v-realnyh-prilozheniyah-aleksandr-zajczev-2018g\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0422\u0435\u043e\u0440\u0438\u044f \u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f ClickHouse \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445. \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440 \u0417\u0430\u0439\u0446\u0435\u0432 (2018\u0433) | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/teoriya-i-praktika-ispolzovaniya-clickhouse-v-realnyh-prilozheniyah-aleksandr-zajczev-2018g\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-07-26T23:42:42+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-07-26T23:42:42+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Th\u00e9orie et pratique de l'utilisation de ClickHouse dans des applications r\u00e9elles. Alexandre Zaitsev (2018) | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/teoriya-i-praktika-ispolzovaniya-clickhouse-v-realnyh-prilozheniyah-aleksandr-zajczev-2018g","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"fr_FR","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0422\u0435\u043e\u0440\u0438\u044f \u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f ClickHouse \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445. \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440 \u0417\u0430\u0439\u0446\u0435\u0432 (2018\u0433) | ProHoster","og:url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/teoriya-i-praktika-ispolzovaniya-clickhouse-v-realnyh-prilozheniyah-aleksandr-zajczev-2018g","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-07-26T23:42:42+00:00","article:modified_time":"2020-07-26T23:42:42+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"89878","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 13:02:37","updated":"2026-02-22 15:29:33","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/89878","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=89878"}],"version-history":[{"count":2,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/89878\/revisions"}],"predecessor-version":[{"id":162171,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/89878\/revisions\/162171"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media\/89879"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=89878"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=89878"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=89878"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}