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

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

Trots att det idag finns mycket data nÀstan överallt, Àr analytiska databaser fortfarande ganska exotiska. De Àr dÄligt kÀnda och Ànnu sÀmre anvÀnds effektivt. MÄnga fortsÀtter att "Àta kaktus" med MySQL eller PostgreSQL, som Àr designade för andra scenarier, eller sliter med NoSQL, eller betalar för mycket för kommersiella lösningar. ClickHouse Àndrar spelreglerna och sÀnker avsevÀrt tröskeln för att komma in i vÀrlden av analytiska DBMS.

Rapporten frÄn BackEnd Conf 2018 och den publiceras med talarens tillstÄnd.


Spela video

Teori och praktik av att anvÀnda ClickHouse i verkliga applikationer. Alexander Zaitsev (2018)
Vem Àr jag och varför berÀttar jag om ClickHouse? Jag Àr utvecklingschef pÄ LifeStreet, som anvÀnder ClickHouse. Dessutom Àr jag grundare av Altinity. Detta Àr en partner till Yandex, som frÀmjar ClickHouse och hjÀlper Yandex att göra ClickHouse mer framgÄngsrikt. Jag Àr ocksÄ villig att dela med mig av kunskapen om ClickHouse.

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

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

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

«Alla vet», att ClickHouse:

  • Är mycket snabb,
  • Är mycket anvĂ€ndarvĂ€nlig,
  • AnvĂ€nds i Yandex.

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

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

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

Jag kommer att berÀtta hur specifika uppgifter löses med ClickHouse i olika företag, vilka verktyg ClickHouse ni kan anvÀnda för era uppgifter, och hur de har anvÀnts i olika företag.

Jag har valt tre exempel som visar ClickHouse frÄn olika sidor. Jag tror att det kommer att vara intressant.

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

Första frÄgan: «Varför behövs ClickHouse?». FrÄgan verkar ganska uppenbar, men det finns fler Àn ett svar.

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

  • Det första svaret handlar om prestanda. ClickHouse Ă€r mycket snabb. Analys pĂ„ ClickHouse Ă€r ocksĂ„ mycket snabb. Det kan ofta anvĂ€ndas dĂ€r nĂ„got annat fungerar mycket lĂ„ngsamt eller mycket dĂ„ligt.
  • Det andra svaret handlar om kostnad. Och framför allt kostnaden för skalning. Till exempel Ă€r Vertica en helt utmĂ€rkt databas. Den fungerar mycket bra om ni har en ganska liten mĂ€ngd terabyte data. Men nĂ€r det handlar om hundratals terabyte eller petabyte, blir kostnaden för licens och support en ganska betydande summa. Och det Ă€r dyrt. Men ClickHouse Ă€r gratis.
  • Det tredje svaret Ă€r driftskostnaden. Det hĂ€r angreppssĂ€ttet kommer lite frĂ„n en annan sida. RedShift Ă€r ett utmĂ€rkt alternativ. Med RedShift kan man snabbt skapa en lösning. Det kommer att fungera bra, men varje timme, varje dag och varje mĂ„nad kommer du att betala ganska mycket till Amazon, eftersom det Ă€r en mycket dyr tjĂ€nst. Google BigQuery Ă€r detsamma. Om nĂ„gon har anvĂ€nt det vet man att man kan köra flera förfrĂ„gningar och plötsligt fĂ„ en rĂ€kning pĂ„ hundratals dollar.

I ClickHouse finns dessa problem inte.

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

Var anvÀnds ClickHouse nu? Förutom Yandex anvÀnds ClickHouse i en mÀngd olika företag och verksamheter.

  • Framför allt anvĂ€nds det för analys av webbapplikationer, det vill sĂ€ga det Ă€r ett anvĂ€ndningsfall som kommer frĂ„n Yandex.
  • MĂ„nga AdTech-företag anvĂ€nder ClickHouse.
  • MĂ„nga företag som behöver analysera driftsloggar frĂ„n olika kĂ€llor.
  • Flera företag anvĂ€nder ClickHouse för övervakning av 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 för finansiell analys, det vill sĂ€ga gradvis nĂ€rmar sig stora företag ocksĂ„ ClickHouse.
  • CloudFlare. Om nĂ„gon följer ClickHouse har man sĂ€kert hört namnet pĂ„ detta företag. Det Ă€r en av de betydande bidragsgivarna i communityn. Och de har en mycket seriös ClickHouse-installation. Till exempel har de skapat Kafka Engine för ClickHouse.
  • Telekomföretag har börjat anvĂ€nda det. Flera företag anvĂ€nder ClickHouse antingen som proof of concept eller redan i produktion.
  • Ett företag anvĂ€nder ClickHouse för att övervaka produktionsprocesser. De testar chips, registrerar massor av parametrar, det handlar om cirka 2 000 egenskaper. Och de analyserar vidare – bra partier eller dĂ„liga.
  • Blockkedjeanalys. Det finns ett sĂ„dant ryskt företag som Bloxy.info. Det handlar om analys av ethereum-nĂ€tverket. Det gjorde de ocksĂ„ med ClickHouse.

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

Och storleken spelar ingen roll. MÄnga företag anvÀnder en enda liten server. Och den gör det möjligt för dem att lösa sina problem. Och Ànnu fler företag anvÀnder stora kluster av mÄnga servrar eller tiotals servrar.

Och om man ser pÄ registreringarna, sÄ:

  • Yandex: 500+ servrar, de sparar 25 miljarder poster per dag dĂ€r.
  • LifeStreet: 60 servrar, cirka 75 miljarder poster per dag. FĂ€rre servrar, fler poster Ă€n hos Yandex.
  • CloudFlare: 36 servrar, de sparar 200 miljarder poster per dag. De har Ă€nnu fĂ€rre servrar och Ă€nnu mer data som de sparar.
  • Bloomberg: 102 servern, cirka en biljon poster per dag. RekordhĂ„llare för poster.

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

Geografiskt sett Àr det ocksÄ mycket. Denna karta visar heatmap dÀr ClickHouse anvÀnds i vÀrlden. HÀr framhÀvs Ryssland, Kina, Amerika tydligt. Det finns fÄ europeiska lÀnder. Man kan sÀrskilja 4 kluster.

Detta Àr en jÀmförande analys, hÀr behöver man inte leta efter absoluta siffror. Detta Àr en analys av besökare som lÀser engelsksprÄkigt material pÄ Altinitys webbplats, eftersom det inte finns nÄgot rysksprÄkigt dÀr. Ryssland, Ukraina, Vitryssland, dvs. den rysktalande delen av samhÀllet, Àr de mest talrika anvÀndarna. DÀrefter följer USA och Kanada. Kina Àr snabbt pÄ vÀg ikapp. För sex mÄnader sedan fanns det nÀstan inget Kina, nu har Kina redan övertrÀffat Europa och fortsÀtter vÀxa. Gamla Europa hÀnger inte heller efter, och ledaren för anvÀndning av ClickHouse Àr, mÀrkligt nog, Frankrike.

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

Varför berÀttar jag allt detta? För att visa att ClickHouse blir en standardlösning för analys av stora data och anvÀnds redan pÄ mÄnga stÀllen. Om du anvÀnder det, Àr du pÄ rÀtt trend. Om du Ànnu inte anvÀnder det, behöver du inte vara rÀdd för att du kommer att bli ensam och ingen kommer att hjÀlpa dig, för mÄnga sysslar redan med detta.

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

Detta Àr exempel pÄ verklig anvÀndning av ClickHouse i flera företag.

  • Det första exemplet Ă€r ett annonsnĂ€tverk: migration frĂ„n Vertica till ClickHouse. Och jag kĂ€nner flera företag som har övergĂ„tt frĂ„n Vertica eller Ă€r i processen att göra det.
  • Det andra exemplet Ă€r ett transaktionellt datalager pĂ„ ClickHouse. Detta exempel bygger pĂ„ antipatterns. Allt som inte bör göras i ClickHouse enligt utvecklarnas rĂ„d har hĂ€r genomförts. Och det görs sĂ„ effektivt att det fungerar. Och det fungerar mycket bĂ€ttre Ă€n en typisk transaktionell lösning.
  • Det tredje exemplet Ă€r distribuerade berĂ€kningar 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 som liknar en map-reduce container pĂ„ ClickHouse, med fokus pĂ„ lokalisering av data, osv., för att berĂ€kna en mycket icke-trivial uppgift.

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

  • LifeStreet – Det Ă€r ett Ad Tech-företag som har allt teknologin som hör samman med ett annonsnĂ€tverk.
  • Det sysslar med optimering av annonser, programmatisk budgivning.
  • MĂ€ngder av data: omkring 10 miljarder hĂ€ndelser per dag. HĂ€ndelserna kan dessutom delas upp i flera delhĂ€ndelser.
  • MĂ„nga kunder av dessa data, och det Ă€r inte bara mĂ€nniskor, utan mycket mer – det handlar om olika algoritmer som hanterar programmatisk budgivning.

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

Företaget har genomgÄtt en lÄng och svÄr vÀg. Jag har berÀttat om det pÄ HighLoad. Först flyttade LifeStreet frÄn MySQL (med ett kort stopp pÄ Oracle) till Vertica. Det gÄr att hitta berÀttelsen om detta.

Allt gick vÀldigt bra, men det blev snabbt tydligt att datamÀngderna vÀxte och Vertica blev dyrt. DÀrför letades efter olika alternativ. NÄgra av dem listas hÀr. Faktum Àr att vi gjorde proof of concept eller ibland prestandatestning av nÀstan alla databaser som var tillgÀngliga pÄ marknaden mellan 2013 och 2016 och som ungefÀr passade vÄra krav pÄ funktionalitet. Jag berÀttade ocksÄ om nÄgra av dem pÄ HighLoad.

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

Uppgiften var att migrera frÄn Vertica i första hand, eftersom datamÀngderna vÀxte. Och de vÀxte exponentiellt under flera Är. Sedan nÄdde de en platÄ, men ÀndÄ. NÀr vi prognostiserade denna tillvÀxt var det uppenbart att affÀrens krav pÄ datamÀngder som behövde analyseras snart skulle handla om petabyte. Och att betala för petabyte Àr redan mycket dyrt, sÄ vi letade efter alternativ för vart man skulle gÄ.

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

Vart skulle man gÄ? Under lÄng tid var det helt oklart vart man skulle ta vÀgen, eftersom det Ä ena sidan finns kommersiella databaser som fungerar ganska bra. Vissa fungerar nÀstan lika bra som Vertica, andra lite sÀmre. Men de Àr alla dyra, och ingenting billigare eller bÀttre har kunnat hittas.

Å andra sidan finns det open source-lösningar, som inte Ă€r sĂ„ mĂ„nga, med andra ord kan de rĂ€knas pĂ„ hĂ€nderna nĂ€r det gĂ€ller analys. De Ă€r gratis eller billiga, men fungerar lĂ„ngsamt. Oftast saknar de nödvĂ€ndig och anvĂ€ndbar funktionalitet.

Det fanns ingenting som kombinerade det bra som finns i kommersiella databaser och allt det gratis som finns i open source — ingenting fanns.

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

Ingenting fanns förrÀn plötsligt Yandex, som en trollkarl med en kanin ur hatten, presenterade ClickHouse. Det var en ovÀntad lösning; fortfarande idag stÀlls frÄgan: "Varför?", men ÀndÄ.

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

Och redan 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 med olika frÄgor. Och om frÄgan anvÀnde bara en tabell, dvs. utan nÄgra joins, var ClickHouse tvÄ gÄnger snabbare Àn Vertica.

Jag tog mig friheten att titta pÄ mer tester frÄn Yandex hÀrom dagen. DÀr Àr det samma sak: ClickHouse Àr tvÄ gÄnger snabbare Àn Vertica, dÀrför pratar de ofta om det.

Men om frÄgorna innehÄller joins, sÄ blir det inte sÄ entydigt. Och ClickHouse kan vara lÄngsammare Àn Vertica med tvÄ gÄnger. Men om man gör smÄ justeringar av frÄgan och skriver om den, sÄ blir det ungefÀr lika. Inte dÄligt. Och gratis.

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

SÄ nÀr vi fick testresultaten och sÄg pÄ detta frÄn olika vinklar, Äkte LifeStreet över till ClickHouse.

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

Detta Àr 2016, pÄminner jag er. Det var som i en anekdot om möss som grÀt och stack sig, men fortsatte Àta kaktus. Det har beskrivits utförligt, det finns video om det osv.

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

Jag kommer dÀrför inte att gÄ in detaljerat pÄ detta, jag kommer bara att berÀtta om resultaten och nÄgra intressanta saker som jag inte berÀttade dÄ.

Resultaten Àr:

  • Lyckad migrering och systemet har redan varit i produktion i mer Ă€n ett Ă„r.
  • Prestanda och flexibilitet har ökat. FrĂ„n 10 miljarder poster som vi kunde lagra pĂ„ en dag, och det under en kort tid, lagrar LifeStreet nu 75 miljarder poster per dag och kan göra det i tre mĂ„nader eller mer. Om man rĂ€knar pĂ„ max, kan det sparas upp till en miljon hĂ€ndelser per sekund. Mer Ă€n en miljon SQL-frĂ„gor per dag kommer in i detta system, huvudsakligen frĂ„n olika robotar.
  • Trots att fler servrar anvĂ€nds för ClickHouse Ă€n för Vertica, har vi sparat pengar pĂ„ hĂ„rdvara eftersom Vertica anvĂ€nde ganska dyra SAS-diskar. I ClickHouse anvĂ€ndes SATA. Och varför? För att i Vertica Ă€r insert synkront. Och synkronisering krĂ€ver att diskarna inte bromsar upp för mycket, och att nĂ€tverket inte heller bromsar, dvs. det Ă€r en ganska kostsam operation. Men i ClickHouse Ă€r insert asynkront. Dessutom kan man alltid skriva allt lokalt, inga extra kostnader för detta, sĂ„ att data i ClickHouse kan infogas mycket snabbare Ă€n i Vertica Ă€ven pĂ„ inte de snabbaste diskarna. Och för lĂ€sning Ă€r det ungefĂ€r lika. LĂ€sningen pĂ„ SATA, om de sitter i RAID, Ă€r ganska snabb.
  • Ingen licensbegrĂ€nsningar, det vill sĂ€ga 3 petabyte data pĂ„ 60 servrar (20 servrar utgör en replik) och 6 triljoner poster i fakta och aggregat. Inget liknande kunde tillĂ„tas pĂ„ Vertica.

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

Nu gÄr jag över till praktiska aspekter i detta exempel.

  • Första Ă€r en effektiv schema. Schema pĂ„verkar mycket.
  • Andra Ă€r generering av effektiv SQL.

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

Typisk OLAP-frÄga Àr en select. Vissa kolumner gÄr i group by, andra kolumner gÄr i aggregatfunktioner. Det finns where, som kan betraktas som ett snitt av kuben. Hela group by kan ses som en projektion. DÀrför kallas detta multidimensionell dataanalys.

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

Och ofta modelleras detta som en stjÀrn-schema, dÀr det finns en central fakta och egenskaper för detta fakta pÄ sidorna, utefter strÄlar.

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

Och ur ett fysiskt designsynpunkt, hur detta lÀggs pÄ tabeller, sÄ görs vanligtvis en normaliserad representation. Du kan denormalisera, men det Àr kostsamt i disk och inte sÀrskilt effektivt för frÄgor. DÀrför görs vanligtvis en normaliserad representation, det vill sÀga en faktatabell och mÄnga mÄngdimensionella tabeller.

Men i ClickHouse fungerar detta dÄligt. Det finns tvÄ skÀl:

  • Första Ă€r att ClickHouse inte har sĂ€rskilt bra joins, det vill sĂ€ga joins finns, men de Ă€r dĂ„liga. Fortfarande dĂ„liga.
  • Andra Ă€r att tabellerna inte uppdateras. Vanligtvis i dessa tabeller som omger stjĂ€rn-schema, behöver man Ă€ndra nĂ„got. Till exempel, kundens namn, företagets namn och sĂ„ vidare. Och detta fungerar inte.

Och det finns en lösning för detta i ClickHouse. Faktiskt tvÄ:

  • Den första Ă€r att anvĂ€nda ordböcker. Externa ordböcker Ă€r det som hjĂ€lper till att lösa problemet med stjĂ€rn-schema till 99%, med uppdateringar och annat.
  • Den andra Ă€r att anvĂ€nda arrayer. Arrayer hjĂ€lper ocksĂ„ till att slippa joins och problem med normalisering.

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

  • Inga joins behövs.
  • Uppdateringsbara. FrĂ„n och med mars 2018 introducerades en icke-dokumenterad funktion (du hittar inte detta i dokumentationen) att delvis uppdatera ordböcker, det vill sĂ€ga de poster som har Ă€ndrats. Praktiskt sett fungerar det som en tabell.
  • Alltid i minnet, sĂ„ joins med ordböcker fungerar snabbare Ă€n om det vore en tabell som ligger pĂ„ disken och som kanske inte ens Ă€r i cache, sannolikt inte.

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

  • Inga joins behövs heller.
  • Detta Ă€r en kompakt representation 1 till mĂ„nga.
  • Och enligt min Ă„sikt, Ă€r arrayer skapade för nördar. Det handlar om lambda-funktioner och mer.

Det hÀr Àr inget tomt prat. Det Àr en mycket kraftfull funktionalitet som gör att man kan göra mÄnga saker pÄ ett mycket enkelt och elegant sÀtt.

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

Typiska exempel som hjÀlper till att hantera arrayer. Dessa exempel Àr enkla och ganska tydliga:

  • Sökning efter taggar. Om du har hashtags dĂ€r och vill hitta vissa poster med en hashtag.
  • Sökning efter key-value-par. Det finns ocksĂ„ vissa attribut med ett vĂ€rde.
  • Lagring av 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 i en strÀng och vÀljas med ett reguljÀrt uttryck eller i en separat tabell, men dÄ mÄste man göra joins.

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

I ClickHouse behöver man inte göra nÄgot alls, det rÀcker med att beskriva en array string för hashtags eller skapa en inbÀddad struktur för system som key-value.

InbĂ€ddad struktur – kanske inte det mest lyckade namnet. Det Ă€r tvĂ„ arrayer med en gemensam del i namnet och vissa relaterade egenskaper.

Och att söka efter taggen Àr mycket enkelt. Det finns en funktion has, som kontrollerar om det finns ett element i arrayen. Allt, vi har hittat alla poster som rör vÄr konferens.

Sökning efter subid Àr lite mer komplicerad. Först mÄste vi hitta indexet för nyckeln, och sedan ta elementet med det indexet och kontrollera att vÀrdet Àr det vi behöver. Men ÀndÄ mycket enkelt och kompakt.

Ett reguljÀrt uttryck som du skulle vilja skriva om du höll allting i en strÀng skulle för det första vara klumpigt. För det andra skulle det ta mycket lÀngre tid Àn tvÄ arrayer.

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

Ett annat exempel. Du har en array dÀr du lagrar ID. Och du kan översÀtta dem till namn. Funktionen arrayMap. Det Àr en typisk lambda-funktion. Du skickar lambda-uttryck till den. Och den hÀmtar namnvÀrdet för varje ID frÄn ordboken.

PÄ liknande sÀtt kan man göra en sökning. En predikatfunktion skickas, som kontrollerar vilken överenskommelse elementen har.

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

Dessa saker förenklar schemat kraftigt och löser mÄnga problem.

Men nÀsta problem som vi stötte pÄ och som jag vill nÀmna Àr effektiva förfrÄgningar.

  • I ClickHouse finns det ingen förfrĂ„gningsplanerare. Överhuvudtaget ingen.
  • Men Ă€ndĂ„ mĂ„ste man planera komplexa förfrĂ„gningar. I vilka fall?
  • Om det finns flera joinkommandon i en förfrĂ„gan som du kapslar in i delfrĂ„gor, Ă€r ordningen för hur de utförs viktig.
  • För det andra, om förfrĂ„gan Ă€r distribuerad. För i en distribuerad förfrĂ„gan utförs endast den innersta delfrĂ„gan distribuerat, medan allt annat skickas till en server som du Ă€r ansluten till och utförs dĂ€r. SĂ„ om du har distribuerade förfrĂ„gningar med mĂ„nga join, Ă€r det viktigt att vĂ€lja rĂ€tt ordning.

Och Àven i enklare fall kan det ibland vara bra att göra schemalÀggarens arbete och skriva om förfrÄgningen lite.

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

HÀr Àr ett exempel. PÄ vÀnster sida en förfrÄgan som visar de fem bÀsta lÀnderna. Den körs pÄ 2,5 sekunder, om jag minns rÀtt. PÄ höger sida samma förfrÄgan, men lite omskriven. IstÀllet för att gruppera pÄ strÀngar, grupperar vi pÄ nycklar (int). Och det gÄr snabbare. Sedan kopplade vi en ordbok till resultatet. IstÀllet för 2,5 sekunder körs förfrÄgan pÄ 1,5 sekunder. Det Àr bra.

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

Ett liknande exempel med omformulering av filter. HÀr Àr en förfrÄgan om Ryssland. Den körs pÄ 5 sekunder. Om vi skriver om den sÄ att vi jÀmför siffror med en uppsÀttning av de nycklar som hör till Ryssland, kommer det att bli mycket snabbare.

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

Det finns mÄnga sÄdana knep. Och de kan avsevÀrt snabba upp förfrÄgningar som du tror redan fungerar snabbt, eller tvÀrtom, som fungerar lÄngsamt. De kan göras Ànnu snabbare.

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

  • Maximalt med arbete i distribuerat lĂ€ge.
  • Sortering efter de minsta typerna, som jag gjorde med ints.
  • Om det finns nĂ„gra joins, ordböcker, Ă€r det bĂ€ttre att utföra dem i sista hand, nĂ€r du har data som Ă„tminstone delvis Ă€r grupperad, sĂ„ att joinoperationen eller anropet till ordboken kommer att krĂ€vas fĂ€rre gĂ„nger och dĂ€rmed gĂ„ snabbare.
  • ErsĂ€ttning av filter.

Det finns Àven andra tekniker, inte bara de jag demonstrerade. Och alla dessa kan ibland avsevÀrt snabba upp exekveringen av förfrÄgningar.

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

Vi gÄr vidare till nÀsta exempel. Företag X frÄn USA. Vad gör de?

Det fanns en uppgift:

  • Offline-lĂ€nkning av reklamtransaktioner.
  • Modellering av olika lĂ€nkningar.

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

Vad bestÄr scenariot av?

En vanlig besökare gÄr in pÄ webbplatsen, till exempel 20 gÄnger i mÄnaden, frÄn olika annonser eller bara ibland utan annonser, eftersom de kommer ihÄg sidan. De tittar pÄ olika produkter, lÀgger dem i kundvagnen och tar sedan bort dem. Och till slut köper de nÄgot.

Rimliga frÄgor: 'Vem ska betala för annonseringen, om det behövs?' och 'Vilken annons pÄverkade dem, om den gjorde det?'. Det vill sÀga, varför köpte de och hur gör man för att mÀnniskor som liknar denna person ocksÄ skall köpa?

För att lösa denna uppgift mÄste man koppla samman hÀndelser som intrÀffar pÄ webbplatsen pÄ rÀtt sÀtt, det vill sÀga bygga en relation mellan dem. Sedan mÄste de skickas för analys till DWH. Och pÄ grundval av denna analys bygga modeller för vem och vilken annons som ska visas.

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

En reklamtransaktion Àr en uppsÀttning relaterade hÀndelser för en anvÀndare som börjar med visning av en annons, sedan sker nÄgot, och eventuellt ett köp, och sedan kan det bli fler köp. Till exempel, om det handlar om en mobilapplikation eller ett mobilspel, sÄ brukar installationen av appen ske gratis, men om det görs nÄgot mer dÀr, kan det krÀva pengar. Ju mer en person spenderar i appen, desto mer vÀrdefull Àr de. Men för detta mÄste allt kopplas samman.

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

Det finns mÄnga modeller för att koppla samman.

De mest populÀra Àr:

  • Last Interaction, dĂ€r interaction Ă€r antingen ett klick eller en visning.
  • First Interaction, det vill sĂ€ga det första som ledde personen till webbplatsen.
  • LinjĂ€r kombination – alla fĂ„r lika.
  • Avtagande.
  • Och andra.

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

Och hur fungerade allt detta ursprungligen? Det fanns Runtime och Cassandra. Cassandra anvĂ€ndes som transaktionslagring, det vill sĂ€ga den lagrade alla relaterade transaktioner. NĂ€r en hĂ€ndelse kom till Runtime, till exempel visning av en sida eller nĂ„got annat, gjordes en förfrĂ„gan till Cassandra – finns denna person eller inte. Sedan hĂ€mtades transaktionerna som rör dem. Och kopplingen gjordes.

Och om man hade tur att förfrÄgan innehöll transaction id, var det lÀtt. Men vanligtvis har man inte tur. DÀrför behövde man leta efter den senaste transaktionen eller transaktionen med den senaste klicket och sÄ vidare.

Och allt fungerade vÀldigt bra sÄ lÀnge kopplingen var till den senaste klickningen. För det finns det, sÀg, 10 miljoner klick om dagen, 300 miljoner per mÄnad, om man sÀtter fönstret till en mÄnad. Och eftersom det hÀr mÄste finnas helt i minnet i Cassandra för att det ska fungera snabbt, eftersom det krÀvs en snabb Runtime-respons, behövdes ungefÀr 10-15 servrar.

Men nÀr man ville koppla transaktionen till visningen sÄ blev det genast inte lika roligt. Och varför? Det Àr tydligt att man behöver lagra 30 gÄnger fler hÀndelser. Och dÀrmed behövs 30 gÄnger fler servrar. SÄ det blir nÄgot astronomiskt siffror. Att ha upp till 500 servrar för att göra kopplingen, men att det faktiskt Àr betydligt fÀrre servrar under Runtime, det Àr nÄgon slags felaktig siffra. SÄ man började tÀnka pÄ vad man skulle göra.

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

Och man kom till ClickHouse. Men hur gör man det pÄ ClickHouse? Vid första anblick verkar det vara en uppsÀttning anti-mönster.

  • Transaktionen vĂ€xer, vi kopplar till den fler och fler hĂ€ndelser, dvs. den Ă€r muterbar, och ClickHouse fungerar inte sĂ€rskilt bra med muterbara objekt.
  • NĂ€r en besökare kommer till oss, mĂ„ste vi hĂ€mta dennes transaktioner med nyckeln, baserat pĂ„ dennes besöks-ID. Det Ă€r ocksĂ„ en punktfrĂ„ga, vilket inte görs sĂ„ i ClickHouse. Normalt i ClickHouse görs stora ...scanningar, men hĂ€r mĂ„ste vi hĂ€mta flera poster. Det Ă€r ocksĂ„ ett anti-mönster.
  • Dessutom var transaktionen i json, men man ville inte skriva om den, sĂ„ man ville lagra json ostrukturerat, och om det behövdes, extrahera nĂ„got frĂ„n den. Och det Ă€r ocksĂ„ ett anti-mönster.

Dvs. en uppsÀttning anti-mönster.

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

Men trots allt lyckades man skapa ett system som fungerade mycket bra.

Vad gjordes? ClickHouse infördes, dit loggar samlades i poster. En attributtjÀnst infördes som hÀmtade loggar frÄn ClickHouse. Efter detta hÀmtade man transaktioner för varje post baserat pÄ besöks-ID, som kanske Ànnu inte var fÀrdigbehandlade, plus snapshotar, dvs. redan kopplade transaktioner, det vill sÀga resultatet av tidigare arbete. FrÄn dem byggde man logik, valde rÀtt transaktion, kopplade nya hÀndelser. Loggade pÄ nytt i loggen. Loggen skickades tillbaka till ClickHouse, dvs. det Àr ett stÀndigt cykliskt system. Dessutom skickades den till DWH för analys.

Det fungerade inte sÄ bra i den formen. För att göra det enklare för ClickHouse nÀr det kom förfrÄgningar baserade pÄ visit-id, grupperade vi dessa förfrÄgningar i block om 1 000-2 000 visit-id och hÀmtade alla transaktioner för 1 000-2 000 personer. DÄ fungerade allt.

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

Om man tittar inuti ClickHouse finns det totalt 3 huvudtabeller som hanterar allt detta.

Den första tabellen dit loggarna laddas, och loggarna laddas nÀstan utan bearbetning.

Den andra tabellen. Genom en materialiserad vy extraherades de loggar som Ànnu inte fick tilldelade hÀndelser, dvs. osammanhÀngande. Och genom den materialiserade vyn extraherades transaktionerna för att bygga en snapshot. Det vill sÀga, en speciell materialiserad vy byggde snapshoten, som var det senaste ackumulerade tillstÄndet av transaktionen.

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

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

Den första viktiga punkten Àr möjligheten i ClickHouse att extrahera kolumner, fÀlt frÄn json. Det finns nÄgra metoder i ClickHouse för att arbeta med json. De Àr mycket, mycket primitiva.

visitParamExtractInt tillÄter att extrahera attribut frÄn json, dvs. första trÀffen aktiveras. Och pÄ sÄ sÀtt kan man hÀmta transaktions-id eller visit-id. Det Àr en.

Det andra – hĂ€r anvĂ€nds ett smart materialiserat fĂ€lt. Vad innebĂ€r detta? Det betyder att du inte kan infoga det i tabellen, dvs. det infogas inte, det berĂ€knas och lagras vid infogningen. Vid infogningen gör ClickHouse arbetet Ă„t dig. Och det som senare behövs extraheras frĂ„n json.

I det hÀr fallet Àr den materialiserade vyn för obearbetade rader. Den anvÀnder första tabellen med nÀstan rÄa loggar. Vad gör den? För det första Àndrar den sorteringen, dvs. sorteringen sker nu baserat pÄ visit-id, eftersom vi snabbt behöver hÀmta just den specifika personens transaktion.

Den andra viktiga punkten Àr index_granularity. Om du har sett MergeTree Àr index_granularity normalt stÀllt pÄ 8 192 som standard. Vad innebÀr detta? Det Àr en parameter för indexets sparsitet. I ClickHouse Àr indexet sparsam, det indexerar aldrig varje post. Det gör detta var 8 192. Detta Àr bra nÀr mycket data ska rÀknas, men dÄligt nÀr det Àr lite, eftersom overheaden blir stor. Genom att minska index_granularity minskar vi overheaden. Det gÄr inte att minska till ett eftersom minnet kan vara otillrÀckligt. Indexet lagras alltid i minnet.

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

Snapshotet anvÀnder nÄgra intressanta funktioner frÄn ClickHouse.

För det första, AggregatingMergeTree. I AggregatingMergeTree lagras argMax, dvs. det Àr tillstÄndet för transaktionen som motsvarar den senaste tidsstÀmpeln. Nya transaktioner genereras kontinuerligt för varje besökare. I det senaste tillstÄndet av den hÀr transaktionen har vi lagt till en hÀndelse och fÄtt ett nytt tillstÄnd. Det hamnade Äter i ClickHouse. Genom argMax i denna materialiserade vy kan vi alltid fÄ den aktuella statusen.

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

  • Bindning 'frikopplad' frĂ„n Runtime.
  • Upp till 3 miljarder transaktioner lagras och bearbetas varje mĂ„nad. Det Ă€r avsevĂ€rt mer Ă€n vad som var fallet med Cassandra, dvs. i ett typiskt transaktionssystem.
  • En kluster av 2x5 ClickHouse-servrar. 5 servrar och varje server har en replika. Det Ă€r till och med fĂ€rre Ă€n vad som krĂ€vdes i Cassandra för att göra click based atribuering, hĂ€r har vi impression based. Det vill sĂ€ga, istĂ€llet för att öka antalet servrar 30 gĂ„nger, har de lyckats minska det.

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

Och det sista exemplet – ett finansföretag Y som analyserade korrelationer i aktiekurser.

Och uppgiften var följande:

  • Det finns ungefĂ€r 5 000 aktier.
  • Kursen Ă€r kĂ€nd var 100:e millisekund.
  • Data har samlats in under 10 Ă„r. Tydligen har en del företag mer data, andra mindre.
  • Totalt ungefĂ€r 100 miljarder rader.

Och man behövde berÀkna korrelationen i förÀndringarna.

Teori och praktik av 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 det en positiv korrelation, dvs. nÀr den ena vÀxer, vÀxer den andra. Om den ena gÄr upp, som i slutet av grafen, och den andra gÄr ner, sÄ Àr det en negativ korrelation, dvs. nÀr den ena vÀxer, faller den andra.

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

Teori och praktik av 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 innehÄller: tid, aktie och pris. Först mÄste vi berÀkna 100 miljarder gÄnger runningDifference frÄn algoritmen för priset. RunningDifference Àr en funktion i ClickHouse som berÀknar skillnaden mellan tvÄ rader sekventiellt.

DÀrefter mÄste vi berÀkna korrelationen, och korrelationen mÄste berÀknas för varje par. För 5 000 aktier Àr paren 12,5 miljoner. Och det Àr mycket, dvs. 12,5 gÄnger mÄste vi berÀkna en sÄdan korrelationsfunktion.

Och om nĂ„gon har glömt, sĂ„ Ă€r ͞x och ͞y – det matematiska förvĂ€ntade vĂ€rdet enligt urvalet. Det innebĂ€r att man inte bara mĂ„ste berĂ€kna rötter och summor, utan ocksĂ„ berĂ€kna ytterligare summor inom dessa summor. En massa berĂ€kningar mĂ„ste göras 12,5 miljoner gĂ„nger, och dessutom mĂ„ste vi gruppera efter timmar. Vi har ocksĂ„ mĂ„nga timmar. Och allt mĂ„ste göras pĂ„ 60 sekunder. Det Ă€r ett skĂ€mt.

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

Vi mÄste verkligen hinna med pÄ nÄgot sÀtt, eftersom allt detta fungerade vÀldigt, vÀldigt lÄngsamt, innan ClickHouse kom.

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

De försökte berÀkna detta pÄ Hadoop, pÄ Spark, pÄ Greenplum. Och allt var antingen mycket lÄngsamt eller dyrt. Det vill sÀga, det gick att berÀkna, men det blev senare dyrt.

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

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

Jag pÄminner om att vÄrt problem handlar om datalokalitet, sÄ korrelationerna kan inte lokaliseras. Vi kan inte samla en del av datan pÄ en server, en annan del pÄ en annan och berÀkna, vi mÄste ha all data överallt.

Vad gjorde de? Ursprungligen var datan lokaliserad. PÄ varje server lagrades data för prissÀttning av ett visst aktieutbud. Och de överlappar inte. SÄ man kan parallellt och oberoende berÀkna logReturn, allt detta sker parallellt och distribuerat.

DÀrefter beslutade man att minska datamÀngden utan att förlora uttrycksfullheten. Minska det med hjÀlp av arrayer, det vill sÀga att för varje tidssegment skapa en array av aktier och en array av priser. PÄ sÄ sÀtt tar datan mycket mindre utrymme. Och det Àr mer bekvÀmt att arbeta med dem. Det Àr nÀstan parallella operationer, det vill sÀga vi berÀknar delvis parallellt och skriver sedan till servern.

Efter detta kan det replikeras. Bokstaven «r» betyder att vi har replikerat dessa data. Det vill sĂ€ga, vi har samma data pĂ„ alla tre servrar – dessa arrayer.

Och sedan med ett speciellt skript frÄn detta urval av 12,5 miljoner korrelationer som mÄste berÀknas, kan man göra paket. Det vill sÀga, 2 500 uppgifter med 5 000 par korrelationer. Och denna uppgift berÀknas pÄ en specifik ClickHouse-server. Den har all data, eftersom datan Àr identisk och den kan berÀkna dem sekventiellt.

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

Ännu en gĂ„ng, hur det ser ut. Först har vi alla data i följande struktur: tid, aktier, pris. Sedan berĂ€knade vi logReturn, det vill sĂ€ga data i samma struktur, men istĂ€llet för pris har vi nu logReturn. DĂ€refter omarbetade vi dem, det vill sĂ€ga vi fick tid och groupArray för aktier och priser. Vi replikerade dem. Och efter detta genererade vi en mĂ€ngd uppgifter och matade ClickHouse sĂ„ att den kunde rĂ€kna dem. Och det fungerar.

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

PÄ proof of concept-uppgiften var det en deluppgift, det vill sÀga vi tog mindre data. Och allt pÄ tre servrar.

De första tvÄ stegen: berÀkning av log_return och inpackning i arrayer tog ungefÀr en timme vardera.

BerÀkningen av korrelationen tog cirka 50 timmar. Men 50 timmar Àr lite, eftersom det tidigare tog dem veckor. Det var en stor framgÄng. Och om man rÀknar sÄ berÀknades allt 70 gÄnger per sekund pÄ detta kluster.

Men det viktigaste Àr att detta system praktiskt taget Àr utan flaskhalsar, det vill sÀga det skalas nÀstan linjÀrt. Och de har verifierat det. FramgÄngsrikt skalade de det.

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

  • En korrekt struktur Ă€r hĂ€lften av framgĂ„ngen. Och en korrekt struktur innebĂ€r anvĂ€ndning av alla nödvĂ€ndiga ClickHouse-teknologier.
  • Summing/AggregatingMergeTrees Ă€r teknologier som möjliggör aggregering eller berĂ€kning av snapshot-state som ett sĂ€rskilt fall. Och det förenklar mĂ„nga saker avsevĂ€rt.
  • Materialized Views gör det möjligt att kringgĂ„ begrĂ€nsningen med en index. Kanske uttryckte jag mig inte sĂ„ tydligt, men nĂ€r vi laddade loggar, var de rĂ„a loggarna i en tabell med ett index, medan pĂ„ attributloggarna var de i en tabell, det vill sĂ€ga samma data, bara filtrerade, men indexet var helt annat. Det verkar som samma data, men olika sortering. Och Materialized Views gör det möjligt, om du behöver det, att kringgĂ„ sĂ„dana begrĂ€nsningar i ClickHouse.
  • Minska indexets granulĂ€ritet för punktförfrĂ„gningar.
  • Och fördela data smart, försök att maximalt lokalisera data inom servern. Och se till att förfrĂ„gningar ocksĂ„ anvĂ€nder lokaliseringen dĂ€r det Ă€r möjligt.

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

Sammanfattningsvis kan man sÀga att ClickHouse nu har etablerat sig inom bÄde kommersiella databaser och open source-databaser, dvs. frÀmst för analytiska syften. Det passar utmÀrkt in i detta landskap. Dessutom börjar det sakta men sÀkert att trÀnga undan andra alternativ, eftersom du inte behöver InfiniDB nÀr du har ClickHouse. Vertica kan snart bli overflödig om de inte förbÀttrar sitt SQL-stöd. AnvÀnd det!

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

—Tack för presentationen! Mycket intressant! Har det gjorts nĂ„gra jĂ€mförelser med Apache Phoenix?

- Nej, jag har inte hört att nÄgon har gjort sÄdana jÀmförelser. Vi pÄ Yandex försöker hÄlla koll pÄ alla jÀmförelser mellan ClickHouse och olika databaser. För om det nÄgon gÄng visar sig att nÄgot Àr snabbare Àn ClickHouse, kan Aleksej Milovidov inte sova om nÀtterna och börjar snabbt öka hastigheten. Jag har inte hört talas om en sÄdan jÀmförelse.

  • (Aleksej Milovidov) Apache Phoenix Ă€r en SQL-motor pĂ„ HBase. HBase Ă€r huvudsakligen avsedd för nyckel-vĂ€rde-arbetsflöden. Varje rad kan ha ett godtyckligt antal kolumner med godtyckliga namn. Detta gĂ€ller ocksĂ„ för system som HBase och Cassandra. DĂ€r fungerar inte tunga analytiska frĂ„gor sĂ€rskilt bra. Eller sĂ„ kan du tro att de fungerar bra om du inte har nĂ„gon erfarenhet av ClickHouse.

  • Tack

    • God dag! Jag har redan varit ganska intresserad av detta Ă€mne eftersom jag har ett analytiskt subsystem. Men nĂ€r jag tittar pĂ„ ClickHouse fĂ„r jag intrycket att ClickHouse Ă€r vĂ€ldigt bra för analys av hĂ€ndelser, mutable. Och om jag behöver analysera mycket affĂ€rsdata med massor av stora tabeller, passar ClickHouse, sĂ„vitt jag förstĂ„r, inte sĂ€rskilt bra? SĂ€rskilt om de förĂ€ndras. StĂ€mmer det eller finns det exempel som kan motbevisa detta?

    • Det Ă€r sant. Och det gĂ€ller för merparten av specialiserade analytiska databaser. De Ă€r anpassade för en eller flera stora tabeller som Ă€r mutabla, och för mĂ„nga smĂ„ som förĂ€ndras lĂ„ngsamt. Det vill sĂ€ga, ClickHouse fungerar inte som Oracle, dĂ€r man kan lagra allt och bygga mycket komplexa frĂ„gor. För att effektivt anvĂ€nda ClickHouse mĂ„ste man bygga schemat pĂ„ ett sĂ„dant sĂ€tt som fungerar bra i ClickHouse. Det innebĂ€r att man ska undvika överdriven normalisering, anvĂ€nda ordböcker och försöka göra fĂ€rre lĂ„nga relationer. Om man bygger schemat pĂ„ det hĂ€r sĂ€ttet kan man lösa liknande affĂ€rsproblem i ClickHouse mycket mer effektivt Ă€n i en traditionell relationsdatabas.

Tack för presentationen! Jag har en frÄga angÄende det senaste finansiella fallet. De hade analys. Det var nödvÀndigt att jÀmföra hur det gÄr upp och ner. Och jag förstÄr att ni byggde systemet just för den analysen? Om de imorgon till exempel skulle behöva en annan rapport baserad pÄ dessa data, mÄste man bygga om schemat och ladda data igen? Det vill sÀga, göra nÄgon form av förbearbetning för att fÄ fram en frÄga?

SjÀlvklart, det handlar om att anvÀnda ClickHouse för en mycket specifik uppgift. Den skulle mer traditionellt kunna lösas inom ramen för Hadoop. För Hadoop Àr det en perfekt uppgift. Men det Àr vÀldigt lÄngsamt pÄ Hadoop. Min avsikt Àr att visa att man kan lösa uppgifter pÄ ClickHouse som vanligtvis hanteras med helt andra medel, men göra det mycket mer effektivt. Det Àr verkligen skrÀddarsytt för en specifik uppgift. SjÀlvklart, om det finns en liknande uppgift kan den lösas pÄ liknande sÀtt.

FörstĂ„tt. Ni sa att det tog 50 timmar. Är det frĂ„n början, nĂ€r data laddades eller nĂ€r ni fick resultaten?

Ja, ja.

Bra, tack sÄ mycket.

Det Àr pÄ en 3-server kluster.

Hej! Tack för presentationen! Allt Àr vÀldigt intressant. Jag ska frÄga lite mindre om funktionaliteten, utan mer om anvÀndningen av ClickHouse ur ett stabilitetsperspektiv. Har ni rÄkat ut för nÄgra problem, har ni behövt ÄterstÀlla? Hur beter sig ClickHouse i sÄ fall? Och har ni nÄgonsin upplevt att en replik ocksÄ kraschar? Vi har, till exempel, stött pÄ problemet med att ClickHouse ibland gÄr över sina grÀnser och kraschar.

SjÀlvklart finns det inga perfekta system. Och ClickHouse har sina egna problem. Men har ni hört talas om att Yandex.Metrica har haft lÄngvariga driftstopp? Antagligen inte. Den har fungerat pÄlitligt sedan ungefÀr 2012-2013 med ClickHouse. Jag kan ocksÄ berÀtta om min erfarenhet. Vi har aldrig haft totala driftstopp. Vissa delvisa problem har kunnat uppstÄ, men de har aldrig varit kritiska nog för att pÄverka verksamheten seriöst. SÄdant har aldrig hÀnt. ClickHouse Àr tillrÀckligt pÄlitligt och kraschar inte slumpmÀssigt. Man behöver inte oroa sig för det. Det Àr inget ofÀrdigt system. Det har bevisats av mÄnga företag.

Hej! Du sa att man mÄste tÀnka igenom datastrukturen noggrant frÄn början. Men vad hÀnder om det redan har intrÀffat? Jag har data som strömmar pÄ. Det har gÄtt sex mÄnader, och jag inser att jag inte kan fortsÀtta sÄ hÀr; jag mÄste ladda om data och hantera dem pÄ nÄgot sÀtt.

Det beror sjÀlvklart pÄ ditt system. Det finns flera sÀtt att göra detta praktiskt taget utan avbrott. Till exempel kan du skapa en Materialized View, dÀr du skapar en annan databasstruktur, om den kan mappas entydigt. Det vill sÀga, om det tillÄter mappning med hjÀlp av ClickHouse, det vill sÀga extrahera vissa saker, Àndra primÀrnyckel, Àndra partitionering, sÄ kan du skapa en Materialized View. Du kan skriva över dina gamla data dÀr, och nya kommer att skrivas automatiskt. Sedan kan du enkelt vÀxla till att anvÀnda Materialized View, och dÀrefter byta skrivning och ta bort den gamla tabellen. Det Àr verkligen ett sÀtt utan avbrott.

Tack.

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster