ClickHouse per utilizatori avanzati in dumande è risposte

In April, l'ingegneri Avito si sò riuniti per riunioni in linea cù Alexey Milovidov, u principale sviluppatore di ClickHouse, è Kirill Shvakov, un sviluppatore Golang da Integros. Avemu discututu cumu usemu u sistema di gestione di basa di dati è chì difficultà avemu affruntà.

Basatu nantu à a riunione, avemu riunitu un articulu cù e risposte di l'esperti à e nostre dumande è di l'audienza nantu à i backups, u redistribuzione di dati, i dizionari esterni, u driver Golang è l'aghjurnamenti di a versione ClickHouse. Pò esse utile per i sviluppatori chì sò digià travagliatu attivamente cù u DBMS Yandex è sò interessati à u so presente è futuru. E risposte di Aleksey Milovidov per difettu, salvu chì altrimenti nutate.

Attenti, ci hè assai testu sottu u cut. Speremu chì u cuntenutu cù e dumande vi aiuterà à navigà.

ClickHouse per utilizatori avanzati in dumande è risposte

Cuntenuti

Se ùn vulete micca leghje u testu, pudete fighjà l'arregistramentu di riunioni nant'à u nostru canale youtube. Timestamps sò in u primu cumentu sottu u video.

ClickHouse hè constantemente aghjurnatu, ma i nostri dati ùn sò micca. Chì fà cun ellu?

ClickHouse hè constantemente aghjurnata, è i nostri dati chì sò stati trattati da ottimisazione finali ùn sò micca aghjurnati è sò in una copia di salvezza.

Suppone chì avemu avutu qualchì problema è i dati sò stati persi. Avemu decisu di restaurà, è hè statu chì i vechji partizioni, chì sò guardati in i servitori di salvezza, sò assai diffirenti da a versione di ClickHouse attualmente utilizata. Cosa da fà in una tale situazione, è hè pussibule?

A situazione in quale avete restauratu dati da una copia di salvezza in u vechju formatu, ma nantu à a nova versione ùn sò micca cunnessi, hè impussibile. Facemu sicuru chì u furmatu di dati in ClickHouse ferma sempre retrocompatibile. Questu hè assai più impurtante chè a cumpatibilità retrocede in a funziunalità se u cumpurtamentu di qualchì funzione raramente usata hà cambiatu. I dati chì hè guardatu nantu à u discu, a nova versione di ClickHouse deve esse sempre capaci di leghje. Questu hè a lege.

Chì sò e migliori pratiche attuali per a copia di salvezza di dati da ClickHouse?

Cumu fà una copia di salvezza, tenendu in contu chì avemu ottimisate l'operazioni finali, una basa di dati enormosa di terabytes, è dati chì sò aghjurnati, dicemu, per l'ultimi trè ghjorni, è dopu ùn ci hè micca prucedura?

Pudemu mette inseme a nostra propria suluzione è scrive nantu à a testa: cullà sti backups in tale è cusì. Forsi ùn avete micca bisognu di crutch nunda, è a bicicletta hè stata inventata assai tempu fà?

Cuminciamu cù e migliori pratiche. I mo culleghi sempre cunsiglianu in risposta à e dumande nantu à e copie di salvezza per ricurdà di u serviziu Yandex.Cloud, induve stu compitu hè digià statu risoltu. Allora aduprate se pussibule.

Ùn ci hè micca una suluzione cumpleta, centu per centu integrata in ClickHouse, per backups. Ci sò qualchi spazii chì pudete aduprà. Per ottene una suluzione cumpleta, vi tuccherà à tinker un pocu manually, o fà wrappers in forma di scripts.

Cumincià cù e suluzioni più simplici è finisce cù i più sufisticati, secondu a quantità di dati è a dimensione di u cluster. U più grande u cluster, u più difficiule a suluzione diventa.

Se a tabella di dati occupa solu uni pochi gigabytes, a copia di salvezza pò esse fatta cusì:

  1. Salvà a definizione di e tavule, vale à dì metadata - mostra create table.
  2. Fate un dump cù u cliente ClickHouse - selezziunà * da a tavula à schedariu. Per automaticamente, riceverete un schedariu in u formatu TabSeparated. Se vulete esse più efficace, pudete aduprà u furmatu Nativu.

Se a quantità di dati hè più grande, a copia di salvezza hà da piglià più tempu è assai spaziu. Questu hè chjamatu una copia di salvezza logica, ùn hè micca ligata à u furmatu di dati ClickHouse. S'ellu hè, allora in un pizzicu pudete piglià una copia di salvezza è caricala in MySQL per a ricuperazione.

Per i casi più avanzati, ClickHouse hà una capacità integrata per creà una snapshot di partizioni in u sistema di fugliale locale. Questa funzione hè dispunibule cum'è una dumanda. mudificà a partizione di congelazione di a tavola. O simpricimenti cambià a tavula congelata hè una snapshot di tutta a tavola.

A snapshot serà creata coherente per una tavola nantu à un shard, vale à dì, hè impussibile di creà una snapshot coherente di tuttu u cluster in questu modu. Ma per a maiò parte di i travaglii, ùn ci hè micca una tale necessità, è hè abbastanza per eseguisce una dumanda nantu à ogni shard è uttene una snapshot coherente. Hè creatu in forma di hardlinks è per quessa ùn occupa micca spaziu supplementu. Allora copiate sta snapshot à u servitore di salvezza o à l'almacenamiento chì utilizate per a copia di salvezza.

Risturà un tali salvezza hè abbastanza faciuli. Prima, create tavule secondu e definizioni di tavule esistenti. In seguitu, copiate l'istantanee di partizioni salvate in Directory-Detached per queste tabelle è eseguite a quistione. aghjunghje a partizione. Sta suluzione hè abbastanza adattatu per i più serii quantità di dati.

Calchì volta avete bisognu di qualcosa ancu più cool - in i casi induve avete decine o ancu centinaie di terabytes in ogni servitore è centinaie di servitori. Ci hè una suluzione quì chì aghju spiatu da i culleghi di Yandex.Metrica. Ùn aghju micca cunsigliatu à tutti - leghjite è decide per voi stessu s'ellu hè adattatu o micca.

Prima avete bisognu di creà parechji servitori cù grandi scaffali di discu. In seguitu, suscitate parechji servitori ClickHouse nantu à questi servitori è cunfigurà elli in modu chì travaglianu cum'è una altra replica per i stessi shards. E poi aduprate u sistema di fugliale in questi servitori o qualchì strumentu chì vi permette di creà snapshots. Ci sò dui opzioni quì. A prima opzione hè LVM snapshots, a seconda opzione hè ZFS in Linux.

Dopu quì, ogni ghjornu avete bisognu di creà una snapshot, si mentirà è piglià un pocu spaziu. Naturalmente, se i dati cambianu, dopu à u tempu a quantità di spaziu aumenterà. Pudete ottene sta snapshot in ogni mumentu è risturà i dati, una decisione cusì strana. In più, avete sempre bisognu di limità queste rèpliche in a cunfigurazione per ùn pruvà micca di diventà capi.

Serà pussibule urganizà un backlog cuntrullatu di rèpliche in i fusti ?

Quist'annu avete pensatu à fà fusti in ClickHouse. Serà pussibule urganizà un backlog cuntrullatu di rèpliche in elli? Vulemu aduprà per prutegge noi stessi da scenarii negativi cù alterazioni è altri cambiamenti.

Hè pussibule di fà qualchì tipu di roll back per altera? Per esempiu, in un fustu esistente, pigliate è dicenu chì finu à questu mumentu, applicà i cambiamenti, è da questu mumentu, cessate di applicà i cambiamenti?

Se un cumandamentu hè ghjuntu à u nostru cluster è u rumpiu, allora avemu una rèplica cundizionale cù una ora di ritardu, induve pudemu dì chì l'utilicemu in u mumentu, ma ùn avemu micca applicà i cambiamenti in questu per l'ultimi deci minuti?

Per principià, nantu à u backlog cuntrullatu di repliche. Ci era una tale dumanda da l'utilizatori, è avemu creatu un prublema in Github cù una dumanda: "Se qualchissia hà bisognu di questu, mette un like, mette un core". Nimu hà scumessa, è u prublema hè stata chjusa. Tuttavia, pudete digià uttene sta opportunità cunfittendu ClickHouse. True, solu partendu da a versione 20.3.

ClickHouse unisce constantemente i dati in fondo - fusione. Quandu una fusione hè fatta, qualchì settore di pezzi di dati hè rimpiazzatu cù un pezzu più grande. À u listessu tempu, pezzi di dati chì eranu prima cuntinueghjanu à stà nantu à u discu per qualchì tempu.

Prima, cuntinueghjanu à esse guardatu finu à chì ci sò e dumande selezziunate chì l'utilizanu, per assicurà l'operazione non-bloccante. E dumande selezziunate sò leghjite in silenziu da i vechji pezzi.

Siconda, ci hè ancu un sogliu di u tempu - vechji pezzi di dati si trovanu nantu à u discu per ottu minuti. Questi ottu minuti ponu esse persunalizati è trasfurmati ancu in un ghjornu. Questu custarà u spaziu di discu: secondu u flussu di dati, risulterà chì in l'ultimu ghjornu i dati ùn solu duppià, ma ponu diventà cinque volte più. Ma in casu di un prublema seriu, pudete piantà u servitore ClickHouse è trattà cù tuttu.

Avà a quistione hè cumu si prutegge da l'alterazioni. Vale a pena guardà più profonda quì, perchè in e versioni più vechje di ClickHouse, l'alter hà travagliatu in tale manera chì solu cambiava direttamente i pezzi. Ci hè un pezzu di dati cù certi schedari, è facemu, per esempiu, mudificà a colonna di goccia. Allora sta colonna hè fisicamente eliminata da tutti i pezzi.

Ma da a versione 20.3, u mecanismu di alterazione hè stata completamente cambiata, è avà i pezzi di dati sò sempre immutable. Ùn cambianu micca in tuttu - l'alterazioni avà travaglianu assai in u listessu modu cum'è fusioni. Invece di cambià un pezzu in u locu, creamu un novu. In u novu chunk, i schedarii chì ùn anu micca cambiatu diventanu hardlinks, è se sguassemu una colonna, serà simplicemente mancante in u novu chunk. U vechju pezzu serà sguassatu per automaticamente dopu à ottu minuti, è quì pudete aghjustà i paràmetri citati sopra.

U stessu passa per l'alterazioni cum'è mutazioni. Quandu fate alterà sguassà o cambia l'aghjurnamentu, ùn cambia micca u pezzu, ma crea un novu. E poi sguassate u vechju.

E se a struttura di a tavula hà cambiatu?

Cumu crià una copia di salvezza chì hè stata fatta cù u vechju schema? È a seconda quistione hè nantu à u casu cù snapshots è arnesi di sistema di schedari. Btrfs hè adattatu quì invece di ZFS in Linux LVM?

Sè vo fate aghjunghje a partizione partizioni cù una struttura sfarente, allura ClickHouse vi dicerà chì questu ùn hè micca pussibule. A suluzione hè questu. U primu hè di creà una tavola temporale di u tipu MergeTree cù l'antica struttura, attaccà e dati quì usendu attache, è emette una dumanda di alterazione. Allora pudete sia copià o trasfiriri sti dati è aghjunghje dinò, o aduprà a dumanda mudificà a partizione di muvimentu di a tavola.

Avà a seconda quistione hè s'ellu hè pussibule aduprà Btrfs. Per principianti, sè vo avete LVM, allora i snapshots LVM sò abbastanza, è u sistema di fugliale pò esse ext4, ùn importa micca. Cù Btrts, tuttu dipende di a vostra sperienza cun ella. Questu hè un sistema di schedariu maturu, ma ci sò ancu alcuni suspetti nantu à cumu tuttu funziona in pratica in un scenariu particulari. Ùn vi cunsigliu micca di utilizà questu, salvu chì avete Btrfs in produzzione.

Chì sò e migliori pratiche attuali per a redistribuzione di dati?

A quistione di u resharding hè cumplessa è multifaceted. Quì pudete risponde à parechje opzioni à una volta. Pudete andà da un latu è dicendu questu - ùn ci hè micca una opzione di resharding integrata in ClickHouse. Ma aghju paura chì sta risposta ùn cunvene à nimu. Dunque, pudete andà da l'altra parte è dì chì ClickHouse hà parechje manere di reshard dati.

Se u cluster esce da u spaziu o ùn pò micca trattà a carica, aghjunghje novi servitori. Ma questi servitori sò vioti per difettu, ùn ci hè micca dati nantu à elli, ùn ci hè micca carica. Avete bisognu di trasfurmà e dati in modu chì si sparghje in modu uniforme nantu à u novu cluster più grande.

U primu modu per fà questu hè di copià una parte di e partizioni à novi servitori utilizendu a quistione mudificà a partizione di recuperazione di a tavola. Per esempiu, avete avutu partizioni per mesi, è pigliate u primu mese di 2017 è copià à un novu servitore, dopu copià u terzu mese à un altru servitore novu. È cusì fate finu à chì diventa più o menu uniforme.

U trasferimentu pò esse realizatu solu per quelli partizioni chì ùn cambianu micca durante a registrazione. Per partizioni freschi, a scrittura deve esse disattivata, perchè u so trasferimentu ùn hè micca atomicu. Altrimenti, vi finiscinu cù duplicati o lacune in i dati. Tuttavia, stu metudu hè praticu è travaglia abbastanza efficace. I partizioni cumpressi pronti sò trasmessi nantu à a reta, vale à dì, i dati ùn sò micca cumpressi o ricudificati.

Stu metudu hà un inconveniente, è dipende di u schema di sharding, s'ellu avete prumessu à stu schema di sharding, chì chjave di sharding avete. In u vostru esempiu per u casu cù metrica, a chjave di sharding hè un hash di a strada. Quandu selezziunate una tavola Distribuita, va à tutti i frammenti di u cluster in una volta è piglia dati da quì.

Questu significa chì ùn importa micca veramente quale dati finiscinu nantu à quale shard. A cosa principal hè chì e dati nantu à una strada finiscinu in un frammentu, ma quale ùn hè micca impurtante. In questu casu, u trasferimentu di partizioni pronti hè perfetta, perchè cù e dumande selezziunate, riceverete ancu e dati cumpleti - sia prima di resharding sia dopu, u schema ùn importa micca veramente.

Ma ci sò casi chì sò più cumplicati. Sè à u livellu di a logica di l'appiecazione vi s'appoghjanu nantu à un schema sharding spiciali, chì stu cliente hè situatu nantu à tali è tali shard, è a dumanda pò esse mandatu immediatamente, è micca à a tavola Distributed. O sì aduprate una versione abbastanza recente di ClickHouse è avete attivatu u paràmetru ottimisà saltate frammenti inutilizati. In questu casu, durante a ricerca selezziunata, l'espressione in a sezione induve serà analizata è serà calculata à quale shards per andà secondu u schema di sharding. Questu travaglia sempre chì i dati sò decomposti esattamente in cunfurmità cù stu schema di sharding. Se li cambiassi manualmente, a corrispondenza pò cambià.

Allora hè u modu numeru unu. È aspittendu a vostra risposta, hè u metudu adattatu, o andate avanti.

Vladimir Kolobaev, amministratore di sistema principale in Avito: Alexey, u metudu chì avete mintuatu ùn hè micca bè bè quandu avete bisognu di sparghje a carica, cumpresa a lettura. Pudemu piglià una particione chì hè mensuale è pudemu piglià u mese precedente à un altru node, ma quandu una dumanda vene per questa dati, carcheremu solu. Ma mi piacerebbe carricà u cluster sanu, perchè, altrimenti, per qualchì tempu, tutta a carica di lettura serà processata da dui frammenti.

Alexey Milovidov: A risposta quì hè strana - iè, hè male, ma pò travaglià. Vi spiegheraghju esattamente cumu. Vale a pena guardà u scenariu di carica chì vene cù i vostri dati. S'ellu si tratta di dati di monitoraghju, allora hè quasi sicuru chì a maiò parte di e dumande sò per dati freschi.

Avete installatu novi servitori, migrati vechji partizioni, ma ancu cambiatu cumu si scrivenu dati freschi. E dati freschi seranu spargugliati in tuttu u cluster. Cusì, dopu à cinque minuti, e dumande per l'ultimi cinque minuti caricaranu in modu uniforme u cluster, dopu à un ghjornu, e dumande per un ghjornu caricaranu in modu uniforme u cluster. E dumande per u mese precedente, sfurtunatamenti, andaranu solu à una parte di i servitori di cluster.

Ma spessu ùn avete micca richieste per ferraghju 2019. Hè assai prubabile, se e dumande vanu à 2019, allora seranu per tuttu u 2019 - per un intervallu di tempu grande, è micca per una piccula gamma. E tali richieste seranu ancu capaci di carica uniformemente u cluster. Ma in generale, a vostra rimarca hè abbastanza curretta chì questu hè una suluzione ad hoc chì ùn sparghje micca e dati in modu uniforme.

Aghju qualchì puntu più per risponde à a quistione. Unu di elli hè nantu à cumu fà inizialmente u schema di sharding in modu chì ci hè menu dolore da resharding. Questu ùn hè micca sempre pussibule.

Per esempiu, avete dati di monitoraghju. I dati di monitoraghju cresce per trè ragioni. U primu hè l'accumulazione di dati storichi. U sicondu hè a crescita di u trafficu. È u terzu hè un aumentu di u numeru di e cose chì sò sottumessi à u monitoraghju. Ci sò novi microservizii è metriche chì deve esse salvate.

Hè pussibule chì di questi, u più grande aumentu hè dovutu à u terzu mutivu - questu hè un aumentu di l'usu di u monitoraghju. È in questu casu, vale a pena guardà a natura di a carica, quale sò e dumande principali per selezziunà. E dumande di selezzione principali sò prubabilmente seguitate qualchì sottumessu di e metriche.

Per esempiu, l'usu di CPU in certi servitori da qualchì serviziu. Ci hè chì ci hè qualchì subset di chjavi da quale avete sta dati. È a dumanda stessu per questa dati hè più prubabile abbastanza simplice è corre in decine di millisecondi. Adupratu per i servizii di surviglianza, per i dashboards. Spergu di capisce questu bè.

Vladimir Kolobaev: U fattu hè chì assai spessu appellu à e dati storichi, postu chì paragunemu a pusizione attuale cù quella storica in tempu reale. È hè impurtante per noi avè un accessu rapidu à una grande quantità di dati, è ClickHouse faci un gran travagliu cù questu.

Avete assolutamente ragiò, a maiò parte di e dumande di lettura chì avemu sperimentatu in l'ultimu ghjornu, cum'è qualsiasi sistema di surviglianza. Ma à u listessu tempu, a carica di dati storichi hè ancu abbastanza grande. Hè soprattuttu da un sistema d'alerta chì gira ogni trenta seconde è dice à ClickHouse, "Datemi i dati per l'ultime sei settimane. È avà custruite una media mobile di elli, è paragunemu u valore attuale cù u valore storicu.

Vogliu dì chì per tali richieste assai fresche avemu un altru tavulinu in u quale guardemu solu dui ghjorni di dati, è e dumande principali vulanu in questu. Mandemu solu grandi dumande storiche à una grande tavola sharded.

Alexey Milovidov: Sfurtunatamente, risulta esse pocu applicabile per u vostru scenariu, ma descriveraghju dui schemi di sharding cattivi è cumplessi chì ùn anu micca bisognu à esse usatu, ma sò usati in u serviziu di i mo amici.

Ci hè un cluster principale cù avvenimenti Yandex.Metrics. L'avvenimenti sò viste di pagina, clics è transizioni. A maiò parte di e dumande vanu à un situ web specificu. Avete apertu u serviziu Yandex.Metrica, avete un situ web - avito.ru, andate à u rapportu, è una dumanda hè fatta per u vostru situ web.

Ma ci sò altre dumande - analitiche è glubale, chì sò fatte da analisti interni. In casu, aghju nutatu chì l'analisti interni facenu dumande solu per i servizii Yandex. Ma ancu i servizii Yandex occupanu una parte significativa di tutti i dati. Queste sò richieste micca per cuntatori specifichi, ma per un filtru più largu.

Cumu urganizà e dati in modu chì tuttu funziona in modu efficiente per un contatore, è ancu e dumande globale? Un'altra difficultà si trova in u fattu chì u numeru di richieste in ClickHouse per u cluster Metrics hè parechji mila per seconda. À u listessu tempu, un servitore ClickHouse ùn gestisce micca e dumande micca triviali, per esempiu, parechji milla per seconda.

A dimensione di u cluster hè di sei centu è qualcosa di servitori. Se simpricimenti stende una tavola Distribuita nantu à questu cluster è mandà parechje milla richieste, diventerà ancu peggiu di mandà à un servitore. Per d 'altra banda, l'opzione chì i dati sò spargugliati in modu uniforme, è andemu à dumandà da tutti i servitori, hè subitu licenziatu.

Ci hè una opzione diametralmente opposta. Imagine s'è no shard data per situ, è una dumanda per un situ va à un shard. Avà u cluster hà da pudè tirà decimila richieste per seconda, ma nantu à un frammentu una dumanda travaglià troppu lentamente. Ùn serà più scala in larghezza di banda. In particulare s'ellu hè un situ avito.ru. Ùn vi revelà un sicretu se dicu chì Avito hè unu di i siti più visitati in Runet. E processà nantu à un frammentu seria insane.

Dunque, u schema di sharding hè dispostu in una manera più complicata. U cluster sanu hè divisu in una quantità di clusters, chì chjamemu strati. Dentru ogni cluster ci sò da deci à parechje decine di frammenti. Ci sò trenta nove tali clusters in totale.

Cumu si scala tuttu? U numaru di clusters ùn cambia micca - cum'è trenta nove anni fà, ferma u listessu. Ma in ognuna di elli, aumentemu gradualmente u numeru di frammenti cum'è dati s'accumula. È u schema di sharding in generale hè questu - a divisione in questi clusters passa per siti web, è per capiscenu quale situ hè in quale cluster, una metabase separata in MySQL hè generalmente utilizata. Un situ - nantu à un cluster. È in ellu, u sharding si faci secondu l'identificatori di i visitori.

Durante a registrazione, li dividemu da u restu di l'ID di u visitatore. Ma quandu un novu shard hè aghjuntu, u schema di sharding cambia, cuntinuemu à split, ma cù u restu di dividendu per un altru numeru. Questu significa chì un visitatore hè digià situatu in parechji servitori, è ùn pudete micca scumessa. Questu hè fattu solu per assicurà chì i dati sò megliu compressi. È quandu interrugate, andemu à a tavola Distribuita, chì vede u cluster è accede à decine di servitori. Questu hè un schema cusì stupidu.

Ma a mo storia serà incompleta se ùn dicu micca chì avemu abbandunatu stu schema. In u novu schema, avemu cambiatu tuttu è copiatu tutte e dati cù clickhouse-copier.

In u novu schema, tutti i siti sò spartuti in dui categurie - grande è chjuca. Ùn sò micca sapè cumu u sogliu hè statu sceltu quì, ma in u risultatu, hè risultatu chì i grandi siti sò arregistrati in un cluster, induve ci sò 120 shards cù trè rèpliche in ogni - vale à dì, 360 servitori. È u schema di sharding hè cusì chì ogni dumanda va à tutti i frammenti in una volta. Sè avà apre ogni pagina di rapportu per avito.ru in Yandex.Metrica, a dumanda andarà à i servitori 120. Ci sò pochi grandi siti in Runet. È e dumande ùn sò micca mille per seconda, ma ancu menu di centu. Tuttu chistu hè tranquillamente masticatu da u tavulu Distributed, chì ognunu di elli processa 120 servitori.

È u sicondu cluster hè per i siti chjuchi. Eccu un schema di sharding per l'ID di u situ, è ogni dumanda va esattamente à un shard.

ClickHouse hà una utilità di copia di clichouse. Pudete dì di ella ?

Devu dì subitu chì sta suluzione hè più ingombrante è un pocu menu produtiva. U vantaghju hè chì smears i dati cumpletamente secondu u schema chì specificate. Ma u svantaghju di l'utilità hè chì ùn hè micca reshard in tuttu. Copia dati da un schema di cluster à un altru schema di cluster.

Questu significa chì per travaglià, duvete avè dui clusters. Puderanu esse situati nantu à i stessi servitori, ma, in ogni modu, i dati ùn saranu micca mossi incrementali, ma seranu copiati.

Per esempiu, ci eranu quattru servitori, avà sò ottu. You creà una nova tavula Distributed nant'à tutti i servori, novi tavulini lucale, è lanciari clickhouse-copier, specificing in lu schema di u travagliu chì si deve leghje da quì, accettà u novu schema sharding, è trasfiriri dati ci. È avete bisognu di una volta è mezu di più spaziu nantu à i vechji servitori chì avete avà, perchè i vechji dati duveranu stà nantu à elli, è a mità di i stessi dati vechji venenu sopra. Sè avete pensatu in anticipu chì i dati deve esse resharded è ci hè spaziu, allura stu mètudu hè adattatu.

Cumu funziona clickhouse-copier à l'internu? Rompe tuttu u travagliu in un inseme di travaglii per processà una partizione di una tavola nantu à un frammentu. Tutti questi travaglii ponu eseguisce in parallelu, è cliccà-copier pò eseguisce parechje istanze in diverse macchine, ma ciò chì face per una sola partizione ùn hè nunda più di una selezzione di inserimentu. I dati sò letti, decompressed, repartitioned, dopu cumpressati di novu, scritti in qualchì locu, re-sorted. Questa hè una decisione più difficiule.

Avete avutu una cosa pilota chjamata resharding. Chì cun ella ?

Torna in 2017, avete avutu una cosa pilota chjamata resharding. Ci hè ancu una opzione in ClickHouse. Aghju capitu chì ùn hè micca sbulicatu. Pudete dì perchè hè accadutu? Sembra esse assai pertinente.

U prublemu tutale hè chì s'è vo avete bisognu di reshard dati in u locu, un synchronization assai cumplessu hè necessariu per fà questu atomically. Quandu avemu cuminciatu à vede cumu si travaglia sta sincronizazione, hè diventatu chjaru chì ci sò prublemi fundamentali. E sti prublemi fundamentali ùn sò micca solu teorichi, ma immediatamente cuminciaru à mustrà in pratica in a forma di qualcosa chì pò esse spiegatu assai simplicemente - nunda di travagliu.

Hè pussibule unisce tutte e parti di e dati inseme prima di passà à i dischi lenti?

Una quistione nantu à TTL cù u muvimentu di l'opzione di discu rallenta in u cuntestu di fusioni. Ci hè un modu altru ch'è cron per unisce tutte e parti in una prima di passà à i dischi lenti?

A risposta à a quistione di s'ellu hè pussibile di qualchì manera automaticamente cola tutti i pezzi in una prima di trasfirià ùn hè micca. Mi pari chì questu ùn hè micca necessariu. Ùn pudete micca unisce tutte e parti in una sola, ma simpricimenti s'appoghjanu nantu à u fattu chì saranu trasferiti à i dischi lenti automaticamente.

Avemu dui criterii per e regule di trasferimentu. U primu hè cumu si riempie. Se u livellu di almacenamentu attuale hà menu di un certu percentinu di spaziu liberu, selezziunà un pezzu è u movemu à un almacenamentu più lento. O piuttostu, micca più lento, ma i seguenti - cumu si stallanu.

U sicondu criteriu hè a dimensione. Parla di u trasferimentu di pezzi grossi. Pudete aghjustà u sogliu basatu annantu à u spaziu liberu nantu à un discu veloce è i dati seranu migrati automaticamente.

Cumu migre à e novi versioni di ClickHouse se ùn ci hè micca manera di verificà a cumpatibilità in anticipu?

Stu tema hè discutitu regularmente in Telegram chat ClickHouse piglià in contu e diverse versioni, è ancu. Quantu sicuru hè di aghjurnà da a versione 19.11 à 19.16 è, per esempiu, da 19.16 à 20.3. Chì ghjè u megliu modu per passà à e novi versioni senza pudè verificà a cumpatibilità in u sandbox in anticipu?

Ci sò uni pochi di reguli d'oru quì. Primu - leghje u changelog. Hè grande, ma ci sò punti separati nantu à i cambiamenti incompatibili in daretu. Ùn trattate micca questi articuli cum'è una bandiera rossa. Quessi sò generalmente incompatibilità minori chì sò ligati à qualchì funziunalità di u bordu chì probabilmente ùn aduprate micca.

Siconda, s'ellu ùn ci hè micca manera di verificà a cumpatibilità in u sandbox, è vulete aghjurnà immediatamente in a produzzione, a ricunniscenza hè chì ùn avete micca bisognu di fà questu. Prima crea un sandbox è pruvate. Se ùn ci hè micca un ambiente di prova, allora probabilmente ùn avete micca una cumpagnia assai grande, chì significa chì pudete copià alcune di e dati à u vostru laptop è assicuratevi chì tuttu funziona bè. Pudete ancu purtà uni pochi di repliche in u locu in a vostra macchina. O pudete elevà una nova versione in un locu vicinu è caricate alcune dati quì - vale à dì, fate un ambiente di prova improvvisu.

Un'altra regula hè di ùn aghjurnà micca in una settimana dopu a liberazione di a versione per via di catturà bug in a produzzione è correzioni rapidi successive. Capemu a numerazione di a versione di ClickHouse per ùn avè micca cunfusu.

Ci hè a versione 20.3.4. U numeru 20 indica l'annu di fabricazione - 2020. Da u puntu di vista di ciò chì hè in l'internu, questu ùn importa micca, perchè ùn avemu micca attentu à questu. In più - 20.3. U sicondu numeru - in questu casu 3 - aumentemu ogni volta chì liberemu una versione cù qualchì nova funziunalità. Se vulemu aghjunghje qualchì funzione à ClickHouse, duvemu aumentà stu numeru. Questu hè, in a versione 20.4 ClickHouse hà da travaglià ancu megliu. U terzu cifru hè 20.3.4. Eccu 4 hè u numeru di patch releases in quale ùn avemu micca aghjustatu novi funziunalità, ma riparatu qualchi bug. È 4 significa chì avemu fattu quattru volte.

Ùn pensate micca chì hè qualcosa di terribili. Di solitu l'utilizatore pò installà l'ultima versione è hà da travaglià senza prublemi cù uptime annu. Ma imaginate chì in una certa funzione per processà i bitmaps, chì hè stata aghjunta da i nostri cumpagni chinesi, quandu passanu argumenti sbagliati, u servitore crash. Avemu da riparà questu. Rilasciaremu una nova versione di patch è ClickHouse diventerà più stabile.

Se avete ClickHouse chì travaglia in a produzzione, è una nova versione di ClickHouse cù funzioni supplementari hè liberata - per esempiu, 20.4.1 hè u primu, ùn avete micca affruntà à mette in produzzione u primu ghjornu. Perchè hè bisognu à tuttu? Se ùn avete micca aduprà ClickHouse, allora pudete installallu, è, assai prubabilmente, tuttu sarà bè. Ma se ClickHouse hè digià travagliatu in modu stabile, allora stà sintonizatu per patch è aghjurnamenti - chì prublemi risolvemu.

Kirill Shvakov: Vogliu aghjunghje un pocu di l'ambienti di prova. Tuttu u mondu hè assai paura di l'ambienti di teste è per una certa ragione crede chì si avete un cluster ClickHouse assai grande, allora l'ambiente di prova ùn deve esse micca più chjucu o almenu dece volte più chjucu. Ùn hè micca cusì cusì.

Puderaghju dì cù u mo esempiu. Aghju un prughjettu è ci hè ClickHouse. U nostru ambiente di prova per ellu hè una piccula macchina virtuale in Hetzner per vinti euro, induve assolutamente tuttu hè implementatu. Per fà questu, avemu l'automatizazione cumpleta in Ansible, è per quessa, in principiu, ùn ci hè nisuna differenza induve rollu - nantu à i servitori di ferru o solu implementà in macchine virtuali.

Chì si pò fà ? Saria bellu di fà un esempiu in a documentazione di ClickHouse nantu à cumu implementà un picculu cluster in u vostru propiu - in Docker, in LXC, forsi creà un Ansible playbook, perchè diverse persone anu implementazioni diverse. Questu farà assai cose più faciule. Quandu pigliate è implementate un cluster in cinque minuti, hè assai più faciule per pruvà à capisce qualcosa. Hè assai più còmuda in questu modu, perchè rolling una versione chì ùn avete micca pruvatu in a produzzione hè una strada per nulla. Calchì volta travaglia è à volte ùn hè micca. È cusì a speranza di successu hè male.

Maxim Kotyakov, ingegnere senior di backend Avito: Aghju aghjustatu un pocu di l'ambienti di prova da una seria di prublemi per e grande cumpagnie. Avemu un cluster d'accettazione ClickHouse cumpletu, secondu schemi di dati è paràmetri, una copia esatta di ciò chì hè in produzzione. Stu cluster hè implementatu in cuntenituri piuttostu putrici cù un minimu di risorse. Scrivemu quì un certu percentinu di i dati di produzzione, postu chì ci hè l'uppurtunità di riplicà u flussu in Kafka. Tuttu hè sincronizatu è scalatu quì - sia in termini di capacità è di flussu, è, in teoria, tutte l'altri cose esse uguali, deve cumportà cum'è una produzzione in termini di metrica. Tuttu u potenziale splusivu hè prima rotulatu nantu à questu stand è infusu quì per parechji ghjorni finu à pronta. Ma di sicuru, sta suluzione hè caru, pisanti è cù costi di supportu non-zero.

Alexey Milovidov: Vi dicu ciò chì hè l'ambienti di prova di i nostri amichi da Yandex.Metrica. Un cluster era per servitori 600-qualcosa, l'altru per 360, è ci hè un terzu è parechji clusters. L'ambiente di prova per unu di elli hè solu dui shards cù duie rèpliche in ognunu. Perchè dui frammenti ? Per ùn esse solu. E repliche, ancu per esse. Solu una quantità minima chì pudete permette.

Stu ambiente di prova permette di verificà a salute di e dumande è se qualcosa hè rottu in una grande manera. Ma spessu i prublemi sò di una natura completamente diversa, quandu tuttu u travagliu, ma ci sò qualchi cambiamenti petite cù a carica.

Vi daraghju un esempiu. Avemu decisu di installà una nova versione di ClickHouse. Hè dispostu nantu à un ambiente di teste, i testi automatizati sò passati in Yandex.Metrica stessu, chì paragunanu dati nantu à a versione vechja è nantu à a nova, eseguendu tutta a pipeline. E di sicuru, teste verdi di u nostru CI. Altrimenti, ùn avissimu mancu prupostu sta versione.

Tuttu hè bè. Cuminciamu à andà in pruduzzione. Aghju ricevutu un missaghju chì a carica hà aumentatu parechje volte nantu à i grafici. Riturnemu a versione. Fighjulu à u graficu è vede: a carica hè veramente aumentata parechje volte durante u rollout, è diminuite torna quandu si stende. Allora avemu cuminciatu à rinvià a versione. È a carica aumentava in u listessu modu è cascate in u listessu modu. Allora a cunclusione hè questu - a carica hè aumentata in cunnessione cù u calculu, nunda di sorpresa.

Allora era difficiule di cunvince i culleghi per installà a nova versione dopu à tuttu. Dicu: "Va bè, stende. Mantene e dite incruciate, tuttu funziona. Avà a carica hè aumentata nantu à i charts, ma tuttu hè bè. Aspetta." In generale, avemu fattu questu, è questu hè - a versione hè publicata in u situ di produzzione. Ma guasi cù ogni calculu, i prublemi simili sorgi.

Kill query hè suppostu per tumbà e dumande, ma ùn hè micca. Perchè?

Un utilizatore hè vinutu à mè, un tipu di analista, è hà creatu una certa dumanda, chì hà messu u mo cluster ClickHouse. Qualchì nodu o un cluster sanu, secondu a replica o shard in quale a dumanda hè entrata. Vecu chì tutti i risorsi di CPU in stu servitore sò in u scaffale, tuttu hè rossu. À u listessu tempu, ClickHouse stessu risponde à e dumande. E scrivu: "Per piacè mostrami a lista di u prucessu, chì dumanda hà generatu sta follia".

Truvu sta dumanda è scrivite kill to it. È vecu chì nunda ùn succede. U mo servitore hè in u scaffale, ClickHouse poi mi dà qualchi cumandamenti, mostra chì u servitore hè vivu, è tuttu hè bè. Ma aghju degradazione in tutte e dumande di l'utilizatori, a degradazione per l'entrata in ClickHouse principia, è a mo dumanda di uccisione ùn funziona micca. Perchè? Pensu chì a dumanda di uccisione duverebbe tumbà e dumande, ma ùn hè micca.

Avà ci sarà una risposta piuttostu strana. U puntu hè chì a quistione di uccisione ùn uccide micca e dumande.

Kill query mette una piccula casella chjamata "Vogliu chì sta dumanda sia uccisa". È a dumanda stessu, quandu si tratta di ogni bloccu, guarda à sta bandiera. S'ellu hè stabilitu, a dumanda ferma di travaglià. Risulta chì nimu ammazza a dumanda, ellu stessu deve verificà tuttu è piantà. È questu deve travaglià in tutti i casi induve a dumanda hè in un statu di prucessu di bloccu. Prucessarà u prossimu bloccu di dati, verificate a bandiera è ferma.

Questu ùn funziona micca in i casi induve a dumanda hè bluccata nantu à qualchì operazione. True, questu hè più prubabile micca u vostru casu, perchè, secondu voi, usa una mansa di risorse di u servitore. Hè pussibule chì questu ùn viaghja micca in u casu di l'urdinamentu esternu è in certi altri dettagli. Ma in generale, questu ùn deve esse micca, questu hè un bug. È l'unicu ciò chì possu cunsigliu hè di aghjurnà ClickHouse.

Cumu calculà u tempu di risposta sottu a carica di lettura?

Ci hè una tavola chì guarda l'agregati di l'articuli - diversi cuntatori. U numaru di linii hè circa centu millioni. Hè pussibule cuntà un tempu di risposta prevedibile si versate 1K RPS nantu à 1K elementi?

A ghjudicà da u cuntestu, parlemu di una carica di lettura, perchè ùn ci sò micca prublemi cù scrittura - almenu mille, almenu centu mila, è qualchì volta parechji milioni di linii ponu esse inseriti.

E dumande di lettura sò assai diverse. In a selezzione 1, ClickHouse pò eseguisce circa decine di millaie di dumande per seconda, cusì ancu e dumande per una sola chjave necessitaranu digià qualchi risorse. E tali dumande puntuali seranu più difficiuli chì in certi basa di dati di valori chjave, perchè per ogni lettura hè necessariu di leghje u bloccu di dati per indice. U nostru indice ùn tratta micca ogni record, ma ogni intervallu. Questu hè, avete da leghje tutta a gamma - queste sò 8192 linee per difettu. È avete da decompressà u bloccu di dati cumpressu da 64 KB à 1 MB. Di genere, tali dumande di puntu piglianu da uni pochi millisecondi. Ma questu hè l'opzione più faciule.

Pruvemu qualchì aritmetica simplice. Sè vo multiplicate uni pochi millisecondi da mille, vi vene uni pochi seconde. Cum'è s'ellu hè impussibile di mantene un milla richieste per seconda, ma in fattu hè pussibule, perchè avemu parechji core di processore. Allora, in principiu, 1000 RPS ClickHouse pò qualchì volta tene, ma nantu à e dumande brevi, vale à dì dumande di puntu.

Sè avete bisognu di scala u cluster ClickHouse per u numeru di richieste simplici, allora vi ricumandemu a cosa più simplice - aumentà u numeru di repliche è mandà richieste à una replica aleatoria. Se una replica cuntene cinque centu richieste per seconda, chì hè cumplettamente realisticu, allora trè replicati cuntenenu mille è mezu.

Certe volte, sicuru, pudete ancu cunfigurà ClickHouse per u numeru massimu di lettura di punti. Chì ci hè necessariu per questu? U primu hè di riduce a granularità di l'indici. À u listessu tempu, ùn deve esse ridutta à unu, ma nantu à a basa chì u nùmeru di registri in l'indici serà parechji milioni o decine di milioni per servitore. Se a tavula hà centu milioni di fila, allora 64 pò esse stabilitu cum'è granularità.

Pudete riduce a dimensione di u bloccu cumpressu. Ci sò paràmetri per questu. dimensione minima di bloccu di compressione, dimensione massima di bloccu di compressione. Pudete riduzzione, ricaricà i dati, è dopu e dumande di punti seranu più veloci. Ma sempre, ClickHouse ùn hè micca una basa di dati chjave-valore. Un gran numaru di picculi richieste hè una carica anti-pattern.

Kirill Shvakov: Daraghju cunsiglii in casu chì ci sò cuntabili ordinarii. Questa hè una situazione abbastanza standard quandu un tipu di contatore hè almacenatu in ClickHouse. Aghju un utilizatore, hè da un tali paese, un altru terzu campu, è aghju bisognu di cresce qualcosa in modu incrementale. Pigliate MySQL, fate una chjave unica - in MySQL hè una chjave duplicata, è in PostgreSQL hè un cunflittu - è aghjunghje un signu plus. Questu hà da travaglià assai megliu.

Quandu avete pocu dati, ùn hè micca assai puntu à utilizà ClickHouse. Ci sò basa di dati regulare, è facenu un bonu travagliu.

Cosa tweak in ClickHouse per chì più dati sò in a cache?

Imaginemu a situazione - i servitori anu 256 GB di RAM, in a rutina di u ghjornu ClickHouse piglia circa 60-80 GB, à u piccu - finu à 130. Ciò chì pò esse attivatu è tweaked cusì chì più dati hè in u cache è, in cunseguenza , ci sò menu viaghji à u discu?

Comu regula, a cache di pagina di u sistema upirativu faci un bonu travagliu di stu compitu. Se avete appena apertu a cima, fighjate quì in cache o liberu - dice ancu quantu hè in cache - allora pudete vede chì tutta a memoria libera hè aduprata per a cache. È quandu leghje sta dati, ùn serà micca lettu da u discu, ma da a RAM. À u listessu tempu, possu dì chì a cache hè usata in modu efficace, perchè hè a dati cumpressa chì hè in cache.

Tuttavia, sè vo vulete accelerà ancu di più alcune dumande simplici, hè pussibule attivà una cache in i dati decompressi in ClickHouse. Hè chjamatu cache non compressa. In u schedariu di cunfigurazione config.xml, stabilisce a dimensione di u cache senza cumpressione à u valore chì avete bisognu - ùn cunsigliu micca più di a mità di a RAM libera, perchè u restu andarà sottu u cache di a pagina.

Inoltre, ci sò dui paràmetri di livellu di dumanda. Prima impostazione - aduprà cache senza cumpressione - include u so usu. Hè ricumandemu per attivà per tutte e dumande, eccettu per quelli pisanti, chì ponu leghje tutte e dati è sguassate sta cache. È u sicondu paràmetru hè qualcosa cum'è u numeru massimu di linii per utilizà a cache. Limita automaticamente e grandi richieste in modu chì sò passate u cache.

Cumu possu cunfigurà storage_configuration per u almacenamiento in RAM?

In a nova documentazione di ClickHouse, aghju lettu a rùbbrica ligata cù almacenamiento di dati. In a descrizzione ci hè un esempiu cù un SSD veloce.

Mi dumandu cumu pudete cunfigurà u listessu cù memoria calda di voluminu. È una altra dumanda. Cumu selezziunate u travagliu cù questa urganizazione di dati, leghjerà tuttu u set o solu quellu nantu à u discu, è sta dati hè cumpressu in memoria? E cumu funziona a sezione prewhere nantu à una tale urganizazione di dati?

Stu paràmetru afecta l'almacenamiento di pezzi di dati, è u so furmatu ùn cambia in ogni modu.
Fighjemu un ochju più vicinu.

Pudete stabilisce u almacenamiento di dati in a RAM. Tuttu ciò chì hè cunfiguratu per un discu hè u so percorsu. Crea una partizione tmpfs chì hè muntata à qualchì percorsu in u sistema di fugliale. Specificate sta strada cum'è u percorsu di almacenamiento di dati per a partizione più calda, i pezzi di dati cumincianu à ghjunghje è esse scritti quì, tuttu hè bè.

Ma ùn vi ricumandemu micca di fà questu per via di a bassa affidabilità, ancu s'ellu avete almenu trè rèpliche in diversi centri di dati, allora pudete. Sì cusì, i dati seranu restaurati. Imagine chì u servitore hè stata di colpu disattivata è riattivata. A rùbbrica hè stata muntata di novu, ma ci hè un vacu. À l'iniziu, u servitore ClickHouse vede chì questi pezzi mancanu, ancu s'è, sicondu i metadati ZooKeeper, anu da esse. Fighja à quali ripliche sò, li dumanda è li scarica. Cusì, i dati seranu restaurati.

In questu sensu, l'almacenamiento di dati in RAM ùn hè micca fundamentalmente sfarente di l'almacenamentu nantu à u discu, perchè quandu i dati sò scritti à u discu, anu ancu prima in a cache di a pagina è sò fisicamenti scritti dopu. Dipende da cumu hè muntatu u sistema di filesystem. Ma solu in casu, diceraghju chì ClickHouse ùn fsync in inserisce.

In questu casu, i dati in a RAM sò guardati in u stessu formatu cum'è nantu à u discu. A ricerca selezziunata selezziunà i pezzi da leghje in u listessu modu, selezziunate i intervalli di dati necessarii in i pezzi, è li leghje. E prewhere funziona esattamente u listessu, indipendentemente da chì e dati eranu in RAM o in discu.

Finu à quale numeru di valori unichi hè efficace a Cardinalità Bassa?

A bassa Cardinalità hè difficiule. Cumpila dizziunari di dati, ma sò lucali. Prima, i dizziunari sò diffirenti per ogni pezzu, è in segundu, ancu in un pezzu pò esse diffirenti per ogni gamma. Quandu u numeru di valuri unichi righjunghji un sogliu - un milione, pensu - u dizziunariu hè solu pusatu da parte è hè creatu un novu.

A risposta hè in generale: per ogni intervallu lucale - dì, per ogni ghjornu - in qualchì locu finu à un milione di valori unichi, a Cardinalità Bassa hè efficace. Dopu quì, ci sarà solu un fallback, in quale parechji dizziunari diffirenti seranu utilizati, è micca solu unu. Funcionarà in u listessu modu cum'è una colonna regulare di u tipu di stringa, forsi un pocu menu efficaci, ma ùn ci sarà micca una degradazione seria di u rendiment.

Chì sò e migliori pratiche per a ricerca di testu cumpletu nantu à una tavula cù cinque miliardi di fila?

Ci sò diverse risposte. U primu hè di dì chì ClickHouse ùn hè micca un mutore di ricerca di testu sanu. Ci sò sistemi speciali per questu, per esempiu, Elasticsearch и Sphinx. Tuttavia, vecu più è più persone chì dicenu chì si movenu da Elasticsearch à ClickHouse.

Perchè questu succede? Spieganu questu per u fattu chì Elasticsearch cessà di trattà cù a carica nantu à certi volumi, cuminciendu cù l'indici di custruzzione. L'indici diventanu troppu ingombranti, è se simpricimenti trasfiriri i dati à ClickHouse, risulta chì sò almacenati parechje volte più efficaci in quantu à u voluminu. À u listessu tempu, e dumande di ricerca ùn sò spessu micca cusì chì era necessariu di truvà una frasa in tutta a quantità di dati, tenendu in contu a morfologia, ma completamente diverse. Per esempiu, per truvà l'ultime ore in i logs per qualchì subsequenza di bytes.

In questu casu, create un indice in ClickHouse, u primu campu in quale serà a data cù u tempu. È u più grande cutoff di dati serà esattamente per u intervalu di data. In u intervalu di data selezziunatu, in regula, hè digià pussibule di fà una ricerca di testu cumpletu ancu cù u metudu di forza bruta usendu simili. A dichjarazione cum'è in ClickHouse hè a dichjarazione cum'è più efficace chì pudete truvà. Se truvate un megliu, dimmi.

Ma ancu, cum'è una scansione completa. E scansione completa pò esse lentu micca solu in u CPU, ma ancu in u discu. Se di colpu avete un terabyte di dati per ghjornu, è cercate una parolla in un ghjornu, avete da scansà un terabyte. È hè prubabilmente nantu à i discu duru ordinariu, è in u risultatu, seranu carricati in tale manera chì ùn entre micca in stu servitore via SSH.

In questu casu, sò prontu à offre un altru picculu truccu. Hè da a categuria di sperimentazione - pò travaglià, o ùn pò micca. ClickHouse hà indici full-text in forma di filtri di fioritura di trigrammi. I nostri culleghi in Arenadata anu digià pruvatu sti indici, è spessu travaglianu esattamente cum'è previstu.

Per usà currettamente, duvete avè una bona cunniscenza di esattamente cumu si travaglianu: ciò chì hè un filtru di trigram bloom è cumu sceglie a so dimensione. Puderaghju dì chì aiutanu à e dumande nantu à certi frasi rari, substrings chì sò raramenti truvati in i dati. In questu casu, i subranges seranu selezziunati da indici, è menu dati seranu leghje.

ClickHouse hà aghjustatu recentemente funzioni ancu più avanzate per a ricerca full-text. Questu hè, prima, a ricerca di una mansa di substrings in una volta in un passu, cumprese l'opzioni di case-sensitive, case-insensitive, UTF-8-supported, o ASCII-only options. Sceglite u più efficace chì avete bisognu.

Ci era ancu una ricerca per parechje spressione regulare in un passu. Ùn avete bisognu di scrive X cum'è una substringa o X cum'è una altra substringa. Scrivite subitu, è tuttu hè fattu u più efficacemente pussibule.

In terzu, ci hè avà una ricerca apprussimativa per regexps è una ricerca apprussimata per substrings. Se qualchissia hà scrittu una parolla cù un typo, serà cercatu per u massimu match.

Chì ghjè u megliu modu per urganizà l'accessu à ClickHouse per un gran numaru d'utilizatori?

Dìcimu u megliu per urganizà l'accessu per un gran numaru di cunsumatori è analisti. Cumu furmà una fila, priorità e dumande massime simultanee, è cù quali strumenti?

Se u cluster hè abbastanza grande, allora una bona suluzione seria di suscitarà dui servitori più, chì diventeranu u puntu d'entrata per l'analista. Vale à dì, ùn lasciate micca l'analisti in frammenti di cluster specifichi, ma simpricimenti creanu dui servitori vacanti, senza dati, è digià stabilitu diritti d'accessu nantu à elli. À u listessu tempu, i paràmetri di l'utilizatori sò trasferiti à i servitori remoti durante e dumande distribuite. Questu hè, cunfigurà tuttu in questi dui servitori, è i paràmetri anu un effettu nantu à u cluster sanu.

In principiu, questi servitori sò senza dati, ma a quantità di RAM nantu à elli hè assai impurtante per eseguisce e dumande. U discu pò ancu esse usatu per dati tempuranee se l'agregazione esterna o l'ordinamentu esternu hè attivatu.

Hè impurtante di guardà i paràmetri chì sò assuciati cù tutti i limiti pussibuli. Sè avà vai à u cluster Yandex.Metrics cum'è analista è stabilisce una dumanda selezziunà u numeru da i successi, allura vi sarà subitu datu una eccezzioni chì ùn possu micca cumpiendu a dumanda. U numaru massimu di fila chì sò permessu di scansà hè centu miliardi, è ci sò cinquanta trilioni in totale nantu à u cluster in una tavola. Questa hè a prima limitazione.

Dicemu chì sguassate u limitu di u numeru di fila, è eseguite a quistione di novu. Allora vi vede l'eccezzioni seguente - u paràmetru hè attivatu indice di forza per data. Ùn possu micca eseguisce a dumanda se ùn aghju micca specificatu un intervallu di data. Ùn avete micca bisognu di l'analista per inserisce manualmente. Un casu tipicu - un intervallu di data hè scrittu induve a data di l'avvenimentu trà una settimana. È dopu ùn anu micca specificatu una parentesi quì, è invece di è si n'andò à esse o - o URL match. Se ùn ci hè micca un limitu, anderà à scansà a colonna URL è perde una tonna di risorse.

Inoltre, ClickHouse hà dui paràmetri di priorità. Sfurtunatamente, sò assai primitivi. Unu hè simplicemente chjamatu ricircatu. Se a priorità ≠ 0, è e dumande cù una certa priorità sò eseguite, ma una dumanda cù un valore di priorità chì hè più bassu, chì significa una priorità più alta, hè eseguita, allora una dumanda cù un valore di priorità più grande di, chì significa una priorità più bassa, hè simpricimenti suspesi è ùn hà micca travagliatu in tuttu durante stu tempu.

Questu hè un paràmetru assai grossu è ùn hè micca adattatu per situazioni induve ci hè una carica constante nantu à u cluster. Ma s'è vo avete richieste brevi, impulse chì sò impurtanti, è u cluster hè soprattuttu inattivu, sta paràmetra farà.

U prossimu paràmetru di priorità hè chjamatu Priorità di u filu OS. Simplemente espone tutti i fili di esecuzione di richieste à u bonu valore per u pianificatore Linux. Funziona cusì cusì, ma travaglia sempre. Se stabilisce u valore minimu bellu - hè u valore più grande, è dunque a priorità più bassa - è stabilisce -19 per e dumande di priorità alta, u CPU cunsumerà e dumande di priorità bassa circa quattru volte menu di quelli di priorità alta.

Avete ancu bisognu di stabilisce u tempu massimu di esecuzione di a dumanda - per dì, cinque minuti. A velocità minima di esecuzione di a dumanda hè a cosa più bella. Questa paràmetra hè stata per un bellu pezzu, è hè necessariu micca solu per affirmà chì ClickHouse ùn rallenta micca, ma per furzà.

Immaginate chì avete stallatu: se una dumanda processa menu di un milione di fila per seconda, ùn pudete micca fà. Questu disonora u nostru bonu nome, a nostra bona basa di dati. Proibitemu solu. Ci hè veramente dui paràmetri. Unu hè chjamatu a velocità minima di esecuzione - in linee per seconda, è u sicondu hè chjamatu timeout prima di verificà a velocità di esecuzione minima - quindici seconde per difettu. Vale à dì, quindici seconde hè pussibule, è dopu, se lentamente, allora ghjustu una eccezzioni - abbandunà a dumanda.

Avete ancu bisognu di stabilisce quote. ClickHouse hà una funzione di quota integrata chì conta u cunsumu di risorse. Ma, sfurtunatamenti, micca i risorsi di ferru cum'è CPU, dischi, ma lògichi - u numeru di dumande processate, linee è byte leghje. È pudete stabilisce, per esempiu, un massimu di centu dumande in cinque minuti è mille richieste per ora.

Perchè hè impurtante? Perchè alcune di e dumande analitiche seranu realizate manualmente direttamente da u cliente ClickHouse. È tuttu sarà bè. Ma se avete analisti avanzati in a vostra cumpagnia, scriveranu un script, è pò esse un errore in u script. È questu errore pruvucarà a dumanda per esse eseguita in un ciclu infinitu. Questu hè ciò chì deve esse prutettu.

Hè pussibule dà i risultati di una dumanda à deci clienti?

Avemu parechji utilizatori chì piace à vene cù richieste assai grande à u stessu tempu. A dumanda hè grande, in principiu hè eseguita rapidamente, ma per via di u fattu chì ci sò parechje dumande tali à u stessu tempu, diventa assai dolorosa. Hè pussibule eseguisce a stessa dumanda, chì hè ghjunta dece volte in una fila, una volta, è dà u risultatu à deci clienti?

U prublema hè chì ùn avemu micca risultati di cache o cache di dati intermedi. Ci hè una cache di pagina di u sistema upirativu, chì vi permetterà micca di leghje e dati da u discu di novu, ma, sfurtunatamenti, i dati seranu sempre decompressi, deserializzati è riprocessati.

Mi piacerebbe evità in qualchì modu questu, sia in cache di dati intermedii, sia allineendu e dumande simili in qualchì tipu di fila è aghjunghjendu una cache di risultati. Avà avemu una dumanda di pull in u sviluppu, chì aghjunghje una cache di richieste, ma solu per i subrequests in e sezioni in e join - vale à dì, a suluzione hè inferjuri.

Tuttavia, avemu ancu una tale situazione. Un esempiu particularmente canonicu hè e dumande cù paginazione. Ci hè un rapportu, hà parechje pagine, è ci hè una dumanda di limitu 10. Allora a stessa cosa, ma limite 10,10. Allora una altra pagina. È a quistione hè, perchè cuntamu tuttu ogni volta? Ma avà ùn ci hè micca suluzione, è ùn ci hè manera di evitari.

Ci hè una suluzione alternativa chì si mette cum'è sidecar accantu à ClickHouse - ClickHouse Proxy.

Kirill Shvakov: ClickHouse Proxy hà un limitatore di ritmu integratu è una cache di risultati integrata. Un saccu di paràmetri sò stati fatti quì, perchè un compitu simili hè statu risoltu. Proxy permette di limità e richieste mettendu in fila, è cunfigurà quantu dura a cache di a dumanda. Sì e dumande eranu veramente listessi, u Proxy li darà parechje volte, è andate à ClickHouse solu una volta.

Nginx hà ancu una cache in a versione libera è chì funziona ancu. Nginx hà ancu paràmetri in modu chì, se e dumande venenu à u stessu tempu, stallà l'altri finu à chì unu finisci. Ma hè in ClickHouse Proxy chì i paràmetri sò fatti assai megliu. Hè stata fatta apposta per ClickHouse, specificamente per queste richieste, cusì hè più adattatu. Ebbè, hè faciule d'installà.

Chì ci hè di l'operazioni asincrone è e viste materializate?

Ci hè un tale prublema chì l'operazioni cù u mutore di rimpiazzamentu sò asincroni - i dati sò prima scritti, poi sfondate. Se una tableta materializzata cù qualchi aggregati vive sottu à a tableta, i duplicati seranu scritti. È s'ellu ùn ci hè micca una logica cumplessa, allora i dati seranu duplicati. Cosa si pò fà?

Ci hè una soluzione ovvia - per implementà un trigger in una classe specifica di matview durante una operazione di colapsu asincrona. Ci hè un pianu di "bullets d'argentu" per implementà tali funziunalità?

Vale a pena capisce cumu funziona a deduplicazione. Ciò chì aghju da dì ùn hè micca ligatu à a quistione, ma vale a pena ricurdà in casu.

Quandu si inserisce in una tavola replicata, ci hè una deduplicazione di i blocchi inseriti interi. Se reinserite u listessu bloccu chì cuntene u listessu numeru di e listessi fila in u stessu ordine, i dati sò deduplicati. Riceverete "Ok" in risposta à l'inserimentu, ma un batch di dati serà veramente scrittu è ùn sarà micca duplicatu.

Questu hè necessariu per a certezza. Sè avete "Ok" durante l'inserimentu, allora i vostri dati sò stati inseriti. Se riceve un errore da ClickHouse, ùn sò micca inseriti, è avete bisognu di ripetiri l'inserimentu. Ma s'è a cunnessione hè rotta durante l'inserimentu, allora ùn sapete micca s'ellu hè inseritu o micca i dati. L'unica opzione hè di ripetiri l'inserzione di novu. Se i dati sò stati inseriti in realtà è l'avete riinseritu, ci hè una deduplicazione di bloccu. Hè necessariu per evità i duplicati.

È hè ancu impurtante cumu si travaglia per vede materializzati. Se i dati sò stati deduplicati quandu sò inseriti in a tavola principale, ùn andaranu ancu à a vista materializzata.

Avà nantu à a quistione. A vostra situazione hè più cumplicata perchè scrivete duplicati di linii individuali. Questu hè, micca u pacchettu tutale hè duplicatu, ma e linee specifiche, è colapsanu in u fondu. In verità, i dati colapsanu in a tavola principale, è quelli chì ùn sò micca colapsati andaranu à a vista materializata, è nunda ùn succederà à vista materializzata durante a fusione. Perchè una vista materializzata ùn hè nunda più chè un trigger on insert. Nunda altru li succede durante altre operazioni.

È ùn possu micca esse felice quì. Hè solu bisognu di circà una suluzione specifica per stu casu. Per esempiu, hè pussibule di rimpiazzà in una vista materializzata, è u metudu di deduplicazione, forsi, hà da travaglià a stessa manera. Ma sfurtunatamenti, micca sempre. S'ellu hè aggregatu, allora ùn funziona micca.

Kirill Shvakov: Avemu avutu ancu a custruzzione di l'osse in un tempu. Ci era un prublema chì ci sò impressioni di publicità, è ci sò qualchi dati chì pudemu vede in tempu reale - sò solu impressioni. Raramente sò duplicati, ma s'ellu si facenu, i colapsemu in ogni modu dopu. E ci sò cose chì ùn ponu esse duplicate - clicchi è tutta a storia. Ma aghju vulsutu ancu mustrà li quasi subitu.

Cumu sò state realizate viste materializzate? Ci era vista induve hè scrittu direttamente - ci hè un registru in dati crudi, è hè scrittu in vista. Ci, in un certu puntu, i dati ùn sò micca assai curretti, sò duplicati, è cusì. E ci hè a seconda parte di a tavula, induve si vedenu esattamente u listessu cum'è e vedute materializate, vale à dì, sò esattamente u listessu in struttura. Una volta in un certu tempu, ricalculate e dati, cuntà i dati senza duplicati, scrivite à quelli tavule.

Avemu passatu per l'API - questu ùn funziona micca in ClickHouse cù a manu. E l'API vede: quandu aghju a data di l'ultima aghjunta à a tavula, induve hè garantitu chì i dati curretti sò digià calculati, è fa una dumanda à una tavola è à una altra tavola. Da una dumanda sceglie finu à un certu tempu, è da l'altru riceve ciò chì ùn hè micca statu calculatu. È funziona, ma micca per mezu di una ClickHouse.

Sì avete qualchì tipu di API - per analisti, per utilizatori - allora, in principiu, questa hè una opzione. Conti sempre, cunti sempre. Questu pò esse fattu una volta à ghjornu o in un altru tempu. Sceglite per voi stessu a gamma chì ùn avete micca bisognu è ùn hè micca criticu.

ClickHouse hà assai logs. Cumu possu vede tuttu ciò chì succede à u servitore in un mumentu?

ClickHouse hà un gran numaru di logs diffirenti, è questu numeru hè in crescita. In e versioni novi, alcuni di elli sò ancu attivati ​​per automaticamente, in versioni più vechje devenu esse attivati ​​quandu l'aghjurnamentu. Tuttavia, ci sò più è più di elli. Mi piacerebbe vede infine ciò chì succede avà cù u mo servitore, forse in un dashboard di sintesi.

Avete in a squadra di ClickHouse, o in i squadre di i vostri amichi, chì sustenenu qualchì funziunalità di dashboards pronti chì avissiru vede sti logs cum'è un pruduttu finitu? In ultimamente, solu fighjà i logs in ClickHouse hè grande. Ma saria assai bellu s'ellu era digià preparatu in forma di un dashboard. Aghju da esse altu nantu à questu.

Ci sò dashboards, ma ùn sò micca standardizati. Avemu circa 60 squadre in a nostra cumpagnia chì utilizanu ClickHouse, è u più stranu hè chì parechji di elli anu dashboards chì anu fattu elli stessi, è un pocu sfarente. Certi squadre utilizanu l'installazione interna di Yandex.Cloud. Ci sò parechji rapporti pronti, ancu s'è micca tutti i necessarii. L'altri anu u so.

I mo culleghi di Metrica anu u so propiu dashboard in Grafana, è aghju u mio per u so propiu cluster. Fighjulendu cose cum'è una cache hit per una cache serif. È ancu più difficiuli hè chì usemu diverse arnesi. Aghju creatu u mo dashboard nantu à un strumentu assai anticu chjamatu Graphite-web. Hè completamente bruttu. È l'aghju sempre aduprà cusì, ancu s'è Grafana seria prubabilmente più còmuda è più bella.

A cosa basica in dashboards hè a stessa. Quessi sò metrichi di sistema per u cluster: CPU, memoria, discu, rete. L'altri sò u numeru di richieste simultanee, u numeru di fusioni simultanee, u numeru di richieste per seconda, u numeru massimu di pezzi per partizioni di table MergeTree, u lag di replicazione, a dimensione di a fila di replicazione, u numeru di fila inserita per seconda, u numeru di blocchi inseriti per seconda. Questu hè tuttu ciò chì hè ottenutu micca da i logs, ma da e metriche.

Vladimir Kolobaev: Alexey, vogliu correggerà un pocu. Ci hè Grafana. Grafana hà una fonte di dati chì hè ClickHouse. Questu hè, possu fà dumande da Grafana direttamente à ClickHouse. ClickHouse hà una tavola cù logs, hè u listessu per tutti. In u risultatu, vogliu accede à sta tabella di log in Grafana è vede e dumande chì u mo servitore applica. Saria bellu avè un tali dashboard.

L'aghju in bicicletta stessu. Ma aghju una quistione - se tuttu hè standardizatu, è Grafana hè utilizatu da tutti, perchè Yandex ùn hà micca un tali dashboard ufficiale?

Kirill Shvakov: In fattu, a fonte di dati chì ClickHouse supporta avà Altinity. È vogliu solu dà un vettore di induve scavà è quale spinghje. Pudete dumandà elli, perchè Yandex faci sempre ClickHouse, è micca a storia intornu. Altinity hè a cumpagnia principale chì prumove attualmente ClickHouse. Ùn l'abbandunanu micca, ma u susteneranu. Perchè in principiu, per carricà un dashboard à u situ web di Grafana, hè solu bisognu di registrà è carica - ùn ci sò micca prublemi particulari.

Alexey Milovidov: In l'annu passatu, ClickHouse hà aghjustatu assai funzioni di prufilu di query. Ci sò metriche per ogni dumanda di usu di risorse. È più recentemente, un prufilu di query ancu più bassu hè statu aghjuntu per vede induve a dumanda passa ogni millisecondu. Ma per aduprà sta funziunalità, aghju da apre u cliente di a cunsola è scrivite una dumanda chì aghju sempre scurdatu. L'aghju salvatu in qualchì locu è scurdate sempre induve esattamente.

Mi piacerebbe chì ci sia un strumentu chì dice solu - quì sò e vostre dumande pisanti, raggruppate per classi di query. Aghju cliccate nantu à unu, è mi dicenu chì hè pisanti dunque. Avà ùn ci hè micca tali suluzione. È hè veramente stranu chì quandu a ghjente mi dumanda: "Dimmi, ci sò dashboards pronti per Grafana?", dicu: "Vai à u situ web Grafana, ci hè una cumunità Dashboards, è ci hè un dashboard da Dimka. , ci da Kostyan. Ùn sò micca ciò chì hè, ùn l'aghju micca utilizatu stessu ".

Cumu influenzà u merdzhi per chì u servitore ùn cascà micca in OOM?

Aghju una tavola, ci hè solu una partizione in a tavula, hè ReplaceingMergeTree. Aghju scrittu dati à questu per quattru anni. Aviu avutu à fà un alter in ellu è sguassà qualchi dati.

Aghju fattu questu, è in u cursu di trasfurmà sta dumanda, tutta a memoria in tutti i servitori in u cluster hè stata manghjata, è tutti i servitori in u cluster sò andati in OOM inseme. Allora tutti si sò alzati inseme, cuminciaru à unisce a listessa operazione, stu bloccu di dati, è torna à cascà in OOM. Allora si sò alzati di novu è cascanu di novu. È sta cosa ùn hà micca firmatu.

Allora hè risultatu chì questu hè veramente un bug chì i picciotti risolti. Questu hè assai bellu, grazie assai. Ma u residuu restava. È avà, quandu pensu à a necessità di fà una certa fusione in a tavula, aghju una quistione - perchè ùn possu micca piglià queste fusioni è influenzallu in qualchì manera? Per esempiu, limità da a quantità di RAM necessaria, o, in principiu, da u so numeru, chì prucederà sta tavola particulare.

Aghju una tavola chjamata "Metrics", per piacè prucessa per mè in dui flussi. Ùn ci hè bisognu di pruduce dece o cinque fusioni in parallelu, fate in dui. Pensu chì in dui aghju abbastanza memoria, ma pò esse micca abbastanza per processà deci. Perchè a paura ferma? Perchè u tavulu hè in crescita, è un ghjornu scuntrà una situazione chì, in principiu, ùn hè più per via di un bug, ma per u fattu chì i dati cambiassi in una quantità cusì grande chì simpricimenti ùn aghju micca abbastanza memoria. u servitore. È dopu u servitore cascà in OOM durante a fusione. Inoltre, possu annullà a mutazione, ma a fusione hè andata.

Sapete, quandu si fusiona, u servitore ùn cascà micca in OOM, perchè quandu si fusiona, a quantità di RAM hè aduprata solu per una piccula gamma di dati. Allora tuttu sarà bè, indipendentemente da a quantità di dati.

Vladimir Kolobaev: Va bè. Eccu u mumentu hè cusì chì dopu avemu fattu una correzione di bug, aghju telecaricatu una nova versione per mè stessu, è nantu à una altra tavola, più chjuca, induve ci sò assai partizioni, aghju fattu una operazione simili. È durante a fusione, circa 100 GB di RAM sò stati brusgiati nantu à u servitore. Aviu avutu 150 occupatu, manghjatu 100, è ci era una finestra di 50 GB, perchè ùn aghju micca cascatu in OOM.

Chì ghjè attualmente chì mi prutegge da cascà in OOM se veramente cunsuma 100 GB di RAM? Cosa da fà in una situazione se di colpu a RAM nantu à u merdzh sguassate?

Alexey Milovidov: Ci hè un tali prublema chì u cunsumu di RAM ùn hè micca limitatu à merdzhi. È u sicondu prublema hè chì se una fusione hè stata assignata, allora deve esse eseguita, perchè hè scrittu à u logu di replicazione. U logu di replicazione hè l'azzioni chì sò necessarii per portà a replica in un statu coherente. Se ùn fate micca manipulazioni manuali chì stu logu di replicazione torna, a fusione duverà esse realizata in una manera o l'altra.

Di sicuru, ùn saria micca superfluu per avè una limitazione nantu à a RAM, chì "in casu" pruteghja contru OOM. Ùn aiuterà micca a fusione, cumminciarà di novu, ghjunghje à qualchì soglia, scaccià un'eccezzioni, è poi ripiglià - nunda di bonu ne venerà. Ma in principiu, saria utile à introduci sta restrizzione.

Cumu serà u sviluppu di u driver Golang per ClickHouse?

U driver Golang scrittu da Kirill Shvakov hè avà supportatu ufficialmente da a squadra ClickHouse. Ellu in u repository ClickHouse, avà hè grande è reale.

Una piccula nota. Ci hè un repository maravigliu è amatu di formi nurmali di l'ordine infinitu - questu hè Vertica. Anu ancu u so propiu driver python ufficiale, chì hè mantinutu da i sviluppatori di Vertica. E parechje volte hè accadutu chì e versioni di l'almacenamiento è e versioni di u cunduttore si sò partiti abbastanza bruscamente, è u cunduttore hà cessatu di travaglià in un certu puntu. È u sicondu puntu. U supportu per questu driver ufficiale, mi pari, hè mantinutu da u sistema "nipple" - scrive un prublema per elli, è si ferma per sempre.

Aghju duie dumande. Avà u driver Golang di Kirill hè un modu quasi predeterminatu per cumunicà da Golang cù ClickHouse. A menu chì qualchissia ùn comunica ancu per mezu di l'interfaccia http, perchè li piace assai. Cumu serà sviluppatu stu driver? Serà sincronizatu cù qualchi cambiamenti rotulanti in u repositoriu stessu? E quale hè a prucedura per cunsiderà u prublema?

Kirill Shvakov: U primu hè cumu tuttu hè dispostu burocraticamente. Stu puntu ùn hè statu discutitu, cusì ùn aghju nunda à risponde.

Per risponde à a quistione di u prublema, avemu bisognu di un pocu di storia di u driver. Aghju travagliatu per una cumpagnia chì avia assai dati. Era un spinner di publicità cù un gran numaru di avvenimenti chì avianu da esse guardatu in qualchì locu. È à un certu puntu hè apparsu ClickHouse. Avemu versatu dati in questu, è prima tuttu era bè, ma dopu ClickHouse hè cascatu. À quellu tempu, avemu decisu chì ùn avemu micca bisognu.

Un annu dopu, avemu tornatu à l'idea di usà ClickHouse, è avemu bisognu di qualchì manera di scrive dati quì. L'input era questu - u ferru hè assai debule, ci sò pocu risorse. Ma avemu sempre travagliatu cusì, è per quessa avemu vistu versu u protocolu nativu.

Siccomu travagliavamu in Go, era chjaru chì avemu bisognu di un driver Go. L'aghju fattu quasi à tempu pienu - era u mo travagliu di travagliu. Finu à un certu puntu, l'avemu purtatu, è in principiu, nimu s'aspittava chì qualcunu altru ch'è noi l'utilizassi. Allora CloudFlare hè ghjuntu cù esattamente u listessu prublema, è per un tempu avemu travagliatu assai bè cun elli, perchè avianu i stessi compiti. È avemu fattu sia in ClickHouse stessu è in u driver.

À un certu puntu, aghju solu cessatu di fà, perchè a mo attività in termini di ClickHouse è cù u travagliu hà cambiatu pocu. Dunque i prublemi ùn sò micca chjusi. Periodicamente, e persone chì anu bisognu di qualcosa si impegnanu in u repository. Allora guardu à a dumanda di pull è qualchì volta ancu edità qualcosa per mè stessu, ma questu succede raramente.

Vogliu vultà à u cunduttore. Uni pochi anni fà, quandu tuttu sta cosa hà cuminciatu, ClickHouse era ancu diversu è cù caratteristiche diverse. Avà ci hè una cunniscenza di a manera di rimpruverà u driver per chì hè bonu. Se questu succede, a versione 2 serà incompatibile in ogni modu per via di crutches accumulate.

Ùn sò micca sapè cumu organizà questu. Ùn aghju micca assai tempu per mè stessu. Sì certi pirsuni finiscinu u cunduttore, possu aiutà è li dicu ciò chì deve fà. Ma hè a participazione attiva di Yandex in u sviluppu di u prugettu chì ùn hè micca statu discutitu in ogni modu.

Alexey Milovidov: In fatti, ùn ci hè ancu una burocrazia annantu à questi cunduttori. L'unicu cosa hè chì sò spustati in una urganizazione ufficiale, vale à dì, stu driver hè ricunnisciutu cum'è a soluzione predeterminata ufficiale per Go. Ci sò altri cunduttori, ma venenu separatamente.

Ùn avemu micca sviluppu per questi cunduttori in l'internu. A quistione hè s'ellu pudemu cuntrullà un individuu, micca specificamente per questu mutore, ma per u sviluppu di tutti i cunduttori di a cumunità, o pudemu truvà qualcunu fora.

U dizziunariu esternu ùn hè micca risuscitatu dopu à u reboot cù lazy_load attivatu. Chì fà ?

Avemu u paràmetru lazy_load attivatu, è dopu chì u servitore hè riavviatu, u dizziunariu stessu ùn hè micca risuscitatu. Hè risuscitatu solu dopu chì l'utilizatore accede à stu dizziunariu. È ghjetta un errore nantu à a prima chjamata. Hè pussibule in qualchì manera di carica automaticamente dizziunari usendu ClickHouse, o avete sempre bisognu di cuntrullà a so prontezza per chì l'utilizatori ùn ricevenu micca errore?

Forsi avemu una versione vechja di ClickHouse, cusì u dizziunariu ùn hè micca caricatu automaticamente. Puderia esse ?

Prima, i dizziunari ponu esse caricati in forza cù a dumanda sistema ricarica i dizionari. Siconda, nantu à l'errore - se u dizziunariu hè digià carricu, allora e dumande travaglià nantu à e dati chì sò stati caricati. Se u dizziunariu ùn hè micca stata caricata, allora serà caricata ghjustu à u mumentu di a dumanda.

Per dizziunari pisanti, questu ùn hè micca assai convenientu. Per esempiu, avete bisognu di piglià un milione di fila da MySQL. Qualchissia face una selezzione simplice, ma questa selezzione aspittà per u listessu milione di fila. Ci sò dui suluzioni quì. U primu hè di disattivà lazy_load. U sicondu hè quandu u servitore s'arrizza, prima di accende a carica nantu à questu, fate dizziunariu di ricaricamentu di u sistema o solu eseguisce una dumanda chì usa un dizziunariu. Allora u dizziunariu serà caricatu. Avete bisognu di cuntrullà a dispunibilità di dizionari cù l'impostazione lazy_load attivata, perchè ClickHouse ùn li tira micca automaticamente.

A risposta à l'ultima quistione hè o a versione hè vechja, o deve esse debugged.

Chì ci hè di u fattu chì i dizionari di ricaricamentu di u sistema ùn caricanu nisunu di i tanti dizziunarii se almenu unu d'elli crash with an error?

Ci hè una altra quistione nantu à i dizionari di ricaricamentu di u sistema. Avemu dui dizziunari - unu ùn hè micca carricu, u sicondu hè carricu. I dizziunari di ricaricamentu di u sistema in questu casu ùn caricanu micca un dizziunariu, è avete a carica di puntu à puntu un specificu cù u so nome utilizendu u dizziunariu di ricaricamentu di u sistema. Hè ancu legatu à a versione ClickHouse?

Vogliu piacè. Stu cumpurtamentu hà cambiatu. Allora, se aghjurnà ClickHouse, cambierà ancu. Se ùn site micca cuntentu di u cumpurtamentu attuale sistema ricarica i dizionari, aghjurnà, è speremu chì cambierà per u megliu.

Ci hè un modu per cunfigurà i dettagli in a cunfigurazione di ClickHouse, ma ùn li lampassi micca nantu à l'errori?

A prossima quistione hè nantu à l'errori ligati à u dizziunariu, à dì i dettagli. Avemu registratu i dettagli di cunnessione in a cunfigurazione ClickHouse à u dizziunariu, è in casu d'errore, ricevemu sti dettagli è a password in risposta.

Avemu risoltu stu errore aghjunghjendu dettagli à a cunfigurazione di u driver ODBC. Ci hè un modu per cunfigurà i dettagli in a cunfigurazione di ClickHouse, ma micca per splende questi dettagli nantu à l'errori?

Quì, a suluzione hè veramente - per specificà queste credenziali in odbc.ini, è in ClickHouse stessu, specificate solu u Nome di a Fonte di Dati ODBC. Questu ùn succede micca per altre fonti di dizziunariu - nè per un dizziunariu cù MySQL, nè per u restu, ùn deve micca vede a password in u messagiu d'errore. Per ODBC, aghju ancu circà - s'ellu ci hè una cosa cusì, basta à caccià.

Bonus: sfondi per Zuma da riunioni

Cliccà nantu à a stampa per i lettori più persistenti, sfondi bonus da riunioni si apriranu. Mette u focu inseme cù e mascotte di a tecnulugia di Avito, cunferendu cù i culleghi da a stanza di l'amministratore di u sistema o un club di computer di l'antica scola, è tenendu un ghjornu sottu à u ponte contru u sfondate di graffiti.

ClickHouse per utilizatori avanzati in dumande è risposte

Source: www.habr.com

Add a comment