Teori och praktik för att anvÀnda ClickHouse i verkliga applikationer. Alexander Zaitsev (2018)

Teori och praktik för att anvÀnda ClickHouse i verkliga applikationer. Alexander Zaitsev (2018)

Trots att det nu finns mycket data nÀstan överallt Àr analytiska databaser fortfarande ganska exotiska. De Àr dÄligt kÀnda och Ànnu vÀrre kan de anvÀnda dem effektivt. MÄnga fortsÀtter att "Àta kaktus" med MySQL eller PostgreSQL, som Àr designade för andra scenarier, lider av NoSQL eller betalar för mycket för kommersiella lösningar. ClickHouse Àndrar spelets regler och sÀnker avsevÀrt tröskeln för att komma in i en vÀrld av analytisk DBMS.

Rapport frÄn BackEnd Conf 2018 och den publiceras med tillstÄnd av talaren.


Teori och praktik för att anvÀnda ClickHouse i verkliga applikationer. Alexander Zaitsev (2018)
Vem Àr jag och varför pratar jag om ClickHouse? Jag Àr utvecklingsdirektör pÄ LifeStreet, som anvÀnder ClickHouse. Jag Àr ocksÄ grundaren av Altinity. Det Àr en Yandex-partner som marknadsför ClickHouse och hjÀlper Yandex att göra ClickHouse mer framgÄngsrik. OcksÄ redo att dela kunskap om ClickHouse.

Teori och praktik för att anvÀnda ClickHouse i verkliga applikationer. Alexander Zaitsev (2018)

Och jag Àr inte bror till Petya Zaitsev. Jag fÄr ofta frÄgan om detta. Nej, vi Àr inte bröder.

Teori och praktik för att anvÀnda ClickHouse i verkliga applikationer. Alexander Zaitsev (2018)

"Alla vet" att ClickHouse:

  • VĂ€ldigt snabbt,
  • VĂ€ldigt bekvĂ€m
  • AnvĂ€nds i Yandex.

Lite mindre Àr kÀnt i vilka företag och hur det anvÀnds.

Teori och praktik för att anvÀnda ClickHouse i verkliga applikationer. Alexander Zaitsev (2018)

Jag kommer att berÀtta varför, var och hur ClickHouse anvÀnds, förutom Yandex.

Jag kommer att berÀtta hur specifika uppgifter löses med hjÀlp av ClickHouse i olika företag, vilka ClickHouse-verktyg du kan anvÀnda för dina uppgifter, och hur de anvÀndes i olika företag.

Jag plockade upp tre exempel som visar ClickHouse frÄn olika vinklar. Jag tror att det kommer att bli intressant.

Teori och praktik för att anvÀnda ClickHouse i verkliga applikationer. Alexander Zaitsev (2018)

Den första frÄgan Àr: "Varför behöver vi ClickHouse?". Det verkar vara en ganska sjÀlvklar frÄga, men det finns mer Àn ett svar pÄ den.

Teori och praktik för att anvÀnda ClickHouse i verkliga applikationer. Alexander Zaitsev (2018)

  • Det första svaret Ă€r för prestanda. ClickHouse Ă€r vĂ€ldigt snabbt. Analytics pĂ„ ClickHouse Ă€r ocksĂ„ mycket snabb. Det kan ofta anvĂ€ndas dĂ€r nĂ„got annat Ă€r vĂ€ldigt lĂ„ngsamt eller vĂ€ldigt dĂ„ligt.
  • Det andra svaret Ă€r kostnad. Och först av allt, kostnaden för skalning. Till exempel Ă€r Vertica en helt fantastisk databas. Det fungerar vĂ€ldigt bra om du inte har mĂ„nga terabyte med data. Men nĂ€r det kommer till hundratals terabyte eller petabyte gĂ„r kostnaden för en licens och support in i en ganska betydande summa. Och det Ă€r dyrt. Och ClickHouse Ă€r gratis.
  • Det tredje svaret Ă€r driftskostnad. Detta Ă€r ett lite annorlunda tillvĂ€gagĂ„ngssĂ€tt. RedShift Ă€r en fantastisk analog. PĂ„ RedShift kan du fatta ett beslut mycket snabbt. Det kommer att fungera bra, men samtidigt, varje timme, varje dag och varje mĂ„nad, kommer du att betala Amazon ganska dyrt, eftersom detta Ă€r en mycket dyr tjĂ€nst. Google BigQuery ocksĂ„. Om nĂ„gon anvĂ€nde det, dĂ„ vet han att dĂ€r kan du köra flera förfrĂ„gningar och fĂ„ en rĂ€kning pĂ„ hundratals dollar helt plötsligt.

ClickHouse har inte dessa problem.

Teori och praktik för att anvÀnda ClickHouse i verkliga applikationer. Alexander Zaitsev (2018)

Var anvÀnds ClickHouse nu? Förutom Yandex anvÀnds ClickHouse i ett gÀng olika företag och företag.

  • Först och frĂ€mst Ă€r detta webbapplikationsanalys, det vill sĂ€ga det hĂ€r Ă€r ett anvĂ€ndningsfall som kom frĂ„n Yandex.
  • MĂ„nga AdTech-företag anvĂ€nder ClickHouse.
  • MĂ„nga företag som behöver analysera transaktionsloggar frĂ„n olika kĂ€llor.
  • Flera företag anvĂ€nder ClickHouse för att övervaka sĂ€kerhetsloggar. De laddar upp dem till ClickHouse, gör rapporter och fĂ„r de resultat de behöver.
  • Företag börjar anvĂ€nda det i finansiell analys, det vill sĂ€ga gradvis nĂ€rmar sig Ă€ven stora företag ClickHouse.
  • molnflamma. Om nĂ„gon följer ClickHouse har de förmodligen hört namnet pĂ„ detta företag. Detta Ă€r en av de viktigaste bidragsgivarna frĂ„n samhĂ€llet. Och de har en mycket seriös ClickHouse-installation. Till exempel gjorde de Kafka Engine för ClickHouse.
  • Teleföretag började anvĂ€nda. Flera företag anvĂ€nder ClickHouse antingen som bevis pĂ„ koncept eller redan i produktion.
  • Ett företag anvĂ€nder ClickHouse för att övervaka produktionsprocesser. De testar mikrokretsar, skriver av en massa parametrar, det finns cirka 2 000 egenskaper. Och sedan analyserar de om spelet Ă€r bra eller dĂ„ligt.
  • Blockkedjeanalys. Det finns ett sĂ„dant ryskt företag som Bloxy.info. Detta Ă€r en analys av ethereum-nĂ€tverket. Det gjorde de ocksĂ„ pĂ„ ClickHouse.

Teori och praktik för att anvÀnda ClickHouse i verkliga applikationer. Alexander Zaitsev (2018)

Och storleken spelar ingen roll. Det finns mÄnga företag som anvÀnder en liten server. Och han lÄter dem lösa sina problem. Och Ànnu fler företag anvÀnder stora kluster av mÄnga servrar eller dussintals servrar.

Och om du tittar pÄ posterna, dÄ:

  • Yandex: 500+ servrar, de lagrar 25 miljarder poster om dagen dĂ€r.
  • LifeStreet: 60 servrar, cirka 75 miljarder poster per dag. Det finns fĂ€rre servrar, fler poster Ă€n i Yandex.
  • CloudFlare: 36 servrar, de sparar 200 miljarder poster om dagen. De har Ă€nnu fĂ€rre servrar och lagrar Ă€nnu mer data.
  • Bloomberg: 102 servrar, ungefĂ€r en biljon poster per dag. RekordhĂ„llare.

Teori och praktik för att anvÀnda ClickHouse i verkliga applikationer. Alexander Zaitsev (2018)

Geografiskt Àr detta ocksÄ mycket. Denna karta hÀr visar en vÀrmekarta över var ClickHouse anvÀnds i vÀrlden. Ryssland, Kina, Amerika sticker ut tydligt hÀr. Det finns fÄ europeiska lÀnder. Och det finns 4 kluster.

Detta Àr en jÀmförande analys, det finns ingen anledning att leta efter absoluta siffror. Detta Àr en analys av besökare som lÀser engelsksprÄkigt material pÄ Altinity-webbplatsen, eftersom det inte finns nÄgra rysktalande dÀr. Och Ryssland, Ukraina, Vitryssland, det vill sÀga den rysktalande delen av samhÀllet, dessa Àr de mest talrika anvÀndarna. Sedan kommer USA och Kanada. Kina Àr mycket ikapp. Det fanns nÀstan inget Kina dÀr för ett halvÄr sedan, nu har Kina redan gÄtt om Europa och fortsÀtter att vÀxa. Gamla Europa ligger inte heller lÄngt efter, och ledande i anvÀndningen av ClickHouse Àr konstigt nog Frankrike.

Teori och praktik för att anvÀnda ClickHouse i verkliga applikationer. Alexander Zaitsev (2018)

Varför berÀttar jag allt detta? För att visa att ClickHouse hÄller pÄ att bli en standardlösning för big data-analys och redan anvÀnds pÄ mÄnga stÀllen. Om du anvÀnder den Àr du inne i rÀtt trend. Om du inte anvÀnder det Ànnu, dÄ kan du inte vara rÀdd att du blir lÀmnad ensam och ingen kommer att hjÀlpa dig, eftersom mÄnga redan gör detta.

Teori och praktik för att anvÀnda ClickHouse i verkliga applikationer. Alexander Zaitsev (2018)

Det hÀr Àr exempel pÄ verklig ClickHouse-anvÀndning i flera företag.

  • Det första exemplet Ă€r ett annonsnĂ€tverk: migrering frĂ„n Vertica till ClickHouse. Och jag kĂ€nner nĂ„gra företag som har gĂ„tt över frĂ„n Vertica eller som hĂ„ller pĂ„ att gĂ„ över.
  • Det andra exemplet Ă€r transaktionslagring pĂ„ ClickHouse. Detta Ă€r ett exempel byggt pĂ„ antimönster. Allt som inte bör göras i ClickHouse pĂ„ rĂ„d frĂ„n utvecklare görs hĂ€r. Och det Ă€r gjort sĂ„ effektivt att det fungerar. Och det fungerar mycket bĂ€ttre Ă€n den typiska transaktionslösningen.
  • Det tredje exemplet Ă€r distribuerad datoranvĂ€ndning pĂ„ ClickHouse. Det fanns en frĂ„ga om hur ClickHouse kan integreras i Hadoop-ekosystemet. Jag kommer att visa ett exempel pĂ„ hur ett företag gjorde nĂ„got liknande en kartreduceringsbehĂ„llare pĂ„ ClickHouse, hĂ„lla reda pĂ„ datalokalisering, etc., för att berĂ€kna en mycket icke-trivial uppgift.

Teori och praktik för att anvÀnda ClickHouse i verkliga applikationer. Alexander Zaitsev (2018)

  • LifeStreet Ă€r ett Ad Tech-företag som har all teknik som följer med ett annonsnĂ€tverk.
  • Hon Ă€r engagerad i annonsoptimering, programmatisk budgivning.
  • Massor av data: cirka 10 miljarder hĂ€ndelser per dag. Samtidigt kan evenemang dĂ€r delas upp i flera delevenemang.
  • Det finns mĂ„nga klienter av denna data, och dessa Ă€r inte bara mĂ€nniskor, mycket mer - det hĂ€r Ă€r olika algoritmer som Ă€r engagerade i programmatisk budgivning.

Teori och praktik för att anvÀnda ClickHouse i verkliga applikationer. Alexander Zaitsev (2018)

Företaget har gÄtt en lÄng och trÄkig vÀg. Och jag pratade om det pÄ HighLoad. Först flyttade LifeStreet frÄn MySQL (med ett kort stopp pÄ Oracle) till Vertica. Och du kan hitta en berÀttelse om det.

Och allt var vÀldigt bra, men det stod snabbt klart att datan vÀxer och Vertica Àr dyrt. DÀrför sökte man olika alternativ. NÄgra av dem Àr listade hÀr. Och faktiskt gjorde vi proof of concept eller ibland prestandatester av nÀstan alla databaser som fanns pÄ marknaden frÄn 13:e till 16:e Äret och var ungefÀr lÀmpliga vad gÀller funktionalitet. Och jag pratade ocksÄ om nÄgra av dem pÄ HighLoad.

Teori och praktik för att anvÀnda ClickHouse i verkliga applikationer. Alexander Zaitsev (2018)

Uppgiften var att migrera frÄn Vertica i första hand, eftersom datan vÀxte. Och de vÀxte exponentiellt under Ären. Sedan gick de pÄ hyllan, men inte desto mindre. Och nÀr man förutspÄdde denna tillvÀxt, affÀrskrav pÄ mÀngden data som nÄgon form av analys behövde göras pÄ, stod det klart att petabyte snart skulle diskuteras. Och att betala för petabyte Àr redan vÀldigt dyrt, sÄ vi letade efter ett alternativ vart vi skulle gÄ.

Teori och praktik för att anvÀnda ClickHouse i verkliga applikationer. Alexander Zaitsev (2018)

Vart ska man gÄ? Och lÀnge var det inte alls klart vart man skulle ta vÀgen, för Ä ena sidan finns det kommersiella databaser, de verkar fungera bra. Vissa fungerar nÀstan lika bra som Vertica, vissa sÀmre. Men de Àr alla dyra, inget billigare och bÀttre kunde inte hittas.

Å andra sidan finns det open source-lösningar, som inte Ă€r sĂ€rskilt mĂ„nga, det vill sĂ€ga för analys kan de rĂ€knas pĂ„ fingrarna. Och de Ă€r gratis eller billiga, men lĂ„ngsamma. Och de saknar ofta den nödvĂ€ndiga och anvĂ€ndbara funktionaliteten.

Och det fanns inget att kombinera det goda som finns i kommersiella databaser och allt gratis som finns i öppen kÀllkod.

Teori och praktik för att anvÀnda ClickHouse i verkliga applikationer. Alexander Zaitsev (2018)

Det var ingenting förrÀn, ovÀntat, Yandex drog ut ClickHouse, som en trollkarl frÄn en hatt, som en kanin. Och det var ett ovÀntat beslut, de stÀller fortfarande frÄgan: "Varför?", Men ÀndÄ.

Teori och praktik för att anvÀnda ClickHouse i verkliga applikationer. Alexander Zaitsev (2018)

Och direkt sommaren 2016 började vi titta pÄ vad ClickHouse Àr. Och det visade sig att det ibland kan vara snabbare Àn Vertica. Vi testade olika scenarier pÄ olika önskemÄl. Och om frÄgan endast anvÀnde en tabell, det vill sÀga utan nÄgra joins (join), sÄ var ClickHouse dubbelt sÄ snabb som Vertica.

Jag var inte för lat och tittade pÄ Yandex-tester hÀromdagen. Det Àr samma sak dÀr: ClickHouse Àr dubbelt sÄ snabbt som Vertica, sÄ de pratar ofta om det.

Men om det finns anslutningar i frÄgorna visar allt sig inte sÀrskilt entydigt. Och ClickHouse kan vara dubbelt sÄ lÄngsam som Vertica. Och om du korrigerar begÀran nÄgot och skriver om den, sÄ Àr de ungefÀr lika. Inte dÄligt. Och gratis.

Teori och praktik för att anvÀnda ClickHouse i verkliga applikationer. Alexander Zaitsev (2018)

Och efter att ha fÄtt testresultaten och tittat pÄ det frÄn olika vinklar, gick LifeStreet till ClickHouse.

Teori och praktik för att anvÀnda ClickHouse i verkliga applikationer. Alexander Zaitsev (2018)

Det hÀr Àr 16:e Äret, vill jag pÄminna dig. Det var som ett skÀmt om möss som grÀt och stickade sig, men som fortsatte Àta kaktusen. Och detta beskrevs i detalj, det finns en video om detta osv.

Teori och praktik för att anvÀnda ClickHouse i verkliga applikationer. Alexander Zaitsev (2018)

DÀrför kommer jag inte att prata om det i detalj, jag kommer bara att prata om resultaten och nÄgra intressanta saker som jag inte pratade om dÄ.

Resultaten Àr:

  • FramgĂ„ngsrik migrering och mer Ă€n ett Ă„r fungerar systemet redan i produktion.
  • Produktiviteten och flexibiliteten har ökat. Av de 10 miljarder poster som vi hade rĂ„d att lagra per dag och sedan under en kort tid, lagrar LifeStreet nu 75 miljarder poster per dag och kan göra detta i 3 mĂ„nader eller mer. Om du rĂ€knar pĂ„ toppen Ă€r detta upp till en miljon hĂ€ndelser per sekund. Mer Ă€n en miljon SQL-frĂ„gor per dag kommer in i detta system, mestadels frĂ„n olika robotar.
  • Trots att fler servrar anvĂ€ndes för ClickHouse Ă€n för Vertica sparade man Ă€ven pĂ„ hĂ„rdvaran, eftersom ganska dyra SAS-diskar anvĂ€ndes i Vertica. ClickHouse anvĂ€nde SATA. Och varför? Eftersom i Vertica Ă€r insatsen synkron. Och synkronisering krĂ€ver att diskarna inte saktar ner för mycket, och Ă€ven att nĂ€tverket inte saktar ner för mycket, det vill sĂ€ga en ganska dyr operation. Och i ClickHouse Ă€r infogningen asynkron. Dessutom kan du alltid skriva allt lokalt, det finns inga extra kostnader för detta, sĂ„ data kan infogas i ClickHouse mycket snabbare Ă€n i Vertika, Ă€ven pĂ„ lĂ„ngsammare enheter. Och lĂ€sning Ă€r ungefĂ€r detsamma. NĂ€r man lĂ€ser pĂ„ SATA, om de Ă€r i RAID, sĂ„ Ă€r allt tillrĂ€ckligt snabbt.
  • Inte begrĂ€nsat av licens, det vill sĂ€ga 3 petabyte data pĂ„ 60 servrar (20 servrar Ă€r en replik) och 6 biljoner poster i fakta och sammanstĂ€llningar. Inget sĂ„dant hĂ€r hade man rĂ„d med pĂ„ Vertica.

Teori och praktik för att anvÀnda ClickHouse i verkliga applikationer. Alexander Zaitsev (2018)

Jag övergÄr nu till praktiska saker i detta exempel.

  • Det första Ă€r ett effektivt system. Mycket beror pĂ„ schemat.
  • Den andra Ă€r effektiv SQL-generering.

Teori och praktik för att anvÀnda ClickHouse i verkliga applikationer. Alexander Zaitsev (2018)

En typisk OLAP-frÄga Àr ett urval. NÄgra av kolumnerna gÄr till gruppera efter, nÄgra av kolumnerna gÄr till aggregerade funktioner. Det finns dÀr, som kan representeras som en bit av en kub. Hela gruppen kan ses som en projektion. Och det Àr dÀrför det kallas multivariat dataanalys.

Teori och praktik för att anvÀnda ClickHouse i verkliga applikationer. Alexander Zaitsev (2018)

Och ofta modelleras detta i form av ett stjÀrnschema, nÀr det finns ett centralt faktum och egenskaper hos detta faktum lÀngs sidorna, lÀngs strÄlarna.

Teori och praktik för att anvÀnda ClickHouse i verkliga applikationer. Alexander Zaitsev (2018)

Och nÀr det gÀller fysisk design, hur det passar pÄ bordet, gör de vanligtvis en normaliserad representation. Du kan avnormalisera, men det Àr dyrt pÄ disken och inte sÀrskilt effektivt pÄ frÄgor. DÀrför gör de vanligtvis en normaliserad representation, det vill sÀga en faktatabell och mÄnga, mÄnga dimensionstabeller.

Men det fungerar inte bra i ClickHouse. Det finns tvÄ anledningar:

  • Den första Ă€r för att ClickHouse inte har sĂ€rskilt bra joins, det vill sĂ€ga det finns joins, men de Ă€r dĂ„liga. Även om det Ă€r dĂ„ligt.
  • Det andra Ă€r att tabellerna inte uppdateras. Vanligtvis i dessa plattor, som finns runt stjĂ€rnkretsen, behöver nĂ„got Ă€ndras. Till exempel kundnamn, företagsnamn osv. Och det fungerar inte.

Och det finns en vÀg ut ur detta i ClickHouse. Àven tvÄ:

  • Den första Ă€r anvĂ€ndningen av ordböcker. Externa ordböcker Ă€r det som hjĂ€lper 99% att lösa problemet med stjĂ€rnschemat, med uppdateringar och sĂ„ vidare.
  • Det andra Ă€r anvĂ€ndningen av arrayer. Arrayer hjĂ€lper ocksĂ„ till att bli av med sammanfogningar och problem med normalisering.

Teori och praktik för att anvÀnda ClickHouse i verkliga applikationer. Alexander Zaitsev (2018)

  • Ingen anslutning behövs.
  • Uppgraderbar. Sedan mars 2018 har det dykt upp en odokumenterad möjlighet (du hittar inte detta i dokumentationen) att uppdatera ordböcker delvis, det vill sĂ€ga de poster som har Ă€ndrats. I praktiken Ă€r det som ett bord.
  • Alltid i minnet, sĂ„ gĂ„r med i en ordbok fungerar snabbare Ă€n om det vore en tabell som finns pĂ„ disk och det Ă€r Ă€nnu inte ett faktum att det finns i cachen, troligen inte.

Teori och praktik för att anvÀnda ClickHouse i verkliga applikationer. Alexander Zaitsev (2018)

  • Du behöver inte ansluta heller.
  • Detta Ă€r en kompakt 1-till-mĂ„nga-representation.
  • Och enligt min mening Ă€r arrayer gjorda för nördar. Det hĂ€r Ă€r lambdafunktioner och sĂ„ vidare.

Detta Àr inte för röda ord. Detta Àr en mycket kraftfull funktion som lÄter dig göra mÄnga saker pÄ ett mycket enkelt och elegant sÀtt.

Teori och praktik för att anvÀnda ClickHouse i verkliga applikationer. Alexander Zaitsev (2018)

Typiska exempel som hjÀlper till att lösa arrayer. Dessa exempel Àr enkla och tydliga nog:

  • Sök efter taggar. Om du har hashtags dĂ€r och vill hitta nĂ„gra inlĂ€gg efter hashtag.
  • Sök efter nyckel-vĂ€rdepar. Det finns ocksĂ„ nĂ„gra attribut med ett vĂ€rde.
  • Lagra listor med nycklar som du behöver översĂ€tta till nĂ„got annat.

Alla dessa uppgifter kan lösas utan arrayer. Taggar kan lÀggas pÄ nÄgon rad och vÀljas med ett reguljÀrt uttryck eller i en separat tabell, men dÄ mÄste man göra joins.

Teori och praktik för att anvÀnda ClickHouse i verkliga applikationer. Alexander Zaitsev (2018)

Och i ClickHouse behöver du inte göra nÄgonting, det rÀcker med att beskriva strÀngarrayen för hashtags eller skapa en kapslad struktur för nyckel-vÀrdesystem.

Kapslad struktur kanske inte Àr det bÀsta namnet. Dessa Àr tvÄ arrayer som har en gemensam del i namnet och nÄgra relaterade egenskaper.

Och det Àr vÀldigt enkelt att söka efter tagg. Ha en funktion has, som kontrollerar att arrayen innehÄller ett element. Alla har hittat alla bidrag som rör vÄr konferens.

Sök efter subid Àr lite mer komplicerat. Vi mÄste först hitta nyckelns index och sedan ta elementet med detta index och kontrollera att detta vÀrde Àr vad vi behöver. Det Àr dock vÀldigt enkelt och kompakt.

Det reguljÀra uttrycket som du skulle vilja skriva om du höll allt pÄ en rad, det skulle för det första vara klumpigt. Och för det andra fungerade det mycket lÀngre Àn tvÄ arrayer.

Teori och praktik för att anvÀnda ClickHouse i verkliga applikationer. Alexander Zaitsev (2018)

Ett annat exempel. Du har en array dÀr du lagrar ID:t. Och du kan översÀtta dem till namn. Fungera arrayMap. Detta Àr en typisk lambdafunktion. Du passerar lambda-uttryck dÀr. Och hon tar fram vÀrdet pÄ namnet för varje ID frÄn ordboken.

Sökning kan göras pÄ samma sÀtt. En predikatfunktion skickas som kontrollerar vad elementen matchar.

Teori och praktik för att anvÀnda ClickHouse i verkliga applikationer. Alexander Zaitsev (2018)

Dessa saker förenklar kretsen avsevÀrt och löser en massa problem.

Men nÀsta problem vi stÄr inför, och som jag skulle vilja nÀmna, Àr effektiva frÄgor.

  • ClickHouse har ingen frĂ„geplanerare. Absolut inte.
  • ÄndĂ„ behöver komplexa frĂ„gor fortfarande planeras. I vilka fall?
  • Om det finns flera kopplingar i frĂ„gan lindar du in dem i underval. Och ordningen i vilken de avrĂ€ttas spelar roll.
  • Och den andra - om begĂ€ran distribueras. För i en distribuerad frĂ„ga exekveras bara den innersta subselect distribuerad, och allt annat skickas till en server som du anslutit till och exekverat dĂ€r. DĂ€rför, om du har distribuerat frĂ„gor med mĂ„nga joins (join), mĂ„ste du vĂ€lja ordning.

Och Àven i enklare fall Àr det ibland ocksÄ nödvÀndigt att göra schemalÀggarens arbete och skriva om frÄgorna lite.

Teori och praktik för att anvÀnda ClickHouse i verkliga applikationer. Alexander Zaitsev (2018)

HÀr Àr ett exempel. PÄ vÀnster sida finns en frÄga som visar de 5 bÀsta lÀnderna. Och det tar 2,5 sekunder, enligt mig. Och pÄ höger sida, samma frÄga, men nÄgot omskriven. IstÀllet för att gruppera efter strÀng började vi gruppera efter nyckel (int). Och det Àr snabbare. Och sÄ kopplade vi en ordbok till resultatet. IstÀllet för 2,5 sekunder tar begÀran 1,5 sekunder. Det hÀr Àr bra.

Teori och praktik för att anvÀnda ClickHouse i verkliga applikationer. Alexander Zaitsev (2018)

Ett liknande exempel med omskrivningsfilter. HĂ€r Ă€r en förfrĂ„gan för Ryssland. Den gĂ„r i 5 sekunder. Om vi ​​skriver om det pĂ„ ett sĂ„dant sĂ€tt att vi inte jĂ€mför en strĂ€ng, utan siffror med nĂ„gon uppsĂ€ttning av de nycklar som relaterar till Ryssland, sĂ„ kommer det att gĂ„ mycket snabbare.

Teori och praktik för att anvÀnda ClickHouse i verkliga applikationer. Alexander Zaitsev (2018)

Det finns mÄnga sÄdana knep. Och de tillÄter dig att avsevÀrt snabba upp frÄgor som du tror redan kör snabbt, eller tvÀrtom, gÄr lÄngsamt. De kan göras Ànnu snabbare.

Teori och praktik för att anvÀnda ClickHouse i verkliga applikationer. Alexander Zaitsev (2018)

  • Maximalt arbete i distribuerat lĂ€ge.
  • Sortering efter minimityper, som jag gjorde efter ints.
  • Om det finns nĂ„gra anslutningar (join), ordböcker, Ă€r det bĂ€ttre att göra dem som en sista utvĂ€g, nĂ€r du redan har data Ă„tminstone delvis grupperade, dĂ„ kommer joinoperationen eller ordboksanropet att anropas fĂ€rre gĂ„nger och det kommer att gĂ„ snabbare .
  • Byte av filter.

Det finns andra tekniker, och inte bara de som jag har demonstrerat. Och alla kan ibland avsevÀrt pÄskynda utförandet av frÄgor.

Teori och praktik för att anvÀnda ClickHouse i verkliga applikationer. Alexander Zaitsev (2018)

LÄt oss gÄ vidare till nÀsta exempel. Företag X frÄn USA. Vad gör hon?

Det fanns en uppgift:

  • OfflinelĂ€nkning av reklamtransaktioner.
  • Modellering av olika bindningsmodeller.

Teori och praktik för att anvÀnda ClickHouse i verkliga applikationer. Alexander Zaitsev (2018)

Vad Àr scenariot?

En vanlig besökare kommer till sidan till exempel 20 gÄnger i mÄnaden frÄn olika annonser, eller bara sÄ kommer ibland utan nÄgra annonser, eftersom han kommer ihÄg den hÀr sidan. Tittar pÄ nÄgra produkter, lÀgger dem i korgen, tar upp dem ur korgen. Och i slutÀndan köper nÄgot.

Rimliga frÄgor: "Vem ska betala för reklam, om det behövs?" och "Vilken reklam pÄverkade honom, om nÄgon?". Det vill sÀga, varför köpte han och hur fÄr man mÀnniskor som denna person att köpa ocksÄ?

För att lösa detta problem mÄste du koppla de hÀndelser som intrÀffar pÄ webbplatsen pÄ rÀtt sÀtt, det vill sÀga pÄ nÄgot sÀtt bygga en koppling mellan dem. Sedan skickas de för analys till DWH. Och baserat pÄ denna analys kan du bygga modeller för vem och vilka annonser som ska visas.

Teori och praktik för att anvÀnda ClickHouse i verkliga applikationer. Alexander Zaitsev (2018)

En annonstransaktion Àr en uppsÀttning relaterade anvÀndarhÀndelser som börjar frÄn att en annons visas, sedan hÀnder nÄgot, sedan kanske ett köp, och sedan kan det bli köp inom ett köp. Om det till exempel Àr en mobilapplikation eller ett mobilspel, sÄ sker vanligtvis installationen av applikationen gratis, och om nÄgot görs dÀr kan det krÀvas pengar för detta. Och ju mer en person spenderar i applikationen, desto mer vÀrdefull Àr den. Men för detta mÄste du ansluta allt.

Teori och praktik för att anvÀnda ClickHouse i verkliga applikationer. Alexander Zaitsev (2018)

Det finns mÄnga bindningsmodeller.

De mest populÀra Àr:

  • Senaste interaktion, dĂ€r interaktion Ă€r antingen ett klick eller en visning.
  • Första interaktion, det vill sĂ€ga det första som förde en person till webbplatsen.
  • LinjĂ€r kombination - alla lika.
  • Försvagning.
  • Och sĂ„ vidare.

Teori och praktik för att anvÀnda ClickHouse i verkliga applikationer. Alexander Zaitsev (2018)

Och hur fungerade det hela frÄn början? Det var Runtime och Cassandra. Cassandra anvÀndes som transaktionslagring, det vill sÀga alla relaterade transaktioner lagrades i den. Och nÀr nÄgon hÀndelse kommer i Runtime, till exempel, visar nÄgon sida eller nÄgot annat, dÄ gjordes en förfrÄgan till Cassandra - finns det en sÄdan person eller inte. Sedan erhölls de transaktioner som hÀnför sig till den. Och anslutningen skapades.

Och om det Àr tur att förfrÄgan har ett transaktions-id, dÄ Àr det enkelt. Men oftast ingen tur. DÀrför var det nödvÀndigt att hitta den senaste transaktionen eller transaktionen med det senaste klicket osv.

Och det hela fungerade vÀldigt bra sÄ lÀnge bindningen var till sista klicket. För det finns, sÀg, 10 miljoner klick per dag, 300 miljoner per mÄnad, om vi sÀtter ett fönster pÄ en mÄnad. Och eftersom det i Cassandra mÄste finnas allt i minnet för att köra snabbt, eftersom Runtime mÄste svara snabbt, tog det cirka 10-15 servrar.

Och nÀr de ville koppla en transaktion till displayen visade det sig genast inte sÄ roligt. Och varför? Det kan ses att 30 gÄnger fler hÀndelser behöver lagras. Och följaktligen behöver du 30 gÄnger fler servrar. Och det visar sig att detta Àr nÄgon slags astronomisk figur. För att behÄlla upp till 500 servrar för att kunna göra lÀnkningen, trots att det finns betydligt fÀrre servrar i Runtime, sÄ Àr detta nÄgot slags fel siffra. Och de började fundera pÄ vad de skulle göra.

Teori och praktik för att anvÀnda ClickHouse i verkliga applikationer. Alexander Zaitsev (2018)

Och vi gick till ClickHouse. Och hur gör man det pÄ ClickHouse? Vid första anblicken verkar det som att detta Àr en uppsÀttning antimönster.

  • Transaktionen vĂ€xer, vi kopplar upp fler och fler hĂ€ndelser till den, d.v.s. den Ă€r förĂ€nderlig, och ClickHouse fungerar inte sĂ€rskilt bra med förĂ€nderliga objekt.
  • NĂ€r en besökare kommer till oss mĂ„ste vi hĂ€mta ut hans transaktioner med nyckel, efter hans besöks-ID. Detta Ă€r ocksĂ„ en punktfrĂ„ga, det gör de inte i ClickHouse. Vanligtvis har ClickHouse stora ... skanningar, men hĂ€r mĂ„ste vi fĂ„ nĂ„gra poster. OcksĂ„ ett antimönster.
  • Dessutom var transaktionen i json, men de ville inte skriva om den, sĂ„ de ville lagra json pĂ„ ett ostrukturerat sĂ€tt och vid behov dra ut nĂ„got ur det. Och detta Ă€r ocksĂ„ ett antimönster.

Det vill sÀga en uppsÀttning antimönster.

Teori och praktik för att anvÀnda ClickHouse i verkliga applikationer. Alexander Zaitsev (2018)

Men det visade sig ÀndÄ göra ett system som fungerade mycket bra.

Vad gjordes? ClickHouse dök upp, i vilket loggar kastades, uppdelat i poster. En tillskriven tjÀnst dök upp som fick loggar frÄn ClickHouse. Efter det, för varje post, genom besöks-id, fick jag transaktioner som kanske inte har behandlats Ànnu och plus ögonblicksbilder, dvs transaktioner som redan Àr anslutna, nÀmligen resultatet av tidigare arbete. Jag har redan gjort logik ur dem, valt rÀtt transaktion, kopplat nya hÀndelser. Loggade igen. Loggen gick tillbaka till ClickHouse, dvs det Àr ett stÀndigt cykliskt system. Och dessutom gick jag till DWH för att analysera det dÀr.

Det var i den hÀr formen det inte fungerade sÀrskilt bra. Och för att göra det enklare för ClickHouse, nÀr det fanns en begÀran per besöks-id, grupperade de dessa förfrÄgningar i block med 1 000-2 000 besöks-ID och drog ut alla transaktioner för 1 000-2 000 personer. Och sedan fungerade allt.

Teori och praktik för att anvÀnda ClickHouse i verkliga applikationer. Alexander Zaitsev (2018)

Om du tittar inuti ClickHouse, sÄ finns det bara 3 huvudbord som serverar allt detta.

Den första tabellen som loggar laddas upp till, och loggarna laddas upp nÀstan utan bearbetning.

Andra bordet. Genom den materialiserade synen bitades hÀndelser som Ànnu inte har tillskrivits, det vill sÀga orelaterade sÄdana, ur dessa loggar. Och genom den materialiserade vyn drogs transaktioner ut ur dessa loggar för att skapa en ögonblicksbild. Det vill sÀga, en speciell materialiserad vy byggde en ögonblicksbild, nÀmligen det sista ackumulerade tillstÄndet för transaktionen.

Teori och praktik för att anvÀnda ClickHouse i verkliga applikationer. Alexander Zaitsev (2018)

HÀr Àr texten skriven i SQL. Jag skulle vilja kommentera nÄgra viktiga saker i den.

Det första viktiga Àr möjligheten att dra ut kolumner och fÀlt frÄn json i ClickHouse. Det vill sÀga, ClickHouse har nÄgra metoder för att arbeta med json. De Àr vÀldigt, vÀldigt primitiva.

visitParamExtractInt lÄter dig extrahera attribut frÄn json, dvs den första trÀffen fungerar. Och pÄ sÄ sÀtt kan du dra ut transaktions-ID eller besöks-ID. Den hÀr gÄngen.

För det andra anvÀnds hÀr ett knepigt materialiserat fÀlt. Vad betyder det? Det betyder att du inte kan infoga den i tabellen, d.v.s. den infogas inte, den berÀknas och lagras vid insÀttning. NÀr du klistrar in gör ClickHouse jobbet Ät dig. Och det du behöver senare Àr redan borttaget frÄn json.

I det hÀr fallet Àr materialiserad vy för rÄrader. Och det första bordet med praktiskt taget rÄa stockar anvÀnds precis. Och vad gör han? För det första Àndrar det sorteringen, det vill sÀga sorteringen gÄr nu efter besöks-id, eftersom vi snabbt mÄste dra ut hans transaktion för en specifik person.

Den andra viktiga saken Àr index_granularity. Om du har sett MergeTree Àr det vanligtvis 8 som standard index_granularity. Vad det Àr? Detta Àr indexgleshetsparametern. I ClickHouse Àr indexet sparsamt, det indexerar aldrig varje post. Den gör detta var 192 8. Och det hÀr Àr bra nÀr det krÀvs mycket data för att berÀknas, men dÄligt nÀr det Àr lite, eftersom det finns en stor overhead. Och om vi minskar indexgranulariteten, minskar vi omkostnaderna. Det kan inte reduceras till ett, eftersom det kanske inte finns tillrÀckligt med minne. Indexet lagras alltid i minnet.

Teori och praktik för att anvÀnda ClickHouse i verkliga applikationer. Alexander Zaitsev (2018)

Snapshot anvÀnder ocksÄ nÄgra andra intressanta ClickHouse-funktioner.

För det första Àr det AggregatingMergeTree. Och AggregatingMergeTree lagrar argMax, det vill sÀga detta Àr tillstÄndet för transaktionen som motsvarar den senaste tidsstÀmpeln. Transaktioner genereras hela tiden för en given besökare. Och i det allra sista tillstÄndet av denna transaktion lade vi till en hÀndelse och vi har ett nytt tillstÄnd. Det slog ClickHouse igen. Och genom argMax i denna materialiserade vy kan vi alltid fÄ det aktuella tillstÄndet.

Teori och praktik för att anvÀnda ClickHouse i verkliga applikationer. Alexander Zaitsev (2018)

  • Bindningen Ă€r "frikopplad" frĂ„n Runtime.
  • Upp till 3 miljarder transaktioner per mĂ„nad lagras och bearbetas. Detta Ă€r en storleksordning mer Ă€n det var i Cassandra, det vill sĂ€ga i ett typiskt transaktionssystem.
  • Kluster av 2x5 ClickHouse-servrar. 5 servrar och varje server har en replik. Detta Ă€r Ă€nnu mindre Ă€n det var i Cassandra för att göra klickbaserad attribution, och hĂ€r har vi visningsbaserad. Det vill sĂ€ga, istĂ€llet för att öka antalet servrar med 30 gĂ„nger, lyckades de minska dem.

Teori och praktik för att anvÀnda ClickHouse i verkliga applikationer. Alexander Zaitsev (2018)

Och det sista exemplet Àr finansföretaget Y, som analyserade korrelationerna mellan förÀndringar i aktiekurser.

Och uppgiften var:

  • Det finns cirka 5 000 aktier.
  • Citat var 100:e millisekund Ă€r kĂ€nda.
  • Uppgifterna har ackumulerats under 10 Ă„r. Tydligen, för vissa företag mer, för vissa mindre.
  • Det finns cirka 100 miljarder rader totalt.

Och det var nödvÀndigt att berÀkna korrelationen av förÀndringar.

Teori och praktik för att anvÀnda ClickHouse i verkliga applikationer. Alexander Zaitsev (2018)

HÀr Àr tvÄ aktier och deras kurser. Om den ena gÄr upp och den andra gÄr upp sÄ Àr detta en positiv korrelation, dvs en gÄr upp och den andra gÄr upp. Om den ena gÄr upp, som i slutet av grafen, och den andra gÄr ner, Àr detta en negativ korrelation, dvs nÀr den ena stiger, faller den andra.

Genom att analysera dessa ömsesidiga förÀndringar kan man göra förutsÀgelser pÄ finansmarknaden.

Teori och praktik för att anvÀnda ClickHouse i verkliga applikationer. Alexander Zaitsev (2018)

Men uppgiften Àr svÄr. Vad görs för detta? Vi har 100 miljarder poster som har: tid, lager och pris. Vi mÄste berÀkna första 100 miljarder gÄnger löpskillnaden frÄn prisalgoritmen. RunningDifference Àr en funktion i ClickHouse som sekventiellt berÀknar skillnaden mellan tvÄ strÀngar.

Och efter det mÄste du berÀkna korrelationen, och korrelationen mÄste berÀknas för varje par. För 5 000 aktier Àr paren 12,5 miljoner. Och detta Àr mycket, det vill sÀga 12,5 gÄnger Àr det nödvÀndigt att berÀkna just en sÄdan korrelationsfunktion.

Och om nĂ„gon glömt, dĂ„ Ă€r ͞x och ͞y en schackmatt. provtagningsförvĂ€ntningar. Det vill sĂ€ga, det Ă€r nödvĂ€ndigt att inte bara berĂ€kna rötterna och summorna, utan ocksĂ„ ytterligare en summa inuti dessa summor. En massa berĂ€kningar mĂ„ste göras 12,5 miljoner gĂ„nger, och till och med grupperas efter timmar. Vi har ocksĂ„ mĂ„nga timmar. Och du mĂ„ste göra det pĂ„ 60 sekunder. Det Ă€r ett skĂ€mt.

Teori och praktik för att anvÀnda ClickHouse i verkliga applikationer. Alexander Zaitsev (2018)

Det var nödvÀndigt att ha tid Ätminstone pÄ nÄgot sÀtt, för allt detta fungerade vÀldigt, vÀldigt lÄngsamt innan ClickHouse kom.

Teori och praktik för att anvÀnda ClickHouse i verkliga applikationer. Alexander Zaitsev (2018)

De försökte berÀkna det pÄ Hadoop, pÄ Spark, pÄ Greenplum. Och allt detta var vÀldigt lÄngsamt eller dyrt. Dvs det gick att rÀkna pÄ nÄgot sÀtt, men dÄ var det dyrt.

Teori och praktik för att anvÀnda ClickHouse i verkliga applikationer. Alexander Zaitsev (2018)

Och sedan kom ClickHouse och det blev mycket bÀttre.

Jag pÄminner dig om att vi har ett problem med datalokalitet, eftersom korrelationer inte kan lokaliseras. Vi kan inte lÀgga en del av datan pÄ en server, en del pÄ en annan och berÀkna, vi mÄste ha all data överallt.

Vad gjorde de? Inledningsvis Àr data lokaliserad. Varje server lagrar data om prissÀttningen för en viss uppsÀttning aktier. Och de överlappar inte varandra. DÀrför Àr det möjligt att berÀkna logReturn parallellt och oberoende, allt detta sker hittills parallellt och distribuerat.

Sedan bestÀmde vi oss för att minska dessa data, utan att tappa uttrycksförmÄgan. Minska genom att anvÀnda arrayer, d.v.s. skapa en array av aktier och en array av priser för varje tidsperiod. DÀrför tar det mycket mindre datautrymme. Och de Àr lite lÀttare att arbeta med. Detta Àr nÀstan parallella operationer, det vill sÀga vi lÀser delvis parallellt och skriver sedan till servern.

Efter det kan det replikeras. Bokstaven "r" betyder att vi replikerade denna data. Det vill sÀga, vi har samma data pÄ alla tre servrarna - det hÀr Àr arrayerna.

Och sedan med ett speciellt skript frÄn denna uppsÀttning av 12,5 miljoner korrelationer som mÄste berÀknas, kan du göra paket. Det vill sÀga 2 500 uppgifter med 5 000 par av korrelationer. Och denna uppgift ska berÀknas pÄ en specifik ClickHouse-server. Han har alla data, eftersom uppgifterna Àr desamma och han kan berÀkna dem sekventiellt.

Teori och praktik för att anvÀnda ClickHouse i verkliga applikationer. Alexander Zaitsev (2018)

Återigen Ă€r det sĂ„ hĂ€r det ser ut. För det första har vi all data i denna struktur: tid, aktier, pris. Sedan berĂ€knade vi logReturn, det vill sĂ€ga data av samma struktur, men istĂ€llet för priset har vi redan logReturn. Sedan gjordes de om, det vill sĂ€ga vi fick tid och groupArray för lager och priser. Replikerad. Och efter det genererade vi ett gĂ€ng uppgifter och matade dem till ClickHouse sĂ„ att det skulle rĂ€kna dem. Och det fungerar.

Teori och praktik för att anvÀnda ClickHouse i verkliga applikationer. Alexander Zaitsev (2018)

PÄ proof of concept var uppgiften en deluppgift, det vill sÀga mindre data togs. Och bara tre servrar.

Dessa tvÄ första steg: berÀkning av Log_return och inpackning i arrayer tog ungefÀr en timme.

Och berÀkningen av korrelationen Àr cirka 50 timmar. Men 50 timmar rÀcker inte, för de brukade jobba i veckor. Det blev en stor succé. Och om du rÀknar, dÄ rÀknades allt 70 gÄnger per sekund pÄ detta kluster.

Men det viktigaste Àr att det hÀr systemet Àr praktiskt taget utan flaskhalsar, det vill sÀga det skalar nÀstan linjÀrt. Och de kollade upp det. Har framgÄngsrikt skalat upp det.

Teori och praktik för att anvÀnda ClickHouse i verkliga applikationer. Alexander Zaitsev (2018)

  • RĂ€tt schema Ă€r halva framgĂ„ngen. Och det rĂ€tta schemat Ă€r anvĂ€ndningen av alla nödvĂ€ndiga ClickHouse-teknologier.
  • Summering/AggregatingMergeTrees Ă€r tekniker som lĂ„ter dig sammanstĂ€lla eller betrakta en tillstĂ„ndsbild som ett specialfall. Och det förenklar mycket.
  • Materialiserade vyer lĂ„ter dig kringgĂ„ grĂ€nsen för ett index. Jag kanske inte sa det sĂ„ tydligt, men nĂ€r vi laddade loggarna fanns rĂ„loggarna i tabellen med ett index, och attributloggarna fanns i tabellen, dvs samma data, bara filtrerade, men indexet var helt andra. Det verkar vara samma data, men olika sortering. Och materialiserade vyer lĂ„ter dig, om du behöver det, kringgĂ„ en sĂ„dan ClickHouse-begrĂ€nsning.
  • Minska indexgranulariteten för punktfrĂ„gor.
  • Och distribuera data smart, försök att lokalisera data inom servern sĂ„ mycket som möjligt. Och försök att se till att förfrĂ„gningar ocksĂ„ anvĂ€nder lokalisering dĂ€r det Ă€r möjligt sĂ„ mycket som möjligt.

Teori och praktik för att anvÀnda ClickHouse i verkliga applikationer. Alexander Zaitsev (2018)

Och för att sammanfatta detta korta anförande kan vi sÀga att ClickHouse nu bestÀmt har ockuperat territoriet för bÄde kommersiella databaser och databaser med öppen kÀllkod, det vill sÀga specifikt för analys. Han passar perfekt in i detta landskap. Och dessutom börjar det sakta trÀnga ut andra, för nÀr du har ClickHouse behöver du inte InfiniDB. Vertika kanske inte behövs snart om de har normalt SQL-stöd. Njut av!

Teori och praktik för att anvÀnda ClickHouse i verkliga applikationer. Alexander Zaitsev (2018)

-Tack för rapporten! Mycket intressant! Fanns det nÄgra jÀmförelser med Apache Phoenix?

Nej, jag har inte hört nÄgon jÀmföra. Vi och Yandex försöker hÄlla reda pÄ alla ClickHouse-jÀmförelser med olika databaser. För om nÄgot plötsligt visar sig vara snabbare Àn ClickHouse, kan Lesha Milovidov inte sova pÄ natten och börjar snabbt pÄskynda det. Jag har inte hört talas om en sÄdan jÀmförelse.

  • (Aleksey Milovidov) Apache Phoenix Ă€r en SQL-motor som drivs av Hbase. Hbase Ă€r frĂ€mst för nyckel-vĂ€rde arbetsscenario. DĂ€r, pĂ„ varje rad, kan det finnas ett godtyckligt antal kolumner med godtyckliga namn. Detta kan sĂ€gas om sĂ„dana system som Hbase, Cassandra. Och det Ă€r just tunga analytiska frĂ„gor som inte fungerar normalt för dem. Eller sĂ„ kanske du tycker att de fungerar bra om du inte har nĂ„gon erfarenhet av ClickHouse.

  • Tack

    • God eftermiddag Jag Ă€r redan ganska intresserad av detta Ă€mne, eftersom jag har ett analytiskt delsystem. Men nĂ€r jag tittar pĂ„ ClickHouse fĂ„r jag en kĂ€nsla av att ClickHouse lĂ€mpar sig vĂ€ldigt bra för hĂ€ndelseanalys, förĂ€nderligt. Och om jag behöver analysera mycket affĂ€rsdata med ett gĂ€ng stora tabeller, sĂ„ Ă€r ClickHouse, sĂ„ vitt jag förstĂ„r, inte sĂ€rskilt lĂ€mplig för mig? Speciellt om de Ă€ndras. StĂ€mmer detta eller finns det exempel som kan motbevisa detta?

    • Detta Ă€r rĂ€tt. Och detta gĂ€ller de flesta specialiserade analytiska databaser. De Ă€r skrĂ€ddarsydda för att det finns ett eller flera stora bord som Ă€r förĂ€nderliga, och för mĂ„nga smĂ„ som förĂ€ndras lĂ„ngsamt. Det vill sĂ€ga, ClickHouse Ă€r inte som Oracle, dĂ€r du kan lĂ€gga allt och bygga nĂ„gra mycket komplexa frĂ„gor. För att kunna anvĂ€nda ClickHouse effektivt mĂ„ste du bygga ett schema pĂ„ ett sĂ€tt som fungerar bra i ClickHouse. Det vill sĂ€ga undvik överdriven normalisering, anvĂ€nd ordböcker, försök att göra fĂ€rre lĂ„nga lĂ€nkar. Och om schemat Ă€r uppbyggt pĂ„ detta sĂ€tt kan liknande affĂ€rsuppgifter lösas pĂ„ ClickHouse mycket mer effektivt Ă€n pĂ„ en traditionell relationsdatabas.

Tack för rapporten! Jag har en frÄga om det senaste ekonomiska fallet. De hade analyser. Det var nödvÀndigt att jÀmföra hur de gÄr upp och ner. Och jag förstÄr att du byggde systemet specifikt för denna analys? Om de till exempel i morgon behöver nÄgon annan rapport om denna data, behöver de bygga om systemet och ladda upp data? Det vill sÀga att göra nÄgon form av förbearbetning för att fÄ begÀran?

Naturligtvis Àr detta anvÀndningen av ClickHouse för en mycket specifik uppgift. Det skulle mer traditionellt kunna lösas inom Hadoop. För Hadoop Àr detta en idealisk uppgift. Men pÄ Hadoop gÄr det vÀldigt lÄngsamt. Och mitt mÄl Àr att visa att ClickHouse kan lösa uppgifter som vanligtvis löses pÄ helt andra sÀtt, men samtidigt göra det mycket mer effektivt. Detta Àr skrÀddarsytt för en specifik uppgift. Det Àr klart att om det finns ett problem med nÄgot liknande sÄ kan det lösas pÄ liknande sÀtt.

Kusten Ă€r klar. Du sa att 50 timmar behandlades. Är det frĂ„n första början, nĂ€r laddade du in data eller fick resultaten?

Jaja.

OK tack sÄ mycket.

Detta Àr pÄ ett 3-serverkluster.

HÀlsningar! Tack för rapporten! Allt Àr vÀldigt intressant. Jag kommer inte frÄga lite om funktionaliteten utan om anvÀndandet av ClickHouse nÀr det gÀller stabilitet. Det vill sÀga, hade du nÄgra, var du tvungen att ÄterstÀlla? Hur beter sig ClickHouse i det hÀr fallet? Och hÀnde det att du hade en kopia ocksÄ? Till exempel stötte vi pÄ ett problem med ClickHouse nÀr det ÀndÄ kommer över sin grÀns och faller.

Naturligtvis finns det inga idealiska system. Och ClickHouse har ocksÄ sina egna problem. Men har du hört talas om att Yandex.Metrica inte har fungerat pÄ lÀnge? Antagligen inte. Det har fungerat tillförlitligt sedan 2012-2013 pÄ ClickHouse. Jag kan sÀga detsamma om min erfarenhet. Vi har aldrig haft fullstÀndiga misslyckanden. Vissa delar kunde hÀnda, men de var aldrig tillrÀckligt kritiska för att allvarligt pÄverka verksamheten. Det hÀnde aldrig. ClickHouse Àr ganska pÄlitlig och kraschar inte slumpmÀssigt. Du behöver inte oroa dig för det. Det Àr inte en rÄ sak. Detta har mÄnga företag bevisat.

HallÄ! Du sa att du mÄste tÀnka över dataschemat direkt. TÀnk om det hÀnde? Min data öser och öser. Sex mÄnader gÄr, och jag förstÄr att det Àr omöjligt att leva sÄ hÀr, jag mÄste ladda upp data igen och göra nÄgot med dem.

Detta beror naturligtvis pÄ ditt system. Det finns flera sÀtt att göra detta nÀstan utan stopp. Du kan till exempel skapa en materialiserad vy dÀr du kan skapa en annan datastruktur om den kan mappas unikt. Det vill sÀga, om det tillÄter kartlÀggning med ClickHouse, det vill sÀga extrahera vissa saker, Àndra primÀrnyckeln, Àndra partitionering, sÄ kan du göra en materialiserad vy. Skriv över dina gamla data dÀr, nya kommer att skrivas automatiskt. Och sedan Àr det bara att byta till att anvÀnda den materialiserade vyn, sedan byta posten och döda den gamla tabellen. Detta Àr i allmÀnhet en non-stop metod.

Tack.

KĂ€lla: will.com

LĂ€gg en kommentar