ClickHouse alang sa mga advanced nga tiggamit sa mga pangutana ug tubag

Niadtong Abril, ang mga inhenyero sa Avito nagpundok alang sa online nga mga panagtapok kauban si Alexey Milovidov, ang nag-unang developer sa ClickHouse, ug Kirill Shvakov, usa ka developer sa Golang gikan sa Integros. Among gihisgutan kung giunsa namo paggamit ang database management system ug unsa nga mga kalisdanan ang among giatubang.

Base sa miting, nagtigom mi ug artikulo nga adunay mga tubag sa mga eksperto sa among mga pangutana ug sa mga mamiminaw bahin sa mga backup, data resharding, external nga mga diksyonaryo, Golang driver, ug ClickHouse version updates. Mahimong mapuslanon kini alang sa mga nag-develop nga aktibo na nga nagtrabaho sa Yandex DBMS ug interesado sa karon ug sa umaabot. Ang mga tubag ni Aleksey Milovidov pinaagi sa default, gawas kung gipahibalo.

Pagbantay, adunay daghang teksto sa ilawom sa pagputol. Naglaum kami nga ang sulud nga adunay mga pangutana makatabang kanimo sa pag-navigate.

ClickHouse alang sa mga advanced nga tiggamit sa mga pangutana ug tubag

Mga sulod

Kung dili nimo gusto nga basahon ang teksto, mahimo nimong tan-awon ang pagrekord sa mga panagtapok sa among youtube channel. Ang mga timestamp anaa sa unang komento sa ubos sa video.

Ang ClickHouse kanunay nga gi-update, apan ang among datos dili. Unsa ang buhaton niini?

Ang ClickHouse kanunay nga gi-update, ug ang among data nga giproseso pinaagi sa optimize final wala gi-update ug naa sa backup.

Ibutang ta nga kita adunay usa ka matang sa problema ug ang data nawala. Nakahukom kami nga ibalik, ug kini nahimo nga ang mga daan nga partisyon nga gitipigan sa mga backup server lahi kaayo sa bersyon sa ClickHouse nga gigamit karon. Unsa ang buhaton sa ingon nga kahimtang, ug posible ba?

Ang sitwasyon diin imong gipahiuli ang data gikan sa usa ka backup sa daan nga format, apan sa bag-ong bersyon dili sila konektado, imposible. Among gisiguro nga ang format sa datos sa ClickHouse kanunay magpabilin nga paatras nga compatible. Kini labi ka hinungdanon kaysa atrasado nga pagpaangay sa pagpaandar kung ang pamatasan sa pipila nga panagsa ra gigamit nga function nausab. Ang datos nga gitipigan sa disk, ang bag-ong bersyon sa ClickHouse kinahanglan kanunay nga makabasa. Kini ang balaod.

Unsa ang karon nga labing kaayo nga mga gawi alang sa pag-backup sa datos gikan sa ClickHouse?

Giunsa paghimo ang mga pag-backup, nga gikonsiderar nga na-optimize namon ang katapusan nga mga operasyon, usa ka dako nga database sa mga terabytes, ug mga datos nga gi-update, ingnon ta, sa katapusan nga tulo ka adlaw, ug dayon wala’y mga pamaagi nga mahitabo kanila?

Mahimo natong ibutang ang atong kaugalingong solusyon ug isulat sa ulo: kolektahon kini nga mga backup sa ingon ug ingon niana nga paagi. Tingali dili nimo kinahanglan nga magsaklay bisan unsa, ug ang bisikleta naimbento sa dugay na nga panahon?

Magsugod ta sa labing maayong mga gawi. Ang akong mga kauban kanunay nga nagtambag agig tubag sa mga pangutana bahin sa mga backup aron pahinumdoman sila bahin sa serbisyo sa Yandex.Cloud, diin kini nga buluhaton nasulbad na. Busa gamita kini kon mahimo.

Walay kompleto nga solusyon, usa ka gatos ka porsyento nga gitukod sa ClickHouse, alang sa mga backup. Adunay pipila ka mga blangko nga imong magamit. Aron makakuha usa ka kompleto nga solusyon, kinahanglan nimo nga mag-tinker sa usa ka gamay nga mano-mano, o maghimo mga wrapper sa porma sa mga script.

Magsugod ko sa pinakasimple nga mga solusyon ug tapuson sa labing sopistikado, depende sa gidaghanon sa datos ug gidak-on sa cluster. Kon mas dako ang cluster, mas lisud ang solusyon.

Kung ang lamesa sa datos nag-okupar lamang sa pipila ka gigabytes, ang backup mahimo nga sama niini:

  1. I-save ang kahulugan sa mga lamesa, i.e. metadata − ipakita paghimo lamesa.
  2. Paghimo og dump gamit ang ClickHouse client − pagpili * gikan sa lamesa sa pag-file. Sa kasagaran, makadawat ka og file sa TabSeparated format. Kung gusto nimo nga mahimong mas episyente, mahimo nimong gamiton ang Native format.

Kung ang gidaghanon sa datos mas dako, nan ang pag-backup magkinahanglan og dugang nga panahon ug daghang luna. Gitawag kini nga lohikal nga backup, wala kini gihigot sa format sa datos sa ClickHouse. Kung kini mao, unya sa usa ka pinch mahimo ka mag-backup ug i-upload kini sa MySQL alang sa pagkaayo.

Alang sa mas abante nga mga kaso, ang ClickHouse adunay built-in nga abilidad sa paghimo og snapshot sa mga partisyon sa lokal nga file system. Kini nga bahin magamit isip usa ka hangyo. usba ang lamesa nga freeze partition. O sa yano usba ang pag-freeze sa lamesa usa ka snapshot sa tibuok lamesa.

Ang snapshot pagahimoon nga makanunayon alang sa usa ka lamesa sa usa ka shard, nga mao, imposible nga makahimo og usa ka makanunayon nga snapshot sa tibuok cluster sa niini nga paagi. Apan alang sa kadaghanan nga mga buluhaton, wala’y ingon nga panginahanglan, ug igo na nga ipatuman ang usa ka hangyo sa matag shard ug makakuha usa ka makanunayon nga snapshot. Gihimo kini sa porma sa mga hardlink ug busa wala magkinahanglan og dugang nga luna. Dayon imong kopyahon kini nga snapshot sa backup server o sa storage nga imong gigamit alang sa backups.

Ang pagpahiuli sa ingon nga backup dali ra. Una, maghimo ka og mga lamesa sumala sa kasamtangan nga mga kahulugan sa lamesa. Sunod, kopyaha ang na-save nga partition snapshot sa Directory-Detached para niini nga mga lamesa ug padagana ang pangutana ilakip ang partisyon. Ang kini nga solusyon angay alang sa labing grabe nga kantidad sa datos.

Usahay kinahanglan nimo ang usa ka butang nga mas bugnaw - sa mga kaso diin ikaw adunay napulo o bisan gatosan ka terabytes sa matag server ug gatusan ka mga server. Adunay usa ka solusyon dinhi nga akong gipaniid gikan sa mga kauban gikan sa Yandex.Metrica. Dili ko kini irekomenda sa tanan - basaha kini ug pagdesisyon alang sa imong kaugalingon kung kini angay ba o dili.

Una kinahanglan nimo nga maghimo daghang mga server nga adunay daghang mga istante sa disk. Sunod, ipataas ang daghang mga server sa ClickHouse sa kini nga mga server ug i-configure kini aron sila molihok ingon lain nga kopya alang sa parehas nga mga shards. Ug dayon gamita ang file system sa kini nga mga server o pipila nga himan nga nagtugot kanimo sa paghimo og mga snapshot. Adunay duha ka kapilian dinhi. Ang una nga kapilian mao ang mga snapshot sa LVM, ang ikaduha nga kapilian mao ang ZFS sa Linux.

Pagkahuman niana, matag adlaw kinahanglan nimo nga maghimo usa ka snapshot, mamakak kini ug makakuha usa ka wanang. Natural, kon ang data mausab, unya sa paglabay sa panahon ang gidaghanon sa luna modaghan. Mahimo nimong makuha kini nga snapshot sa bisan unsang oras ug ibalik ang datos, usa ka katingad-an nga desisyon. Dugang pa, kinahanglan nimo nga limitahan kini nga mga replika sa config aron dili sila maningkamot nga mahimong mga lider.

Posible ba ang pag-organisar sa usa ka kontrolado nga backlog sa mga replika sa mga shaft?

Karong tuiga nagplano ka nga maghimo mga shaft sa ClickHouse. Posible ba ang pag-organisar sa usa ka kontrolado nga backlog sa mga replika niini? Gusto namon nga gamiton kini aron mapanalipdan ang among kaugalingon gikan sa negatibo nga mga senaryo nga adunay mga pagbag-o ug uban pang mga pagbag-o.

Posible ba nga maghimo usa ka matang sa roll back alang sa mga pagbag-o? Pananglitan, sa usa ka kasamtangan nga shaft, kuhaa ug isulti nga hangtod niining higayona, i-apply ang mga pagbag-o, ug gikan niining higayona, hunong sa paggamit sa mga pagbag-o?

Kung ang usa ka mando moabut sa among cluster ug gibuak kini, nan kami adunay usa ka conditional replica nga adunay usa ka oras nga lag, diin mahimo naton isulti nga gamiton naton kini sa pagkakaron, apan dili naton i-apply ang mga pagbag-o niini sa katapusang napulo ka minuto?

Sa pagsugod, mahitungod sa kontrolado nga backlog sa mga replika. Adunay ingon nga hangyo gikan sa mga tiggamit, ug naghimo kami usa ka isyu sa Github nga adunay usa ka hangyo: "Kung adunay nanginahanglan niini, pagbutang usa ka gusto, pagbutang usa ka kasingkasing." Walay nakapusta, ug ang isyu gisirado. Bisan pa, mahimo nimong makuha kini nga oportunidad pinaagi sa pag-set up sa ClickHouse. Tinuod, sugod lang sa bersyon 20.3.

Ang ClickHouse kanunay nga naghiusa sa datos sa background - paghiusa. Kung gihimo ang usa ka paghiusa, pipila ka hugpong sa mga tipak sa datos pulihan sa usa ka mas dako nga tipak. Sa samang higayon, ang mga piraso sa datos nga kaniadto nagpadayon nga magpabilin sa disk sulod sa pipila ka panahon.

Una, padayon sila nga gitipigan basta adunay mga pinili nga mga pangutana nga naggamit niini, aron masiguro ang dili pag-block nga operasyon. Ang pinili nga mga hangyo hilom nga gibasa gikan sa daan nga mga tipik.

Ikaduha, adunay usa usab ka time threshold - ang daan nga mga piraso sa data nahimutang sa disk sulod sa walo ka minuto. Kining walo ka minuto mahimong ipasibo ug mahimong usa ka adlaw. Mogasto kini sa wanang sa disk: depende sa dagan sa datos, mogawas nga sa katapusan nga adlaw ang datos dili lamang doble, mahimo kini nga lima ka pilo. Apan kung adunay usa ka seryoso nga problema, mahimo nimong hunongon ang server sa ClickHouse ug atubangon ang tanan.

Karon ang pangutana kung giunsa kini pagpanalipod batok sa mga pagbag-o. Angayan nga tan-awon nga mas lawom dinhi, tungod kay sa mga daan nga bersyon sa ClickHouse, ang pagbag-o nagtrabaho sa paagi nga direkta nga gibag-o ang mga piraso. Adunay usa ka piraso sa datos nga adunay pipila ka mga file, ug among gibuhat, pananglitan, usba ang drop column. Unya kini nga kolum pisikal nga gikuha gikan sa tanan nga mga tipak.

Apan sukad sa bersyon 20.3, ang mekanismo sa pagbag-o hingpit nga nabag-o, ug karon ang mga tipik sa datos kanunay nga dili mausab. Wala gyud sila magbag-o - ang mga pagbag-o karon nagtrabaho sa parehas nga paagi sama sa paghiusa. Imbis nga usbon ang usa ka piraso sa lugar, maghimo kami usa ka bag-o. Sa bag-ong tipik, ang mga file nga wala mausab nahimong mga hardlink, ug kon atong tangtangon ang usa ka column, mawala ra kini sa bag-ong tipak. Ang daan nga piraso mapapas pinaagi sa default pagkahuman sa walo ka minuto, ug dinhi mahimo nimong i-tweak ang mga setting nga gihisgutan sa ibabaw.

Ingon usab ang mga pagbag-o sama sa mutation. Kung buhaton nimo usba ang pagtangtang o usba ang update, wala kini mag-usab sa piraso, apan nagmugna og bag-o. Ug unya tangtangon ang daan.

Unsa kaha kon ang istruktura sa lamesa nausab?

Giunsa ang pagpataas sa usa ka backup nga gihimo gamit ang daan nga laraw? Ug ang ikaduha nga pangutana bahin sa kaso nga adunay mga snapshot ug mga himan sa file system. Angayan ba ang Btrfs dinhi imbes sa ZFS sa Linux LVM?

Kung buhaton nimo ilakip ang partisyon mga partisyon nga adunay lahi nga istruktura, unya ang ClickHouse mosulti kanimo nga kini dili mahimo. Ang solusyon mao kini. Ang una mao ang paghimo og temporaryo nga lamesa sa MergeTree nga tipo nga adunay daan nga istruktura, i-attach ang data didto gamit ang attach, ug mag-isyu og alter query. Dayon mahimo nimong kopyahon o ibalhin kini nga datos ug ilakip pag-usab, o gamiton ang pangutana usba ang partisyon sa paglihok sa lamesa.

Karon ang ikaduha nga pangutana kung posible ba nga magamit ang Btrfs. Alang sa mga nagsugod, kung ikaw adunay LVM, nan ang mga snapshot sa LVM igo na, ug ang file system mahimong ext4, dili igsapayan. Uban sa Btrts, kini tanan nagdepende sa imong kasinatian niini. Kini usa ka hamtong nga sistema sa file, apan adunay pipila ka mga pagduda kung giunsa ang tanan nga molihok sa praktis sa usa ka partikular nga senaryo. Dili nako irekomendar ang paggamit niini gawas kung adunay mga Btrf sa produksiyon.

Unsa ang labing maayo nga mga gawi karon alang sa pagbag-o sa datos?

Ang pangutana sa resharding komplikado ug multifaceted. Dinhi mahimo nimong tubagon ang daghang mga kapilian sa usa ka higayon. Mahimo ka nga mosulod gikan sa usa ka kilid ug isulti kini - wala’y built-in nga kapilian sa pag-reshard sa ClickHouse. Apan nahadlok ko nga kini nga tubag dili angay kang bisan kinsa. Busa, mahimo kang moadto gikan sa pikas nga bahin ug moingon nga ang ClickHouse adunay daghang mga paagi sa pag-reshard sa datos.

Kung ang cluster nahutdan sa luna o dili kini makadumala sa load, magdugang ka og bag-ong mga server. Apan kini nga mga server walay sulod pinaagi sa default, walay datos sa kanila, walay load. Kinahanglan nimo nga ibalhin ang datos aron kini parehas nga mikaylap sa bag-o, mas dako nga cluster.

Ang unang paagi sa pagbuhat niini mao ang pagkopya sa bahin sa mga partisyon ngadto sa bag-ong mga server gamit ang pangutana usba ang partisyon sa pagkuha sa lamesa. Pananglitan, ikaw adunay mga partisyon sa mga bulan, ug imong gikuha ang unang bulan sa 2017 ug gikopya kini sa usa ka bag-ong server, unya kopyaha ang ikatulo nga bulan ngadto sa laing bag-ong server. Ug mao kana ang imong buhaton hangtud nga kini mahimong labaw pa o dili kaayo parehas.

Ang pagbalhin mahimo lamang alang sa mga partisyon nga dili mausab sa panahon sa pagrekord. Alang sa bag-ong mga partisyon, ang pagsulat kinahanglan nga ma-disable, tungod kay ang ilang pagbalhin dili atomic. Kung dili, adunay mga duplicate o mga kal-ang sa datos. Bisan pa, kini nga pamaagi praktikal ug epektibo kaayo. Ang andam nga gihimo nga mga compressed partition gipasa sa network, nga mao, ang datos wala gi-compress o gi-recode.

Kini nga pamaagi adunay usa ka disbentaha, ug nagdepende kini sa laraw sa sharding, kung nakasaad ka ba sa kini nga laraw sa sharding, kung unsang yawe sa sharding ang naa kanimo. Sa imong pananglitan alang sa kaso nga adunay mga sukatan, ang sharding key usa ka hash sa agianan. Kung magpili ka usa ka Talaan nga Naapod-apod, kini moadto sa tanan nga mga shards sa cluster sa usa ka higayon ug kuhaon ang datos gikan didto.

Kini nagpasabut nga dili kini hinungdanon kanimo kung unsang datos ang natapos kung unsang shard. Ang nag-unang butang mao nga ang datos sa usa ka agianan natapos sa usa ka shard, apan kung unsa ang dili hinungdanon. Sa kini nga kaso, ang pagbalhin sa andam nga mga partisyon perpekto, tungod kay sa mga pinili nga mga pangutana, makadawat ka usab og bug-os nga datos - sa wala pa ang pag-reshard ug pagkahuman, ang laraw dili gyud hinungdanon.

Apan adunay mga kaso nga mas komplikado. Kung sa lebel sa lohika sa aplikasyon nagsalig ka sa usa ka espesyal nga laraw sa sharding, nga kini nga kliyente nahimutang sa ingon ug ingon nga usa ka shard, ug ang hangyo mahimo nga ipadala dayon didto, ug dili sa Na-apod-apod nga lamesa. O gigamit ba nimo ang usa ka bag-o nga bersyon sa ClickHouse ug gipalihok ang setting pag-optimize sa paglaktaw sa wala magamit nga mga shards. Sa kini nga kaso, sa panahon sa pagpili nga pangutana, ang ekspresyon sa kung asa nga seksyon ma-parse ug kini makalkula kung unsang mga shards ang moadto sumala sa laraw sa sharding. Nagtrabaho kini nga gihatag nga ang datos nabuak nga eksakto sumala sa kini nga laraw sa sharding. Kung imong gibalhin sila sa kamut, ang mga sulat mahimong mausab.

Mao kana ang numero unong paagi. Ug naghulat ko sa imong tubag, angay ba ang pamaagi, o magpadayon.

Vladimir Kolobaev, nanguna nga tagdumala sa sistema sa Avito: Alexey, ang pamaagi nga imong gihisgutan dili kaayo angay kung kinahanglan nimo nga ipakaylap ang load, lakip ang pagbasa. Mahimo natong kuhaon ang usa ka partisyon nga binulan ug mahimo natong dad-on ang miaging bulan ngadto sa laing node, apan kung ang usa ka hangyo moabut alang niini nga datos, i-load lang nato kini. Apan gusto nakong i-load ang tibuok cluster, tungod kay, kung dili, sa pipila ka panahon, ang tibuok nga load sa pagbasa maproseso sa duha ka shards.

Alexey Milovidov: Ang tubag dinhi katingad-an - oo, kini dili maayo, apan mahimo kini. Ipasabot nako sa eksakto kung giunsa. Angayan nga tan-awon ang senaryo sa pagkarga nga kauban sa imong datos. Kung kini ang pag-monitor sa datos, nan hapit sigurado nga ang kadaghanan sa mga hangyo alang sa bag-ong datos.

Nag-instalar ka og bag-ong mga server, mibalhin sa daan nga mga partisyon, apan giusab usab kung giunsa pagsulat ang bag-ong datos. Ug ang bag-ong datos ipakaylap sa tibuok cluster. Sa ingon, pagkahuman sa lima ka minuto, ang mga hangyo alang sa katapusang lima ka minuto parehas nga magkarga sa cluster, pagkahuman sa usa ka adlaw, ang mga hangyo alang sa usa ka adlaw parehas nga magkarga sa cluster. Ug ang mga hangyo alang sa miaging bulan, sa kasubo, moadto ra sa usa ka bahin sa mga cluster server.

Apan sa kasagaran wala kay mga hangyo alang sa Pebrero 2019. Lagmit, kung ang mga hangyo moadto sa 2019, nan kini alang sa tibuuk nga 2019 - alang sa usa ka dako nga agwat sa oras, ug dili alang sa gamay nga sakup. Ug ang ingon nga mga hangyo mahimo usab nga parehas nga ma-load ang cluster. Apan sa kinatibuk-an, husto ang imong gisulti nga kini usa ka ad hoc nga solusyon nga dili parehas nga pagkaylap sa datos.

Duna pa koy pipila ka punto nga tubagon ang pangutana. Ang usa niini mao ang bahin sa kung giunsa paghimo ang sharding scheme aron adunay gamay nga kasakit gikan sa pag-reshard. Dili kini kanunay nga posible.

Pananglitan, ikaw adunay data sa pag-monitor. Ang pag-monitor sa datos nagkadako tungod sa tulo ka rason. Ang una mao ang pagtipon sa mga datos sa kasaysayan. Ang ikaduha mao ang pagtubo sa trapiko. Ug ang ikatulo mao ang pagdugang sa gidaghanon sa mga butang nga gipailalom sa pagmonitor. Adunay bag-ong microservices ug metrics nga kinahanglang i-save.

Posible nga niini, ang pinakadako nga pagtaas tungod sa ikatulo nga hinungdan - kini usa ka pagtaas sa paggamit sa pag-monitor. Ug sa niini nga kaso, kini mao ang bili sa pagtan-aw sa kinaiya sa load, unsa ang mga nag-unang mga hangyo alang sa pagpili. Ang nag-unang pinili nga mga pangutana lagmit mosunod sa pipila ka subset sa metrics.

Pananglitan, ang paggamit sa CPU sa pipila ka mga server pinaagi sa pipila ka serbisyo. Kini nahimo nga adunay pipila ka subset sa mga yawe diin makuha nimo kini nga datos. Ug ang hangyo mismo alang sa kini nga datos lagmit nga yano ug nagdagan sa napulo ka millisecond. Gigamit alang sa mga serbisyo sa pag-monitor, alang sa mga dashboard. Hinaot nakasabot ko niini sa husto.

Vladimir Kolobaev: Ang tinuod mao nga kanunay kaming nag-apelar sa mga datos sa kasaysayan, tungod kay gitandi namon ang karon nga posisyon sa usa ka makasaysayanon sa tinuud nga oras. Ug kini hinungdanon alang kanamo nga adunay dali nga pag-access sa daghang mga datos, ug ang ClickHouse usa ka maayo nga trabaho niini.

Husto ka, kadaghanan sa mga hangyo sa pagbasa nga among nasinati sa katapusang adlaw, sama sa bisan unsang sistema sa pag-monitor. Apan sa samang higayon, ang load sa historical data dako usab. Kasagaran kini gikan sa usa ka sistema sa alerto nga naglibot matag katloan ka segundo ug gisultihan ang ClickHouse, "Ihatag kanako ang datos sa miaging unom ka semana. Ug karon tukora ako sa pipila nga moving average niini, ug atong itandi ang kasamtangang bili sa makasaysayanong bili.

Gusto nakong isulti nga alang sa ingon nga bag-ong mga hangyo kami adunay lain nga gamay nga lamesa diin kami nagtipig lamang sa duha ka adlaw nga datos, ug ang mga nag-unang hangyo molupad niini. Nagpadala lang kami og dagkong mga pangutana sa kasaysayan sa usa ka dako nga sharded nga lamesa.

Alexey Milovidov: Ikasubo, kini nahimo nga dili maayo nga magamit alang sa imong senaryo, apan akong ihulagway ang duha nga dili maayo ug komplikado nga mga laraw sa sharding nga dili kinahanglan gamiton, apan gigamit sa serbisyo sa akong mga higala.

Adunay usa ka nag-unang cluster nga adunay Yandex.Metrica nga mga panghitabo. Ang mga panghitabo kay page view, click, ug transition. Kadaghanan sa mga hangyo moadto sa usa ka piho nga website. Giablihan nimo ang serbisyo sa Yandex.Metrica, ikaw adunay website - avito.ru, adto sa report, ug usa ka hangyo ang gihimo alang sa imong website.

Apan adunay uban pang mga hangyo - analytical ug global, nga gihimo sa mga internal nga analista. Sa kaso lang, namatikdan nako nga ang mga internal nga analista naghimo lamang og mga hangyo alang sa mga serbisyo sa Yandex. Apan bisan pa, bisan ang mga serbisyo sa Yandex nag-okupar sa usa ka hinungdanon nga bahin sa tanan nga datos. Kini mga hangyo dili alang sa piho nga mga counter, apan alang sa mas lapad nga pagsala.

Giunsa pag-organisar ang datos sa paagi nga ang tanan molihok nga episyente alang sa usa ka counter, ug mga pangutana sa kalibutan? Ang laing kalisud anaa sa kamatuoran nga ang gidaghanon sa mga hangyo sa ClickHouse alang sa Metrics cluster kay pila ka libo kada segundo. Sa samang higayon, ang usa ka ClickHouse server wala magdumala sa dili importante nga mga hangyo, pananglitan, pipila ka libo kada segundo.

Ang gidak-on sa cluster mao ang unom ka gatus ug usa ka butang nga mga server. Kung imo lang i-stretch ang usa ka Distributed table sa ibabaw niini nga cluster ug ipadala ang pipila ka libo nga mga hangyo didto, kini mahimong mas grabe pa kay sa pagpadala kanila ngadto sa usa ka server. Sa laing bahin, ang kapilian nga ang data mikaylap nga parehas, ug kami moadto ug mohangyo gikan sa tanan nga mga server, gisalikway dayon.

Adunay usa ka diametrically kaatbang nga kapilian. Hunahunaa kung gibahin namon ang datos sa site, ug ang usa ka hangyo alang sa usa ka site moadto sa usa ka shard. Karon ang cluster makahimo sa pagkuha sa napulo ka libo nga mga hangyo matag segundo, apan sa usa ka shard usa ka hangyo ang molihok nga hinay kaayo. Dili na kini mag-scale sa bandwidth. Ilabi na kung kini usa ka site avito.ru. Dili nako ibutyag ang usa ka sekreto kung akong isulti nga ang Avito usa sa labing gibisita nga mga site sa Runet. Ug ang pagproseso niini sa usa ka shard mahimong buang.

Busa, ang sharding scheme gihan-ay sa mas malisud nga paagi. Ang tibuok cluster gibahin ngadto sa usa ka gidaghanon sa mga clusters, nga atong gitawag nga mga sapaw. Sa sulod sa matag cluster adunay gikan sa napulo ngadto sa pipila ka dosena nga mga shards. Adunay katloan ug siyam nga mga cluster sa kinatibuk-an.

Giunsa kini pagsukod sa tanan? Ang gidaghanon sa mga pungpong dili mausab - kay kini katloan ug siyam ka tuig na ang milabay, kini nagpabilin nga pareho. Apan sa sulod sa matag usa niini, anam-anam namong gidugangan ang gidaghanon sa mga shards samtang nagtigum ang mga datos. Ug ang laraw sa sharding sa kinatibuk-an mao kini - ang pagbahin sa kini nga mga pungpong gipaagi sa mga website, ug aron masabtan kung unsang site ang naa sa kumpol, usa ka lahi nga metabase sa MySQL ang kasagarang gigamit. Usa ka site - sa usa ka cluster. Ug sa sulod niini, ang sharding mahitabo sumala sa mga identifier sa mga bisita.

Kung nagrekord, gibahin namon sila sa nahabilin nga ID sa bisita. Apan kung idugang ang usa ka bag-ong shard, ang laraw sa sharding mausab, magpadayon kami sa pagbahin, apan sa nahabilin nga pagbahin sa lain nga numero. Kini nagpasabut nga ang usa ka bisita nahimutang na sa daghang mga server, ug dili ka makapusta niini. Gihimo lamang kini aron masiguro nga ang datos mas maayo nga ma-compress. Ug kung mangutana, moadto kami sa Na-apod-apod nga lamesa, nga nagtan-aw sa cluster ug nag-access sa daghang mga server. Kini usa ka binuang nga laraw.

Apan dili kompleto ang akong istorya kung dili ko moingon nga gibiyaan na naton kini nga laraw. Sa bag-ong laraw, giusab namo ang tanan ug gikopya ang tanang datos gamit ang clickhouse-copier.

Sa bag-ong laraw, ang tanan nga mga site gibahin sa duha nga mga kategorya - dako ug gamay. Wala ko mahibal-an kung giunsa gipili ang threshold, apan ang sangputanan mao nga ang dagkong mga site natala sa usa ka kumpol, diin adunay 120 shards nga adunay tulo nga mga replika matag usa - nga mao, 360 nga mga server. Ug ang laraw sa sharding mao nga ang bisan unsang hangyo moadto sa tanan nga mga shards sa usa ka higayon. Kung ablihan nimo karon ang bisan unsang panid sa taho alang sa avito.ru sa Yandex.Metrica, ang hangyo moadto sa 120 nga mga server. Adunay pipila ka dagkong mga site sa RuNet. Ug ang mga hangyo dili usa ka libo matag segundo, apan bisan wala’y usa ka gatos. Kining tanan hilom nga giusap sa Naapod-apod nga lamesa, diin ang matag usa kanila nagproseso sa 120 ka mga server.

Ug ang ikaduha nga cluster alang sa gagmay nga mga site. Ania ang usa ka sharding scheme pinaagi sa site ID, ug ang matag hangyo moadto sa eksaktong usa ka shard.

ClickHouse adunay usa ka clickhouse-copier utility. Makasulti ka ba bahin niya?

Kinahanglan kong isulti dayon nga kini nga solusyon mas hago ug medyo dili kaayo produktibo. Ang bentaha mao nga kini nagpahid sa datos sa hingpit sumala sa schema nga imong gitakda. Apan ang disbentaha sa utility mao nga kini dili reshard sa tanan. Gikopya niini ang datos gikan sa usa ka cluster schema ngadto sa laing cluster schema.

Kini nagpasabot nga aron kini molihok, kinahanglan nga adunay duha ka pungpong. Mahimo silang makit-an sa parehas nga mga server, apan, bisan pa, ang datos dili mabalhin nga hinay-hinay, apan kopyahon.

Pananglitan, adunay upat ka mga server, karon adunay walo. Naghimo ka usa ka bag-ong Naapod-apod nga lamesa sa tanan nga mga server, bag-ong lokal nga mga lamesa, ug ilunsad ang clickhouse-copier, nga gipiho niini ang laraw sa trabaho nga kinahanglan basahon gikan didto, dawaton ang bag-ong laraw sa sharding, ug ibalhin ang data didto. Ug kinahanglan nimo ang usa ug tunga ka pilo nga dugang nga wanang sa daan nga mga server kaysa sa naa nimo karon, tungod kay ang daan nga datos kinahanglan nga magpabilin sa kanila, ug ang katunga sa parehas nga daan nga datos moabut sa ibabaw nila. Kung naghunahuna ka daan nga ang datos kinahanglan nga i-reshard ug adunay luna, nan kini nga pamaagi angay.

Giunsa pagtrabaho ang clickhouse-copier sa sulod? Gibungkag niini ang tanan nga trabaho sa usa ka hugpong sa mga buluhaton alang sa pagproseso sa usa ka partisyon sa usa ka lamesa sa usa ka shard. Ang tanan niini nga mga buluhaton mahimong magkaparehas, ug ang clickhouse-copier mahimong modagan sa daghang mga higayon sa lainlaing mga makina, apan kung unsa ang mahimo niini alang sa usa ka partisyon wala’y labi pa sa usa ka pagpili sa sulud. Ang datos gibasa, gi-decompress, gi-repartition, unya gi-compress pag-usab, gisulat sa usa ka dapit, gi-sorte. Kini usa ka mas lisud nga desisyon.

Naa kay pilot nga butang nga gitawag og resharding. Unsa man sa iyaha?

Balik sa 2017, ikaw adunay pilot nga butang nga gitawag og resharding. Adunay bisan usa ka kapilian sa ClickHouse. Nasabtan nako nga wala kini gikuha. Makasulti ka ba nganong nahitabo kini? Morag may kalabotan kini kaayo.

Ang bug-os nga problema mao nga kung kinahanglan nimo nga i-reshard ang datos sa lugar, usa ka komplikado nga pag-synchronize ang gikinahanglan aron mahimo kini nga atomically. Kung nagsugod kami sa pagtan-aw kung giunsa kini nga pag-synchronize, nahimo nga tin-aw nga adunay sukaranan nga mga problema. Ug kini nga mga sukaranan nga mga problema dili lamang theoretical, apan diha-diha dayon nagsugod sa pagpakita sa ilang mga kaugalingon sa praktis sa porma sa usa ka butang nga mahimong ipasabut kaayo nga yano - walay mga buhat.

Posible ba nga iusa ang tanan nga mga bahin sa datos sa dili pa molihok sa hinay nga mga disk?

Usa ka pangutana bahin sa TTL uban ang paglihok aron hinay ang kapilian sa disk sa konteksto sa mga panagsama. Aduna bay lain nga paagi gawas sa cron aron mahiusa ang tanan nga mga bahin sa usa sa dili pa molihok aron hinay ang mga disk?

Ang tubag sa pangutana kung posible ba nga awtomatiko nga ipapilit ang tanan nga mga piraso sa usa sa wala pa ibalhin kini dili. Para nako dili kini kinahanglan. Dili nimo mahiusa ang tanan nga mga bahin sa usa, apan magsalig lang sa kamatuoran nga kini awtomatiko nga ibalhin sa hinay nga mga disk.

Adunay kami duha ka pamatasan alang sa mga lagda sa pagbalhin. Ang una mao ang pagpuno niini. Kung ang kasamtangan nga lebel sa pagtipig adunay gamay sa usa ka piho nga porsyento sa libre nga wanang, magpili kami usa ka tipik ug ibalhin kini sa usa ka hinay nga pagtipig. O hinoon, dili mas hinay, apan ang mosunod - kung giunsa nimo kini pag-set up.

Ang ikaduha nga sukdanan mao ang gidak-on. Naghisgot siya bahin sa pagbalhin sa dagkong mga piraso. Mahimo nimong i-adjust ang threshold base sa libre nga wanang sa usa ka paspas nga disk ug ang data awtomatiko nga ibalhin.

Giunsa ang pagbalhin sa bag-ong mga bersyon sa ClickHouse kung wala’y paagi aron masusi ang pagkaangay sa una?

Kini nga hilisgutan kanunay nga gihisgutan sa Telegram chat ClickHouse nga gikonsiderar ang lainlaing mga bersyon, ug bisan pa. Unsa ka luwas ang pag-upgrade gikan sa bersyon 19.11 hangtod 19.16 ug, pananglitan, gikan sa 19.16 hangtod 20.3. Unsa ang labing maayo nga paagi sa pagbalhin sa bag-ong mga bersyon nga dili masusi ang pagkaangay sa sandbox nga daan?

Adunay pipila ka bulawan nga mga lagda dinhi. Una- basaha changelog. Kini dako, apan adunay bulag nga mga punto bahin sa atras nga dili magkatugma nga mga pagbag-o. Ayaw tagda kining mga butanga ingong pula nga bandila. Kasagaran kini mga menor de edad nga dili magkatugma nga adunay kalabotan sa pipila nga mga gamit sa sulud nga lagmit wala nimo gigamit.

Ikaduha, kung wala’y paagi aron masusi ang pagkaangay sa sandbox, ug gusto nimo nga mag-upgrade dayon sa produksiyon, ang rekomendasyon mao nga dili nimo kinahanglan buhaton kini. Una paghimo og sandbox ug pagsulay. Kung wala’y pagsulay nga palibot, nan lagmit nga wala ka usa ka dako nga kompanya, nga nagpasabut nga mahimo nimong kopyahon ang pipila nga mga datos sa imong laptop ug siguruha nga ang tanan molihok sa husto niini. Mahimo ka pa nga magdala og pipila ka mga replika sa lokal sa imong makina. O mahimo nimong ipataas ang usa ka bag-ong bersyon sa usa ka lugar sa duol ug mag-upload sa pipila ka mga datos didto - kana mao, paghimo usa ka dili maayo nga palibot sa pagsulay.

Ang laing lagda mao ang dili pag-update sulod sa usa ka semana human sa pagpagawas sa bersyon tungod sa pagdakop sa mga bug sa produksyon ug sa sunod nga dali nga pag-ayo. Atong sabton ang ClickHouse version numbering para dili maglibog.

Adunay bersyon 20.3.4. Ang numero nga 20 nagpaila sa tuig sa paghimo - 2020. Gikan sa punto sa panglantaw kung unsa ang naa sa sulod, dili kini igsapayan, mao nga dili naton kini hatagan pagtagad. Dugang pa - 20.3. Ang ikaduha nga numero - sa kini nga kaso 3 - kami nagdugang sa matag higayon nga magpagawas kami usa ka pagpagawas nga adunay bag-ong kagamitan. Kung gusto namon nga idugang ang pipila nga bahin sa ClickHouse, kinahanglan namon nga dugangan kini nga numero. Kana mao, sa bersyon 20.4 ClickHouse mas maayo pa. Ang ikatulo nga digit mao ang 20.3.4. Dinhi ang 4 mao ang gidaghanon sa mga pagpagawas sa patch diin wala kami makadugang bag-ong mga bahin, apan nag-ayo sa pipila ka mga bug. Ug ang 4 nagpasabut nga gibuhat namon kini upat ka beses.

Ayaw paghunahuna nga kini usa ka butang nga makalilisang. Kasagaran ang user maka-install sa pinakabag-o nga bersyon ug kini molihok nga walay problema sa uptime kada tuig. Apan hunahunaa nga sa pipila ka mga gimbuhaton alang sa pagproseso sa mga bitmap, nga gidugang sa among mga kauban nga Intsik, kung nagpasa sa dili husto nga mga argumento, ang server nahagsa. Kinahanglan natong ayuhon kini. Magpagawas kami og bag-ong bersyon sa patch ug ang ClickHouse mahimong mas lig-on.

Kung ikaw adunay ClickHouse nga nagtrabaho sa produksiyon, ug usa ka bag-ong bersyon sa ClickHouse nga adunay dugang nga mga bahin ang gipagawas - pananglitan, ang 20.4.1 mao ang una, ayaw pagdali nga ibutang kini sa produksiyon sa unang adlaw. Nganong gikinahanglan man siya? Kung wala ka pa mogamit sa ClickHouse, mahimo nimo kini i-install, ug, lagmit, maayo ra ang tanan. Apan kung ang ClickHouse nagtrabaho na nga lig-on, unya padayon nga tun-an alang sa mga patch ug mga update - unsa nga mga problema ang among giayo.

Kirill Shvakov: Gusto ko magdugang gamay bahin sa mga palibot sa pagsulay. Ang tanan nahadlok kaayo sa mga palibot sa pagsulay ug sa pipila ka rason nagtuo nga kung ikaw adunay usa ka dako kaayo nga cluster sa ClickHouse, nan ang palibot sa pagsulay kinahanglan nga dili mas gamay o labing menos napulo ka pilo nga mas gamay. Dili gyud ingon ana.

Makasulti ko pinaagi sa akong ehemplo. Naa koy project ug naay ClickHouse. Ang among pagsulay nga palibot alang kaniya usa ka gamay nga virtual nga makina sa Hetzner sa baynte euro, diin ang tanan na-deploy. Aron mahimo kini, kami adunay bug-os nga automation sa Ansible, ug busa, sa prinsipyo, wala’y kalainan kung asa mag-roll - sa mga iron server o i-deploy lang sa mga virtual machine.

Unsa may mahimo? Maayo nga maghimo usa ka pananglitan sa dokumentasyon sa ClickHouse kung giunsa ang pag-deploy sa usa ka gamay nga kumpol sa imong kaugalingon - sa Docker, sa LXC, tingali maghimo usa ka Ansible playbook, tungod kay lainlain ang mga tawo nga adunay lainlaing mga pag-deploy. Kini makapasayon ​​sa daghang mga butang. Kung magkuha ka ug magbutang usa ka kumpol sa lima ka minuto, labi kadali nga sulayan nga mahibal-an ang usa ka butang. Kini labi ka kombenyente niining paagiha, tungod kay ang pag-roll sa usa ka bersyon nga wala nimo nasulayan sa produksiyon usa ka dalan nga wala’y bisan diin. Usahay kini molihok ug usahay dili. Ug mao nga ang paglaum alang sa kalampusan dili maayo.

Maxim Kotyakov, senior backend engineer Avito: Magdugang ko og gamay bahin sa mga palibot sa pagsulay gikan sa sunod-sunod nga mga problema alang sa dagkong mga kompanya. Kami adunay usa ka bug-os nga ClickHouse nga cluster sa pagdawat, sumala sa mga laraw sa datos ug mga setting, usa ka eksaktong kopya sa kung unsa ang naa sa produksiyon. Kini nga kumpol gibutang sa labi ka dunot nga mga sudlanan nga adunay labing gamay nga mga kahinguhaan. Gisulat namon didto ang usa ka piho nga porsyento sa datos sa produksiyon, tungod kay adunay higayon nga kopyahon ang sapa sa Kafka. Ang tanan gi-synchronize ug gi-scale didto - sa mga termino sa kapasidad ug pag-agos, ug, sa teorya, ang ubang mga butang nga managsama, kini kinahanglan nga molihok sama sa usa ka produksiyon sa mga termino sa mga sukatan. Ang tanan nga posibleng mobuto una nga giligid niini nga baroganan ug gibutang didto sulod sa pipila ka mga adlaw hangtud nga andam na. Apan siyempre, kini nga solusyon mahal, bug-at ug adunay dili zero nga gasto sa suporta.

Alexey Milovidov: Isulti ko kanimo kung unsa ang kahimtang sa pagsulay sa among mga higala gikan sa Yandex.Metrica. Ang usa ka kumpol para sa 600-usa ka butang nga mga server, ang lain alang sa 360, ug adunay ikatulo ug daghang mga pungpong. Ang palibot sa pagsulay alang sa usa niini duha ra ka shards nga adunay duha nga mga replika sa matag usa. Nganong duha ka shards? Para dili mag-inusara. Ug mga replika, usab, nga mahimong. Pipila lang ka minimum nga kantidad nga imong makaya.

Kini nga palibot sa pagsulay nagtugot kanimo sa pagsusi sa kahimsog sa mga hangyo ug kung adunay usa ka butang nga nabuak sa usa ka dako nga paagi. Apan sa kasagaran ang mga problema motungha sa usa ka bug-os nga lain-laing mga kinaiya, sa diha nga ang tanan nga mga buhat, apan adunay pipila ka gagmay nga mga kausaban sa load.

Hatagan ko ikaw usa ka pananglitan. Nakahukom kami nga mag-install ug bag-ong bersyon sa ClickHouse. Gipahimutang kini sa usa ka palibot sa pagsulay, ang mga automated nga pagsulay gipasa sa Yandex.Metrica mismo, nga nagtandi sa datos sa daan nga bersyon ug sa bag-o, nga nagpadagan sa tibuok pipeline. Ug siyempre, mga green nga pagsulay sa among CI. Kay kon dili, dili unta namo isugyot kini nga bersyon.

Maayo ra ang tanan. Nagsugod kami sa paglihok sa produksiyon. Nakadawat ko og mensahe nga ang load misaka sa makadaghang higayon sa mga graph. Gibalikbalik namon ang bersyon. Gitan-aw nako ang graph ug tan-awa: ang load nadugangan gayud sa makadaghang higayon sa panahon sa rollout, ug mikunhod pagbalik sa dihang gilukot. Dayon nagsugod kami sa pag-roll balik sa bersyon. Ug ang luwan miuswag sa samang paagi ug nahulog pagbalik sa samang paagi. Busa ang konklusyon mao kini - ang load misaka sa koneksyon sa kalkulasyon, walay ikatingala.

Unya lisud ang pagkombinsir sa mga kauban nga i-install ang bag-ong bersyon pagkahuman. Ingon ko: “Okay ra, roll out. Ipadayon ang imong mga tudlo, ang tanan molihok. Karon ang load misaka sa mga tsart, apan ang tanan maayo ra. Hunong." Sa kinatibuk-an, gibuhat namon kini, ug mao kana - ang bersyon gi-post sa site sa produksiyon. Apan halos sa matag kalkulasyon, ang susamang mga problema motungha.

Ang pagpatay nga pangutana kinahanglan nga makapatay sa mga pangutana, apan dili. Ngano man?

Usa ka user ang mianhi kanako, usa ka matang sa analista, ug naghimo sa usa ka piho nga hangyo, nga nagbutang sa akong ClickHouse cluster. Pipila ka node o tibuok cluster, depende kung asa nga replica o shard nasulod ang hangyo. Nakita nako nga ang tanan nga mga kapanguhaan sa CPU sa kini nga server naa sa estante, ang tanan pula. Sa samang higayon, ang ClickHouse mismo mitubag sa mga hangyo. Ug nagsulat ako: "Palihug ipakita kanako ang lista sa proseso, nga ang hangyo nakamugna niini nga kabuang."

Akong nakit-an kini nga hangyo ug nagsulat sa pagpatay niini. Ug nakita nako nga wala’y nahitabo. Ang akong server anaa sa estante, ang ClickHouse dayon naghatag kanako og pipila ka mga sugo, nagpakita nga ang server buhi, ug ang tanan maayo. Apan ako adunay pagkadaot sa tanan nga mga hangyo sa tiggamit, ang pagkadaot pinaagi sa pagsulod sa ClickHouse nagsugod, ug ang akong pangutana sa pagpatay wala molihok. Ngano man? Naghunahuna ko nga ang pagpatay nga pangutana kinahanglan nga makapatay sa mga pangutana, apan dili.

Karon adunay usa ka katingad-an nga tubag. Ang punto mao nga ang pagpatay nga pangutana dili pagpatay sa mga hangyo.

Ang Kill query nagbutang ug gamay nga checkbox nga gitawag ug "Gusto ko nga mapatay kini nga pangutana". Ug ang hangyo mismo, kung giproseso ang matag bloke, nagtan-aw sa kini nga bandila. Kon kini gitakda, ang hangyo mohunong sa pagtrabaho. Kini nahimo nga walay usa nga mopatay sa hangyo, siya mismo kinahanglan nga susihon ang tanan ug mohunong. Ug kini kinahanglan nga magtrabaho sa tanan nga mga kaso diin ang hangyo anaa sa usa ka block processing state. Iproseso niini ang sunod nga bloke sa datos, susihon ang bandila, ug mohunong.

Dili kini molihok sa mga kaso diin ang hangyo gibabagan sa pipila nga operasyon. Tinuod, lagmit dili kini ang imong kaso, tungod kay, sumala kanimo, naggamit kini usa ka hugpong sa mga kapanguhaan sa server. Posible nga dili kini molihok sa kaso sa external sorting ug sa ubang mga detalye. Apan sa kinatibuk-an, kini dili kinahanglan, kini usa ka bug. Ug ang bugtong butang nga akong ikatambag mao ang pag-update sa ClickHouse.

Giunsa pagkalkulo ang oras sa pagtubag ubos sa pagbasa sa load?

Adunay usa ka lamesa nga nagtipig sa mga aggregate sa butang - lainlaing mga counter. Ang gidaghanon sa mga linya mga usa ka gatos ka milyon. Posible ba nga magsalig sa usa ka matagna nga oras sa pagtubag kung imong ibubo ang 1K RPS sa 1K nga mga butang?

Sa paghukom sa konteksto, naghisgot kami bahin sa usa ka load sa pagbasa, tungod kay wala’y mga problema sa pagsulat - labing menos usa ka libo, labing menos usa ka gatos ka libo, ug usahay daghang milyon nga mga linya ang mahimong isal-ot.

Ang mga hangyo sa pagbasa lahi kaayo. Sa pinili nga 1, ang ClickHouse makahimo sa mga napulo ka libo nga mga hangyo matag segundo, mao nga bisan ang mga hangyo alang sa usa ka yawe nagkinahanglan na og pipila ka mga kapanguhaan. Ug ang ingon nga mga pangutana sa punto mahimong labi ka lisud kaysa sa pipila nga mga database nga hinungdanon nga kantidad, tungod kay alang sa matag pagbasa kinahanglan nga basahon ang data block pinaagi sa indeks. Ang among index wala maghisgot sa matag rekord, apan matag range. Kana mao, kinahanglan nimo nga basahon ang tibuuk nga sakup - kini mga 8192 nga linya sa default. Ug kinahanglan nimo nga i-decompress ang compressed data block gikan sa 64 KB ngadto sa 1 MB. Kasagaran, ang ingon nga mga pangutana sa punto gikuha gikan sa pipila ka mga millisecond. Apan kini ang labing kadali nga kapilian.

Atong sulayan ang pipila ka yano nga aritmetika. Kung imong i-multiply ang pipila ka millisecond sa usa ka libo, makakuha ka ug pipila ka segundo. Ingon nga imposible nga mapadayon ang usa ka libo nga mga hangyo matag segundo, apan sa tinuud posible, tungod kay kami adunay daghang mga cores sa processor. Busa, sa prinsipyo, ang 1000 RPS ClickHouse usahay makahupot, apan sa mubo nga mga hangyo, nga mao ang mga hangyo sa punto.

Kung kinahanglan nimo nga sukdon ang cluster sa ClickHouse pinaagi sa gidaghanon sa yano nga mga hangyo, unya girekomenda ko ang pinakasimple nga butang - dugangi ang gidaghanon sa mga replika ug ipadala ang mga hangyo sa usa ka random nga replika. Kung ang usa ka replika adunay lima ka gatos nga hangyo matag segundo, nga hingpit nga realistiko, nan ang tulo nga mga replika adunay usa ug tunga ka libo.

Usahay, siyempre, mahimo usab nimo nga i-configure ang ClickHouse alang sa labing kadaghan nga mga pagbasa sa punto. Unsa ang gikinahanglan alang niini? Ang una mao ang pagpakunhod sa granularity sa indeks. Sa parehas nga oras, dili kini kinahanglan nga mubu sa usa, apan sa basehan nga ang gidaghanon sa mga rekord sa indeks mahimong pila ka milyon o napulo ka milyon matag server. Kung ang lamesa adunay usa ka gatos ka milyon nga mga laray, nan ang 64 mahimong ibutang nga granularity.

Mahimo nimong pakunhuran ang gidak-on sa compressed block. Adunay mga setting alang niini. min compress block gidak-on, max compress block gidak-on. Mahimo nimong pakunhuran kini, i-reload ang datos, ug dayon ang mga pangutana sa punto mahimong mas paspas. Apan bisan pa, ang ClickHouse dili usa ka database nga hinungdanon nga kantidad. Ang usa ka dako nga gidaghanon sa gagmay nga mga hangyo usa ka load anti-pattern.

Kirill Shvakov: Mangayo kog tambag in case naay ordinary accounters. Kini usa ka medyo standard nga sitwasyon kung ang usa ka matang sa counter gitipigan sa ClickHouse. Ako adunay usa ka user, siya gikan sa ingon ug sa ingon nga usa ka nasud, ang uban nga mga ikatulo nga natad, ug ako kinahanglan sa pagdugang sa usa ka butang nga incrementally. Kuhaa ang MySQL, paghimo usa ka talagsaon nga yawe - sa MySQL kini usa ka doble nga yawe, ug sa PostgreSQL kini usa ka panagsumpaki - ug pagdugang usa ka dugang nga timaan. Kini molihok nga mas maayo.

Kung adunay ka gamay nga datos, wala’y daghang punto sa paggamit sa ClickHouse. Adunay mga regular nga database, ug maayo ang ilang trabaho niini.

Unsa ang pag-tweak sa ClickHouse aron daghang datos ang naa sa cache?

Atong mahanduraw ang sitwasyon - ang mga server adunay 256 GB sa RAM, sa adlaw-adlaw nga rutina ang ClickHouse nagkinahanglan og mga 60-80 GB, sa peak - hangtod sa 130. Unsa ang mahimo ug ma-tweake aron mas daghang datos ang anaa sa cache ug, sumala niana , adunay gamay nga mga pagbiyahe sa disk?

Ingon sa usa ka lagda, ang cache sa panid sa operating system usa ka maayong trabaho niini nga buluhaton. Kung ablihan ra nimo ang ibabaw, tan-awa didto nga naka-cache o libre - giingon usab kung pila ang na-cache - unya makita nimo nga ang tanan nga libre nga memorya gigamit alang sa cache. Ug kung gibasa kini nga datos, dili kini basahon gikan sa disk, apan gikan sa RAM. Sa samang higayon, makaingon ko nga ang cache gigamit nga epektibo, tungod kay kini ang compressed data nga gi-cache.

Bisan pa, kung gusto nimo nga mapadali ang pipila ka yano nga mga pangutana labi pa, posible nga makapahimo sa usa ka cache sa decompressed data sa sulod sa ClickHouse. Gitawag kini wala ma-compress nga cache. Sa config.xml configuration file, ibutang ang wala ma-compress nga gidak-on sa cache sa kantidad nga imong gikinahanglan - Gitambagan ko nga dili molapas sa katunga sa libre nga RAM, tungod kay ang uban moadto sa ilawom sa cache sa panid.

Dugang pa, adunay duha ka mga setting sa lebel sa hangyo. Unang setting - gamita ang wala ma-compress nga cache - naglakip sa paggamit niini. Girekomenda nga mahimo kini alang sa tanan nga mga hangyo, gawas sa mga bug-at, nga makabasa sa tanan nga datos ug ma-flush kini nga cache. Ug ang ikaduha nga setting sama sa labing kadaghan nga linya nga magamit sa cache. Awtomatiko nga gipugngan niini ang dagkong mga hangyo aron kini molapas sa cache.

Unsaon nako pag-configure ang storage_configuration para sa storage sa RAM?

Sa bag-ong dokumentasyon sa ClickHouse, akong gibasa ang seksyon nga may kalabutan uban sa pagtipig sa datos. Sa paghulagway adunay usa ka pananglitan nga adunay usa ka paspas nga SSD.

Naghunahuna ko kung giunsa nimo ma-configure ang parehas nga adunay init nga panumduman sa volume. Ug usa pa ka pangutana. Giunsa pagpili ang trabaho sa kini nga organisasyon sa datos, mabasa ba niini ang tibuuk nga set o ang usa ra sa disk, ug kini ba nga datos gi-compress sa memorya? Ug sa unsang paagi ang prewhere nga seksyon nagtrabaho sa ingon nga organisasyon sa datos?

Kini nga setting makaapekto sa pagtipig sa mga piraso sa datos, ug ang ilang pormat dili mausab sa bisan unsang paagi.
Atong tan-awon pag-ayo.

Mahimo nimong i-set up ang pagtipig sa datos sa RAM. Ang tanan nga gi-configure alang sa usa ka disk mao ang agianan niini. Naghimo ka usa ka partisyon sa tmpfs nga gi-mount sa pipila nga agianan sa filesystem. Ipiho kini nga agianan ingon nga agianan sa pagtipig sa datos alang sa pinakainit nga partisyon, ang mga piraso sa datos nagsugod sa pag-abot ug gisulat didto, ang tanan maayo.

Apan dili ko girekomenda nga buhaton kini tungod sa ubos nga kasaligan, bisan kung adunay labing menos tulo ka mga replika sa lainlaing mga sentro sa datos, mahimo nimo. Kung mao, ang datos ibalik. Hunahunaa nga ang server kalit nga gipalong ug gibalik. Ang seksyon gi-mount pag-usab, apan adunay usa ka haw-ang. Sa pagsugod, nakita sa ClickHouse server nga kini nga mga piraso nawala, bisan pa, sumala sa metadata sa ZooKeeper, kini kinahanglan. Gitan-aw niya kung unsang mga replika ang ilang naa, gihangyo ug gi-download kini. Sa ingon, ang datos mapasig-uli.

Niini nga pagsabut, ang pagtipig sa datos sa RAM dili sukaranan nga lahi sa pagtipig niini sa disk, tungod kay kung ang datos gisulat sa disk, kini usab una nga nahulog sa cache sa panid ug pisikal nga gisulat sa ulahi. Nagdepende kini kung giunsa ang pag-mount sa filesystem. Apan sa kaso lang, ako moingon nga ClickHouse dili fsync sa insert.

Sa kini nga kaso, ang datos sa RAM gitipigan sa parehas nga format sama sa disk. Ang pinili nga pangutana mopili sa mga tipak nga basahon sa samang paagi, mopili sa gikinahanglan nga mga han-ay sa datos sa mga tipak, ug mobasa niini. Ug ang prewhere nagtrabaho nga parehas, bisan kung ang data naa sa RAM o sa disk.

Hangtud sa unsang gidaghanon sa talagsaon nga mga kantidad ang epektibo sa Low Cardinality?

Ang Low Cardinality lisud. Nag-compile kini sa mga diksyonaryo sa datos, apan kini lokal. Una, ang mga diksyonaryo lahi alang sa matag piraso, ug ikaduha, bisan sa sulod sa usa ka piraso mahimo silang magkalainlain alang sa matag range. Kung ang gidaghanon sa mga talagsaon nga mga kantidad moabut sa usa ka threshold - usa ka milyon, sa akong hunahuna - ang diksyonaryo yano nga gilain ug usa ka bag-o ang gihimo.

Ang tubag sa kinatibuk-an: alang sa matag lokal nga range - ingnon ta, alang sa matag adlaw - sa usa ka lugar hangtod sa usa ka milyon nga talagsaon nga mga kantidad, ang Low Cardinality epektibo. Pagkahuman niana, adunay usa ka fallback, diin daghang lainlaing mga diksyonaryo ang gamiton, ug dili usa. Kini molihok sa parehas nga paagi sama sa usa ka regular nga kolum sa tipo sa hilo, tingali dili kaayo epektibo, apan wala’y grabe nga pagkadaot sa pasundayag.

Unsa ang labing kaayo nga mga gawi alang sa tibuuk nga pagpangita sa teksto sa usa ka lamesa nga adunay lima ka bilyon nga linya?

Adunay lain-laing mga tubag. Ang una mao ang pag-ingon nga ang ClickHouse dili usa ka tibuuk nga search engine sa teksto. Adunay mga espesyal nga sistema alang niini, pananglitan, Elasticsearch и Sphinx. Bisan pa, nakita nako ang daghang mga tawo nga nag-ingon nga sila mibalhin gikan sa Elasticsearch ngadto sa ClickHouse.

Nganong nahitabo kini? Gipatin-aw nila kini pinaagi sa kamatuoran nga ang Elasticsearch mihunong sa pagsagubang sa pagkarga sa pipila ka mga tomo, sugod sa mga indeks sa pagtukod. Ang mga indeks mahimong sobra ka hago, ug kung imong ibalhin ang datos sa ClickHouse, kini nahimo nga kini gitipigan sa daghang mga higayon nga labi ka episyente sa mga termino sa gidaghanon. Sa parehas nga oras, ang mga pangutana sa pagpangita sa kasagaran dili ingon nga kinahanglan nga makit-an ang pipila ka hugpong sa mga pulong sa tibuuk nga kantidad sa datos, nga gikonsiderar ang morpolohiya, apan hingpit nga lahi. Pananglitan, sa pagpangita sa katapusan nga pipila ka oras sa mga troso alang sa pipila ka sunodsunod nga bytes.

Sa kini nga kaso, naghimo ka usa ka indeks sa ClickHouse, ang una nga uma diin mao ang petsa sa oras. Ug ang kinadak-ang cutoff sa data mahimong tukma alang sa han-ay sa petsa. Sulod sa pinili nga han-ay sa petsa, ingon sa usa ka lagda, kini mao ang na posible nga sa pagbuhat sa usa ka bug-os nga teksto pagpangita bisan sa paggamit sa brute-puwersa nga paagi sa paggamit sa sama. Ang sama nga pahayag sa ClickHouse mao ang labing episyente nga sama nga pahayag nga imong makit-an. Kung makakita ka ug mas maayo, sultihi ko.

Apan sa gihapon, sama sa usa ka bug-os nga pag-scan. Ug ang bug-os nga pag-scan mahimong hinay dili lamang sa CPU, kondili usab sa disk. Kung kalit nga adunay usa ka terabyte nga datos matag adlaw, ug nangita ka usa ka pulong sa usa ka adlaw, kinahanglan nimo nga i-scan ang usa ka terabyte. Ug kini tingali sa ordinaryo nga mga hard drive, ug ingon nga usa ka resulta sila ma-load sa paagi nga dili ka makasulod niini nga server pinaagi sa SSH.

Sa kini nga kaso, andam ako nga magtanyag usa pa ka gamay nga limbong. Gikan kini sa kategorya nga eksperimento - mahimo’g molihok, o dili. Ang ClickHouse adunay mga indeks sa tibuuk nga teksto sa porma sa mga pagsala sa trigram bloom. Gisulayan na sa among mga kauban sa Arenadata kini nga mga index, ug kasagaran sila nagtrabaho sa eksakto nga katuyoan.

Aron magamit kini sa husto, kinahanglan nimo nga adunay usa ka maayo nga pagsabut sa eksakto kung giunsa kini molihok: kung unsa ang usa ka filter nga bloom sa trigram ug kung giunsa pagpili ang gidak-on niini. Makaingon ko nga makatabang sila alang sa mga pangutana sa pipila ka talagsaon nga hugpong sa mga pulong, mga substring nga panagsa ra makita sa datos. Sa kini nga kaso, ang mga subrange pilion sa mga indeks, ug gamay nga datos ang mabasa.

Ang ClickHouse bag-o lang nagdugang ug mas abante nga mga bahin para sa pagpangita sa tibuok teksto. Kini mao, una, ang pagpangita alang sa usa ka hugpong sa mga substrings sa makausa sa usa ka pass, lakip ang case-sensitive, case-insensitive, UTF-8-supported, o ASCII-only nga mga kapilian. Pilia ang labing episyente nga kinahanglan nimo.

Adunay usab pagpangita alang sa daghang mga regular nga ekspresyon sa usa ka pass. Dili nimo kinahanglan nga isulat ang X sama sa usa ka substring o X sama sa lain nga substring. Pagsulat dayon, ug ang tanan mahimo nga epektibo kutob sa mahimo.

Ikatulo, aduna nay gibanabana nga pagpangita alang sa mga regexps ug usa ka gibanabana nga pagpangita alang sa mga substrings. Kung adunay nagsulat sa usa ka pulong nga adunay typo, pangitaon kini alang sa labing kadaghan nga katugma.

Unsa ang labing kaayo nga paagi aron maorganisar ang pag-access sa ClickHouse alang sa daghang mga tiggamit?

Sultihi kami kung unsaon pag-organisar ang pag-access alang sa daghang mga konsumedor ug analista. Giunsa paghimo ang usa ka pila, unahon ang labing kadaghan nga mga pangutana, ug kung unsang mga himan?

Kung ang cluster igo nga dako, nan ang usa ka maayong solusyon mao ang pagpataas sa duha pa ka mga server, nga mahimong usa ka entry point alang sa mga analista. Kana mao, ayaw tugoti ang mga analista sa piho nga cluster shards, apan paghimo lang og duha ka walay sulod nga mga server, nga walay data, ug gibutang na ang mga katungod sa pag-access niini. Sa samang higayon, ang mga setting sa user gibalhin ngadto sa hilit nga mga server atol sa gipang-apod-apod nga mga hangyo. Kana mao, imong gi-configure ang tanan niining duha ka mga server, ug ang mga setting adunay epekto sa tibuok cluster.

Sa prinsipyo, kini nga mga server walay datos, apan ang gidaghanon sa RAM sa kanila importante kaayo alang sa pagpatuman sa mga hangyo. Ang disk mahimo usab nga gamiton alang sa temporaryo nga datos kung ang external aggregation o external sorting ma-enable.

Importante nga tan-awon ang mga setting nga nalangkit sa tanang posibleng limitasyon. Kung moadto ko karon sa Yandex.Metrics cluster isip usa ka analista ug magbutang usa ka pangutana pilia ang ihap gikan sa mga hit, unya hatagan dayon ko og eksepsiyon nga dili nako matuman ang hangyo. Ang kinatas-ang gidaghanon sa mga laray nga akong gitugotan sa pag-scan kay usa ka gatos ka bilyon, ug adunay kalim-an ka trilyon sa kinatibuk-an sa cluster sa usa ka lamesa. Kini ang una nga limitasyon.

Ingnon ta nga akong tangtangon ang limitasyon sa gidaghanon sa mga laray, ug padaganon pag-usab ang pangutana. Dayon akong makita ang mosunod nga eksepsiyon - ang setting gipalihok force index sa petsa. Dili nako madalagan ang pangutana kung wala ko magpiho sa han-ay sa petsa. Dili nimo kinahanglan nga magsalig sa mga analista aron mano-mano ang pagsulod niini. Usa ka tipikal nga kaso - usa ka han-ay sa petsa gisulat diin ang petsa sa panghitabo tali sa usa ka semana. Ug unya wala lang nila ipiho ang usa ka bracket didto, ug imbes ug kini nahimo nga o - o URL match. Kung wala’y limitasyon, mo-crawl kini sa kolum sa URL ug mag-usik sa usa ka tonelada nga kapanguhaan.

Dugang pa, ang ClickHouse adunay duha ka mga setting sa prayoridad. Ikasubo, sila primitive kaayo. Usa ra ang gitawag prayoridad. Kung ang prayoridad ≠ 0, ug ang mga hangyo nga adunay pipila nga prayoridad gipatuman, apan ang usa ka hangyo nga adunay usa ka prayoridad nga kantidad nga mas ubos, nga nagpasabut nga usa ka mas taas nga prayoridad, gipatuman, nan ang usa ka hangyo nga adunay usa ka prayoridad nga kantidad nga labaw pa sa, nga nagpasabut nga usa ka ubos nga prayoridad, mao ang yano nga gisuspinde ug dili molihok sa tanan niining panahona.

Kini usa ka lisud kaayo nga kahimtang ug dili angay alang sa mga sitwasyon diin adunay kanunay nga pagkarga sa cluster. Apan kung ikaw adunay mubo, impulse nga mga hangyo nga hinungdanon, ug ang cluster kasagaran walay pulos, kini nga setting mahimo.

Ang sunod nga priority setting gitawag Priyoridad sa OS thread. Gibutyag lamang niini ang tanan nga mga thread sa pagpatuman sa hangyo ngadto sa nindot nga bili alang sa Linux scheduler. Kini nagtrabaho sa ingon-ingon, apan nagtrabaho gihapon. Kung imong gitakda ang labing gamay nga kantidad - kini ang pinakadako nga kantidad, ug busa ang labing ubos nga prayoridad - ug gitakda ang -19 alang sa mga hangyo nga adunay taas nga prayoridad, nan ang CPU mag-ut-ot sa mga hangyo nga ubos ang prayoridad mga upat ka beses nga mas ubos kaysa sa mga taas nga prayoridad.

Kinahanglan usab nimo nga itakda ang labing taas nga oras sa pagpatuman sa pangutana - ingnon ta, lima ka minuto. Ang minimum nga pagpadali sa pagpatuman sa hangyo mao ang labing cool nga butang. Kini nga kahimtang dugay na nga naglungtad, ug gikinahanglan dili lamang sa pag-ingon nga ang ClickHouse dili mohinay, apan sa pagpugos niini.

Hunahunaa nga nag-set up ka: kung ang usa ka pangutana nagproseso nga wala’y usa ka milyon nga linya matag segundo, dili nimo mahimo kana. Gipakaulawan niini ang among maayong ngalan, among maayong database. I-ban na lang nato. Adunay tinuod nga duha ka mga setting. Ang usa gitawag min nga katulin sa pagpatuman - sa mga linya matag segundo, ug ang ikaduha gitawag nga timeout sa wala pa susihon ang min nga katulin sa pagpatuman - kinse ka segundo nga default. Kana mao, kinse ka segundos posible, ug unya, kung hinay-hinay, unya ihulog lang ang usa ka eksepsiyon - i-abort ang hangyo.

Kinahanglan ka usab nga mag-set up sa mga quota. Ang ClickHouse adunay usa ka built-in nga bahin sa quota nga nag-ihap sa konsumo sa kapanguhaan. Apan, sa kasubo, dili mga kapanguhaan nga puthaw sama sa CPU, mga disk, apan lohikal nga mga - ang gidaghanon sa giproseso nga mga hangyo, mga linya ug mga byte nga gibasa. Ug mahimo nimong i-set up, pananglitan, ang labing taas nga usa ka gatos nga hangyo sa sulod sa lima ka minuto ug usa ka libo nga hangyo matag oras.

Nganong importante kini? Tungod kay ang pipila sa mga hangyo sa analytics himuon nga mano-mano nga direkta gikan sa kliyente sa ClickHouse. Ug mamaayo ra ang tanan. Apan kung ikaw adunay mga advanced nga analista sa imong kompanya, magsulat sila usa ka script, ug mahimo’g adunay sayup sa script. Ug kini nga sayup magpahinabo sa hangyo nga ipatuman sa usa ka walay katapusan nga loop. Mao kini ang kinahanglan nga panalipdan.

Posible ba nga ihatag ang mga resulta sa usa ka hangyo sa napulo ka mga kliyente?

Kami adunay daghang mga tiggamit nga gusto nga mosulod nga adunay daghang mga hangyo sa parehas nga oras. Ang hangyo dako, sa prinsipyo kini dali nga gipatuman, apan tungod sa kamatuoran nga adunay daghang ingon nga mga hangyo sa samang higayon, kini nahimong sakit kaayo. Posible ba nga ipatuman ang parehas nga hangyo, nga miabot sa napulo ka beses sa usa ka laray, kausa, ug ihatag ang resulta sa napulo ka mga kliyente?

Ang problema mao nga wala kami mga resulta sa cache o intermediate data cache. Adunay usa ka panid nga cache sa operating system, nga magtugot kanimo nga dili magbasa pag-usab sa datos gikan sa disk, apan, sa kasubo, ang datos sa gihapon ma-decompress, deserialized ug maproseso pag-usab.

Gusto nako nga malikayan kini, pinaagi sa pag-cache sa intermediate nga datos, o pinaagi sa pag-linya sa parehas nga mga pangutana sa usa ka matang sa pila ug pagdugang usa ka cache sa mga resulta. Karon kami adunay usa ka hangyo sa pagbitad sa pag-uswag, nga nagdugang usa ka hangyo nga cache, apan alang lamang sa mga subrequest sa in ug pag-apil sa mga seksyon - nga mao, ang solusyon mas ubos.

Bisan pa, kami adunay ingon usab nga kahimtang. Ang usa ka partikular nga kanonikal nga pananglitan mao ang mga hangyo nga adunay pagination. Adunay usa ka taho, kini adunay daghang mga panid, ug adunay limitasyon sa hangyo nga 10. Unya ang parehas nga butang, apan limitahan ang 10,10. Unya laing page. Ug ang pangutana mao, nganong giihap man nato kini sa tanang panahon? Apan karon walay solusyon, ug walay paagi sa paglikay niini.

Adunay usa ka alternatibo nga solusyon nga gibutang ingon usa ka sidecar sunod sa ClickHouse - ClickHouse Proxy.

Kirill Shvakov: Ang ClickHouse Proxy adunay usa ka built-in nga rate limiter ug usa ka built-in nga cache sa mga resulta. Daghang mga setting ang gihimo didto, tungod kay ang parehas nga buluhaton nasulbad. Gitugotan ka sa proxy nga limitahan ang mga hangyo pinaagi sa pagpila niini, ug i-configure kung unsa kadugay ang kinabuhi sa cache sa hangyo. Kung ang mga hangyo parehas ra, ang Proxy maghatag kanila sa daghang mga higayon, ug moadto sa ClickHouse kausa ra.

Ang Nginx usab adunay usa ka cache sa libre nga bersyon ug kana magamit usab. Bisan ang Nginx adunay mga setting aron kung ang mga hangyo moabut sa parehas nga oras, kini mohunong sa uban hangtod makompleto ang usa. Apan naa sa ClickHouse Proxy nga ang mga setting gihimo nga labi ka maayo. Gihimo kini nga espesipiko alang sa ClickHouse, ilabi na alang niini nga mga hangyo, mao nga kini mas angay. Aw, sayon ​​ra ang pag-set up.

Unsa man ang bahin sa mga asynchronous nga operasyon ug materyal nga pagtan-aw?

Adunay ingon nga problema nga ang mga operasyon sa pag-ilis sa makina kay asynchronous - ang data una nga gisulat, unya kini nahugno. Kung ang usa ka materyal nga papan nga adunay pipila ka mga aggregate nagpuyo sa ilawom sa papan, nan ang mga duplicate isulat niini. Ug kung wala’y komplikado nga lohika, nan ang datos madoble. Unsa may mahimo niini?

Adunay usa ka klaro nga solusyon - aron ipatuman ang usa ka gatilyo sa usa ka piho nga klase sa matview sa panahon sa usa ka asynchronous nga operasyon sa pagkahugno. Aduna bay bisan unsang "mga bala sa pilak" nga nagplano nga ipatuman ang ingon nga pagpaandar?

Angayan nga masabtan kung giunsa ang pag-deduplication. Ang akong isulti wala’y kalabotan sa pangutana, apan angayan nga hinumdoman kung mahimo.

Kung gisulud sa usa ka gikopya nga lamesa, adunay deduplication sa tibuuk nga gisulud nga mga bloke. Kung imong isulod pag-usab ang parehas nga bloke nga adunay parehas nga gidaghanon sa parehas nga mga linya sa parehas nga han-ay, nan ang datos ma-deduplicated. Makuha nimo ang "Ok" agig tubag sa insert, apan usa ka batch sa datos ang isulat gyud ug dili kini doblehon.

Kini gikinahanglan alang sa kasiguroan. Kung makuha nimo ang "Ok" sa panahon sa pagsal-ot, nan ang imong data gisulud. Kung nakadawat ka usa ka sayup gikan sa ClickHouse, nan wala sila gisulud, ug kinahanglan nimo nga balikon ang pagsal-ot. Apan kung ang koneksyon nabuak sa panahon sa pagsal-ot, nan wala ka mahibal-an kung ang datos gisal-ot o wala. Ang bugtong kapilian mao ang pag-usab sa pagsal-ot pag-usab. Kung ang datos tinuod nga gisal-ut ug imong gisulod pag-usab, adunay block deduplication. Gikinahanglan kini aron malikayan ang mga duplicate.

Ug hinungdanon usab kung giunsa kini molihok alang sa materyal nga mga panan-aw. Kung ang datos gi-deduplicate kung gisulod sa main table, nan dili usab sila moadto sa materyal nga pagtan-aw.

Karon bahin sa pangutana. Ang imong sitwasyon mas komplikado tungod kay ikaw nagsulat og mga duplicate sa tagsa-tagsa nga mga linya. Kana mao, dili ang tibuuk nga pakete ang nadoble, apan ang piho nga mga linya, ug kini nahugno sa background. Sa pagkatinuod, ang mga datos mahugno sa main table, ug ang mga dili nahugno moadto sa materialized view, ug walay mahitabo sa materialized nga mga panglantaw sa panahon sa paghiusa. Tungod kay ang usa ka materyal nga pagtan-aw wala’y labi pa sa usa ka hinungdan sa sulud. Walay laing mahitabo niini sa panahon sa ubang mga operasyon.

Ug dili ko malipay dinhi. Kinahanglan lamang nga mangita alang sa usa ka piho nga solusyon alang niini nga kaso. Pananglitan, posible ba nga ilisan kini sa usa ka materyal nga pagtan-aw, ug ang pamaagi sa deduplication, tingali, molihok sa parehas nga paagi. Apan ikasubo, dili kanunay. Kung kini gihiusa, nan kini dili molihok.

Kirill Shvakov: Naa pud miy bone-building sa usa ka higayon. Adunay usa ka problema nga adunay mga ad impression, ug adunay pipila ka mga datos nga mahimo namon ipakita sa tinuud nga oras - kini mga impresyon lamang. Panagsa ra sila ma-duplicate, apan kung buhaton nila, mahugno gihapon namo sila. Ug adunay mga butang nga dili madoble - mga pag-klik ug kini nga tibuuk nga istorya. Apan gusto ko usab nga ipakita dayon sila.

Giunsa gihimo ang materyal nga mga panan-aw? Adunay mga pagtan-aw kung diin kini gisulat direkta - adunay usa ka rekord sa hilaw nga datos, ug kini gisulat sa mga panan-aw. Didto, sa usa ka punto, ang datos dili kaayo husto, kini gidoble, ug uban pa. Ug adunay ikaduha nga bahin sa lamesa, diin sila parehas nga hitsura sa mga materyal nga pagtan-aw, nga mao, parehas sila sa istruktura. Kausa sa usa ka panahon, among gikalkula pag-usab ang datos, pag-ihap sa datos nga walay mga duplicate, pagsulat sa mga lamesa.

Nag-agi kami sa API - dili kini molihok sa ClickHouse pinaagi sa kamot. Ug ang hitsura sa API: kung naa nako ang petsa sa katapusan nga pagdugang sa lamesa, diin gigarantiyahan nga ang husto nga datos nakalkulo na, ug naghangyo kini sa usa ka lamesa ug sa lain nga lamesa. Gikan sa usa ka hangyo nagpili hangtod sa usa ka piho nga oras, ug gikan sa lain makuha ang wala pa makalkula. Ug kini molihok, apan dili pinaagi sa usa ka ClickHouse.

Kung ikaw adunay usa ka matang sa API - alang sa mga analista, alang sa mga tiggamit - nan, sa prinsipyo, kini usa ka kapilian. Kanunay ka mag-ihap, kanunay mag-ihap. Mahimo kini kausa sa usa ka adlaw o sa ubang oras. Gipili nimo para sa imong kaugalingon ang range nga dili nimo kinahanglan ug dili kritikal.

Ang ClickHouse adunay daghang mga troso. Giunsa nako makita ang tanan nga mahitabo sa server sa kadali?

Ang ClickHouse adunay daghan kaayo nga lainlaing mga troso, ug kini nga gidaghanon nagkadaghan. Sa bag-ong mga bersyon, ang uban niini gi-enable pa pinaagi sa default, sa mas daan nga mga bersyon kinahanglan nga ma-enable kung mag-update. Apan, nagkadaghan sila. Gusto nako nga sa katapusan makita kung unsa ang nahitabo karon sa akong server, tingali sa pipila ka summary dashboard.

Naa ka ba sa ClickHouse team, o sa mga team sa imong mga higala, nga nagsuporta sa pipila ka gamit sa andam nga mga dashboard nga magpakita niini nga mga troso isip usa ka nahuman nga produkto? Sa katapusan, ang pagtan-aw lang sa mga troso sa ClickHouse maayo. Apan bugnaw kaayo kung giandam na kini sa porma sa usa ka dashboard. Malipay ko niini.

Adunay mga dashboard, bisan kung dili kini estandard. Adunay kami mga 60 ka mga team sa among kompanya nga naggamit sa ClickHouse, ug ang labing katingad-an nga butang mao nga daghan kanila adunay mga dashboard nga ilang gihimo sa ilang kaugalingon, ug medyo lahi. Ang ubang mga team naggamit sa internal nga pag-instalar sa Yandex.Cloud. Adunay pipila ka andam nga gihimo nga mga taho, bisan kung dili tanan kinahanglan. Ang uban adunay ila.

Ang akong mga kauban gikan sa Metrica adunay ilang kaugalingon nga dashboard sa Grafana, ug ako adunay ako alang sa ilang kaugalingon nga cluster. Nagtan-aw ko sa mga butang sama sa cache hit para sa serif cache. Ug ang labi ka lisud mao nga mogamit kami lainlaing mga himan. Gibuhat nako ang akong dashboard sa usa ka karaan nga himan nga gitawag og Graphite-web. Siya hingpit nga mangil-ad. Ug gigamit gihapon nako kini nga paagi, bisan kung ang Grafana tingali labi ka kombenyente ug labi ka matahum.

Ang sukaranan nga butang sa mga dashboard parehas. Kini ang mga sukatan sa sistema alang sa cluster: CPU, memorya, disk, network. Ang uban mao ang gidaghanon sa dungan nga mga hangyo, ang gidaghanon sa dungan nga paghiusa, ang gidaghanon sa mga hangyo kada segundo, ang kinatas-ang gidaghanon sa mga tipak alang sa MergeTree nga mga partisyon sa lamesa, ang replication lag, ang gidak-on sa replication queue, ang gidaghanon sa mga laray nga gisal-ot kada segundo, ang gidaghanon sa mga bloke nga gisulod matag segundo. Kini ang tanan nga nakuha dili gikan sa mga troso, apan gikan sa mga sukatan.

Vladimir Kolobaev: Alexey, gusto ko nga matul-id gamay. Adunay Grafana. Ang Grafana adunay usa ka tinubdan sa datos nga mao ang ClickHouse. Kana mao, makahimo ako og mga hangyo gikan sa Grafana direkta ngadto sa ClickHouse. Ang ClickHouse adunay usa ka lamesa nga adunay mga troso, parehas kini alang sa tanan. Ingon usa ka sangputanan, gusto nako nga ma-access kini nga talaan sa log sa Grafana ug makita ang mga hangyo nga gipadapat sa akong server. Nindot kaayo nga adunay ingon nga dashboard.

Ako mismo ang nagbisikleta niini. Apan ako adunay usa ka pangutana - kung kini tanan na-standardize, ug ang Grafana gigamit sa tanan, nganong ang Yandex walay ingon nga opisyal nga dashboard?

Kirill Shvakov: Sa tinuud, ang datasource nga gisuportahan karon sa ClickHouse sa Altinity. Ug gusto ko lang maghatag usa ka vector kung asa magkubkob ug kinsa ang iduso. Mahimo nimo silang pangutan-on, tungod kay ang Yandex naghimo gihapon sa ClickHouse, ug dili ang istorya sa palibot niini. Ang Altinity mao ang nag-unang kompanya nga karon nagpasiugda sa ClickHouse. Dili nila siya biyaan, apan suportahan siya. Tungod kay sa prinsipyo, aron ma-upload ang usa ka dashboard sa website sa Grafana, kinahanglan ra nimo nga magparehistro ug i-upload kini - wala’y partikular nga mga problema.

Alexey Milovidov: Sa miaging tuig, ang ClickHouse nagdugang daghang mga bahin sa pag-profile sa pangutana. Adunay mga sukatan alang sa matag hangyo sa paggamit sa kapanguhaan. Ug bag-o pa, usa ka mas ubos nga lebel nga profiler sa pangutana ang gidugang aron makita kung diin ang pangutana naggasto matag millisecond. Apan aron magamit kini nga pag-andar, kinahanglan nako nga ablihan ang kliyente sa console ug i-type ang usa ka pangutana nga kanunay nakong nakalimtan. Gitipigan nako kini sa usa ka dapit ug kanunay nga nakalimot kung asa eksakto.

Nanghinaut ko nga adunay usa ka himan nga nag-ingon lang - ania ang imong bug-at nga mga pangutana, gi-grupo sa klase sa pangutana. Gi-klik nako ang usa, ug sila mosulti kanako nga kini bug-at busa. Karon walay ingon nga solusyon. Ug kini katingad-an nga kung ang mga tawo mangutana kanako: "Sultihi ako, aduna bay andam nga mga dashboard alang sa Grafana?" gikan sa Kostyan. Wala ko kahibalo kung unsa kini, wala nako gigamit kini sa akong kaugalingon."

Giunsa ang pag-impluwensya sa merdzhi aron ang server dili mahulog sa OOM?

Ako adunay usa ka lamesa, adunay usa lamang ka partition sa lamesa, kini mao ang ReplacingMergeTree. Gisulatan nako ang datos niini sulod sa upat ka tuig. Kinahanglan ko nga maghimo usa ka pagbag-o niini ug pagtangtang sa pipila nga mga datos.

Gibuhat nako kini, ug sa proseso sa pagproseso niini nga hangyo, ang tanan nga memorya sa tanan nga mga server sa cluster gikaon, ug ang tanan nga mga server sa cluster miadto sa OOM nga magkauban. Unya silang tanan mitindog sa tingub, nagsugod sa paghiusa sa sama nga operasyon, kini nga data block, ug pag-usab nahulog ngadto sa OOM. Unya mibangon sila pag-usab ug nangatumba pag-usab. Ug kini nga butang wala mohunong.

Unya kini nahimo nga kini sa tinuud usa ka bug nga giayo sa mga lalaki. Nindot kaayo ni, salamat kaayo. Apan ang nahabilin nagpabilin. Ug karon, kung maghunahuna ko bahin sa panginahanglan nga maghimo usa ka piho nga paghiusa sa lamesa, naa koy pangutana - ngano nga dili nako makuha kini nga mga panagsama ug bisan unsang paagiha maimpluwensyahan sila? Pananglitan, limitahan sila sa kantidad sa RAM nga gikinahanglan, o, sa prinsipyo, pinaagi sa ilang gidaghanon, nga magproseso niining partikular nga lamesa.

Naa koy lamesa nga gitawag ug "Metrics", palihog iproseso kini para nako sa duha ka sapa. Dili kinahanglan nga maghimo og napulo o lima ka mga panagsama nga managsama, buhata kini sa duha. Sa akong hunahuna nga sa duha adunay ako igo nga memorya, apan dili kini igo aron maproseso ang napulo. Nganong nagpabilin ang kahadlok? Tungod kay ang lamesa nagkadako, ug sa umaabot makasugat ako og usa ka sitwasyon nga, sa prinsipyo, dili na tungod sa usa ka bug, apan tungod sa kamatuoran nga ang mga datos mausab sa ingon ka dako nga kantidad nga ako wala nay igong memorya sa ang server. Ug unya ang server mahulog sa OOM sa panahon sa paghiusa. Dugang pa, mahimo nakong kanselahon ang mutation, apan ang paghiusa wala na.

Nahibal-an nimo, kung maghiusa, ang server dili mahulog sa OOM, tungod kay kung maghiusa, ang kantidad sa RAM gigamit lamang alang sa usa ka gamay nga sakup sa datos. Busa ang tanan mahimong maayo bisan unsa pa ang gidaghanon sa datos.

Vladimir Kolobaev: Maayo. Dinhi ang higayon mao nga pagkahuman sa paghimo sa usa ka pag-ayo sa bug, nag-download ako usa ka bag-ong bersyon alang sa akong kaugalingon, ug sa lain nga lamesa, mas gamay, diin adunay daghang mga partisyon, naghimo ako usa ka parehas nga operasyon. Ug sa panahon sa paghiusa, mga 100 GB sa RAM ang gisunog sa server. Ako adunay 150 ka busy, mikaon sa 100, ug adunay nahabilin nga 50 GB nga bintana, mao nga wala ako nahulog sa OOM.

Unsa ang karon nga nanalipod kanako gikan sa pagkahulog sa OOM kung kini nag-usik sa 100 GB nga RAM? Unsa ang buhaton sa usa ka sitwasyon kung kalit nga ang RAM sa merdzh nahutdan?

Alexey Milovidov: Adunay ingon nga problema nga ang pagkonsumo sa RAM dili limitado sa merdzhi. Ug ang ikaduha nga problema mao nga kung ang usa ka panagsama gi-assign, nan kini kinahanglan nga ipatuman, tungod kay kini gisulat sa replication log. Ang replication log mao ang mga aksyon nga gikinahanglan aron madala ang replika sa usa ka makanunayon nga kahimtang. Kung dili nimo buhaton ang mga manual manipulasyon nga kini nga replikasyon nga log mobalik, ang paghiusa kinahanglan nga himuon sa usa ka paagi o lain.

Siyempre, dili kini sobra nga adunay limitasyon sa RAM, nga "sa kaso lang" nanalipod batok sa OOM. Dili kini makatabang sa merge run, magsugod kini pag-usab, makaabot sa pipila ka threshold, ihulog ang usa ka eksepsiyon, ug dayon magsugod pag-usab - walay maayo nga moabut niini. Apan sa prinsipyo, mapuslanon nga ipaila kini nga pagdili.

Sa unsang paagi mahitabo ang pagpalambo sa Golang driver alang sa ClickHouse?

Ang drayber sa Golang nga gisulat ni Kirill Shvakov opisyal na nga gisuportahan sa ClickHouse team. Siya sa ClickHouse repository, dako na siya ug tinuod.

Usa ka gamay nga nota. Adunay usa ka talagsaon ug minahal nga tipiganan sa mga normal nga porma sa walay katapusan nga han-ay - kini mao ang Vertica. Aduna usab silay kaugalingong opisyal nga drayber sa python, nga gimintinar sa mga developers sa Vertica. Ug sa daghang mga higayon nahitabo nga ang mga bersyon sa pagtipig ug ang mga bersyon sa drayber kalit nga nagbulag, ug ang drayber mihunong sa pagtrabaho sa usa ka punto. Ug ang ikaduhang punto. Ang suporta alang sa kini nga opisyal nga drayber, alang kanako, gipadayon sa sistema nga "nipple" - nagsulat ka usa ka isyu sa kanila, ug kini nagbitay hangtod sa hangtod.

Naa koy duha ka pangutana. Karon ang drayber sa Golang ni Kirill usa ka halos default nga paagi sa pagpakigsulti gikan sa Golang sa ClickHouse. Gawas lang kung adunay nakigsulti pinaagi sa http interface, tungod kay ganahan kaayo siya. Sa unsang paagi maugmad kini nga drayber? Ma-synchronize ba kini sa pipila ka mga pagbag-o sa pagbag-o sa repository mismo? Ug unsa ang pamaagi sa pagkonsiderar sa isyu?

Kirill Shvakov: Ang una mao kung giunsa ang tanan nga gihan-ay sa bureaucratically. Kini nga punto wala pa gihisgutan, mao nga wala akoy ikatubag.

Aron matubag ang pangutana bahin sa isyu, kinahanglan namon ang gamay nga kasaysayan sa drayber. Nagtrabaho ko sa usa ka kompanya nga adunay daghang datos. Kini usa ka spinner sa advertising nga adunay daghang daghang mga panghitabo nga kinahanglan itago bisan diin. Ug sa usa ka punto ang ClickHouse nagpakita. Gibubo namo ang datos niini, ug sa sinugdan maayo ang tanan, apan nahulog ang ClickHouse. Nianang panahona, nakahukom mi nga dili na namo kini kinahanglan.

Usa ka tuig ang milabay, mibalik kami sa ideya sa paggamit sa ClickHouse, ug kinahanglan namong isulat ang datos didto. Ang input mao kini - ang puthaw huyang kaayo, adunay pipila ka mga kapanguhaan. Apan kanunay kaming nagtrabaho niini nga paagi, ug busa among gitan-aw ang lumad nga protocol.

Tungod kay nagtrabaho kami sa Go, klaro nga kinahanglan namon ang usa ka drayber sa Go. Gibuhat nako kini halos tibuok panahon - kini ang akong buluhaton sa trabaho. Hangtud sa usa ka punto, among gipasiugda kini, ug sa prinsipyo, walay usa nga nagdahom nga laing tawo gawas kanamo ang mogamit niini. Dayon ang CloudFlare miabut uban sa eksaktong sama nga problema, ug sa makadiyot kami nagtrabaho nga hapsay kaayo uban kanila, tungod kay sila adunay sama nga mga buluhaton. Ug gibuhat namo kini sa ClickHouse mismo ug sa drayber.

Sa usa ka punto, mihunong lang ako sa pagbuhat niini, tungod kay ang akong kalihokan sa mga termino sa ClickHouse ug sa trabaho nausab og gamay. Busa ang mga isyu dili sirado. Matag karon ug unya, ang mga tawo nga nanginahanglan usa ka butang mismo mopasalig sa repositoryo. Dayon akong tan-awon ang hangyo sa pagbitad ug usahay ako mag-edit sa usa ka butang sa akong kaugalingon, apan kini panagsa ra mahitabo.

Gusto ko mubalik sa driver. Pipila ka tuig ang milabay, sa dihang nagsugod kining tibuok nga butang, ang ClickHouse lahi usab ug adunay lain-laing mga bahin. Karon naa nay pagsabot unsaon pag-remake sa driver para maayo. Kung mahitabo kini, ang bersyon 2 dili magkatugma bisan pa tungod sa natipon nga mga saklay.

Wala ko kabalo unsaon pag arrange ani. Wala koy daghang oras sa akong kaugalingon. Kung ang pipila ka mga tawo makahuman sa drayber, mahimo nako silang tabangan ug sultihan sila kung unsa ang buhaton. Apan kini ang aktibong partisipasyon sa Yandex sa pagpalambo sa proyekto nga wala pa mahisgutan sa bisan unsang paagi.

Alexey Milovidov: Sa pagkatinuod, wala pay burukrasya bahin sa maong mga drayber. Ang bugtong butang mao nga sila gibalhin sa usa ka opisyal nga organisasyon, nga mao, kini nga drayber giila nga opisyal nga default nga solusyon alang sa Go. Adunay uban nga mga drayber, apan sila naglainlain.

Wala miy kalamboan niining mga drayber sa sulod. Ang pangutana mao kung maka-hire ba kita og usa ka indibidwal, dili espesipiko alang niini nga drayber, apan alang sa pagpalambo sa tanan nga mga drayber sa komunidad, o makakita ba kita og usa ka tawo sa gawas.

Ang gawas nga diksyonaryo wala ipataas pagkahuman sa pag-reboot gamit ang lazy_load nga gipagana. Unsay buhaton?

Gipaandar namo ang lazy_load setting, ug human ma-restart ang server, ang diksyonaryo mismo dili mobangon. Gipataas lamang kini human maka-access ang user niini nga diksyonaryo. Ug kini naghulog sa usa ka sayup sa una nga tawag. Posible ba nga sa usa ka paagi awtomatiko nga mag-load sa mga diksyonaryo gamit ang ClickHouse, o kinahanglan nimo kanunay nga kontrolon ang ilang kaandam sa imong kaugalingon aron ang mga tiggamit dili makadawat mga sayup?

Tingali kita adunay usa ka daan nga bersyon sa ClickHouse, mao nga ang diksyonaryo dili awtomatikong gikarga. Mahimo ba kini?

Una, ang mga diksyonaryo mahimong mapugos sa pagkarga gamit ang pangutana pag-reload sa mga diksyonaryo sa sistema. Ikaduha, bahin sa sayup - kung ang diksyonaryo na-load na, nan ang mga pangutana molihok sa datos nga na-load. Kung ang diksyonaryo wala pa makarga, nan kini i-load dayon sa panahon sa hangyo.

Alang sa bug-at nga mga diksyonaryo, kini dili kaayo kombenyente. Pananglitan, kinahanglan nimo nga magkuha usa ka milyon nga mga laray gikan sa MySQL. Adunay naghimo sa usa ka yano nga pagpili, apan kini nga pinili maghulat alang sa parehas nga milyon nga mga laray. Adunay duha ka solusyon dinhi. Ang una mao ang pagpalong sa lazy_load. Ang ikaduha mao ang pagbangon sa server, sa dili pa i-on ang load niini, buhata diksyonaryo sa pag-reload sa sistema o ipatuman lang ang usa ka pangutana nga naggamit sa usa ka diksyonaryo. Unya ang diksyonaryo ikarga. Kinahanglan nimo nga kontrolon ang pagkaanaa sa mga diksyonaryo gamit ang lazy_load setting nga gipagana, tungod kay ang ClickHouse dili awtomatiko nga makuha kini.

Ang tubag sa katapusan nga pangutana mao ang daan nga bersyon, o kinahanglan nga i-debug.

Unsa man ang bahin sa kamatuoran nga ang mga diksyonaryo sa pag-reload sa sistema wala magkarga sa bisan unsang daghang mga diksyonaryo kung bisan usa kanila nahagsa nga adunay sayup?

Adunay lain nga pangutana bahin sa mga diksyonaryo sa pag-reload sa sistema. Kami adunay duha ka diksyonaryo - ang usa wala gikarga, ang ikaduha gikarga. Ang mga diksyonaryo sa pag-reload sa sistema sa kini nga kaso wala magkarga sa bisan unsang diksyonaryo, ug kinahanglan nimo nga point-to-point load ang usa ka piho nga ngalan gamit ang diksyonaryo sa pag-reload sa sistema. May kalabotan ba kini sa bersyon sa ClickHouse?

Gusto nako palihog. Kini nga kinaiya nausab. Busa, kon imong i-update ang ClickHouse, kini usab mausab. Kung dili ka kontento sa karon nga pamatasan pag-reload sa mga diksyonaryo sa sistema, update, ug manghinaut kita nga kini mausab alang sa mas maayo.

Adunay usa ka paagi aron ma-configure ang mga detalye sa config sa ClickHouse, apan dili kini suga sa mga sayup?

Ang sunod nga pangutana bahin sa mga sayup nga may kalabotan sa diksyonaryo, nga mao ang mga detalye. Girehistro namo ang mga detalye sa koneksyon sa ClickHouse config sa diksyonaryo, ug sa kaso sa usa ka sayup, among nadawat kini nga mga detalye ug ang password isip tubag.

Nasulbad namo kini nga sayop pinaagi sa pagdugang sa mga detalye sa ODBC driver config. Aduna bay paagi sa pag-configure sa mga detalye sa ClickHouse config, apan dili aron ipakita kini nga mga detalye sa mga sayup?

Dinhi, ang solusyon mao gyud - aron ipiho kini nga mga kredensyal sa odbc.ini, ug sa ClickHouse mismo, ipiho lamang ang Ngalan sa Tinubdan sa Data sa ODBC. Dili kini mahitabo alang sa ubang mga tinubdan sa diksyonaryo - dili alang sa usa ka diksyonaryo nga adunay MySQL, o alang sa uban, dili nimo makita ang password sa mensahe sa sayup. Alang sa ODBC, tan-awon ko usab - kung adunay ingon niana, kinahanglan nimo nga tangtangon kini.

Bonus: mga background alang sa Zuma gikan sa mga panag-uban

Pinaagi sa pag-klik sa litrato alang sa labing makanunayon nga mga magbabasa, maablihan ang mga background sa bonus gikan sa mga panagtapok. Gipalong ang kalayo kauban ang mga maskot sa teknolohiya ni Avito, nakigsulti sa mga kauban gikan sa kwarto sa tagdumala sa sistema o usa ka club sa kompyuter sa karaan nga eskwelahan, ug nagpahigayon adlaw-adlaw sa ilawom sa taytayan batok sa backdrop sa graffiti.

ClickHouse alang sa mga advanced nga tiggamit sa mga pangutana ug tubag

Source: www.habr.com

Idugang sa usa ka comment