Истифодаи самараноки ClickHouse. Алексей Миловидов (Яндекс)

Истифодаи самараноки ClickHouse. Алексей Миловидов (Яндекс)

Азбаски ClickHouse системаи махсусгардонидашуда аст, ҳангоми истифодаи он хусусиятҳои меъмории онро ба назар гирифтан муҳим аст. Дар ин гузориш, Алексей дар бораи мисолҳои хатогиҳои маъмулӣ ҳангоми истифодаи ClickHouse, ки метавонад ба кори бесамар оварда расонад, нақл мекунад. Бо истифода аз мисолҳои амалӣ, мо нишон медиҳем, ки чӣ гуна интихоби ин ё он схемаи коркарди маълумот метавонад корҳоро аз рӯи фармоишҳои бузург тағйир диҳад.

Салом ба ҳама! Номи ман Алексей, ман ClickHouse месозам.

Истифодаи самараноки ClickHouse. Алексей Миловидов (Яндекс)

Аввалан, ман мешитобам, ки фавран шуморо писанд кунам, ман имрӯз ба шумо намегӯям, ки ClickHouse чист. Рости гап, ман аз ин безор шудаам. Ман ба шумо ҳар дафъа мегӯям, ки ин чист. Ва эҳтимолан ҳама медонанд.

Истифодаи самараноки ClickHouse. Алексей Миловидов (Яндекс)

Ба ҷои ин, ман ба шумо мегӯям, ки рейки имконпазир чист, яъне чӣ гуна ClickHouse-ро нодуруст истифода бурдан мумкин аст. Дар асл, шумо набояд тарсид, зеро мо ClickHouse-ро ҳамчун системае таҳия мекунем, ки оддӣ, қулай ва берун аз қуттӣ кор мекунад. Ҳама чиз насб карда шуд, ҳеҷ мушкиле нест.

Аммо ба ҳар ҳол, бояд дар назар дошт, ки ин система махсус аст ва шумо метавонед ба осонӣ ба ҳолати ғайриоддӣ дучор шавед, ки ин системаро аз минтақаи бароҳати худ берун мекунад.

Пас, рагҳо чист? Асосан ман дар бораи чизҳои аён гап мезанам. Ҳама чиз ба ҳама аён аст, ҳама чизро мефаҳмад ва метавонад шод шавад, ки онҳо ин қадар оқил ҳастанд ва онҳое, ки намефаҳманд, чизи навро меомӯзанд.

Истифодаи самараноки ClickHouse. Алексей Миловидов (Яндекс)

Аввалин мисоли оддитарин, ки мутаассифона, аксар вақт рух медиҳад, шумораи зиёди замимаҳо бо партияҳои хурд, яъне шумораи зиёди замимаҳои хурд мебошанд.

Агар мо дида бароем, ки чӣ тавр ClickHouse варақаро иҷро мекунад, пас шумо метавонед дар як дархост ҳадди аққал терабайт маълумот фиристед. Ин мушкил нест.

Ва биёед бубинем, ки иҷрои маъмулӣ чӣ гуна хоҳад буд. Масалан, мо ҷадвал дорем, ки маълумоти Yandex.Metrics дорад. Хит. 105 баъзе сутунҳо. 700 байт фишурда нашудааст. Ва мо ба таври хуб партияҳои як миллион сатрро ворид хоҳем кард.

Мо ба ҷадвали MergeTree ворид мекунем, дар як сония ним миллион сатр ба даст оварда мешавад. бузург. Дар ҷадвали такрорӣ - он каме камтар хоҳад буд, тақрибан 400 сатр дар як сония.

Ва агар шумо варақаи кворумро фаъол созед, шумо каме камтар, аммо ба ҳар ҳол иҷрои хуб мегиред, 250 маротиба дар як сония. Ҷойгиркунии кворум як хусусияти ҳуҷҷатнашуда дар ClickHouse* аст.

* аз соли 2020, аллакай ҳуҷҷатгузорӣ шудааст.

Истифодаи самараноки ClickHouse. Алексей Миловидов (Яндекс)

Агар шумо ин корро нодуруст кунед, чӣ мешавад? Мо як сатрро ба ҷадвали MergeTree дохил мекунем ва дар як сония 59 сатр мегирем. Ин 10 маротиба суст аст. Дар ReplicatedMergeTree - 000 сатр дар як сония. Ва агар кворум фаъол шавад, дар як сония 6 сатр ба даст меояд. Ба андешаи ман, ин як навъ ифлосии комил аст. Чӣ тавр шумо метавонед ин тавр суст шавед? Он ҳатто дар футболкаи ман гуфта мешавад, ки ClickHouse набояд суст шавад. Аммо ба ҳар ҳол ин баъзан рӯй медиҳад.

Истифодаи самараноки ClickHouse. Алексей Миловидов (Яндекс)

Дар хакикат, ин камбудии мост. Мо метавонистем онро хуб кор кунем, аммо ин тавр нашуд. Ва мо не, зеро скрипти мо ба он ниёз надошт. Мо аллакай даста доштем. Мо танҳо партияҳоро дар даромадгоҳ гирифтем ва ҳеҷ мушкиле надоштем. Онро пайваст кунед ва ҳама чиз хуб кор мекунад. Аммо, албатта, ҳама гуна сенарияҳо имконпазиранд. Масалан, вақте ки шумо як қатор серверҳо доред, ки дар онҳо маълумот тавлид мешавад. Ва онҳо зуд-зуд маълумот ворид намекунанд, аммо онҳо ба ҳар ҳол зуд-зуд ворид мешаванд. Ва шумо бояд бо кадом роҳе аз ин пешгирӣ кунед.

Аз нуқтаи назари техникӣ, хулоса ин аст, ки вақте ки шумо дар ClickHouse ворид мекунед, маълумот ба ягон ҷадвали хотиравӣ ворид намешавад. Мо ҳатто як сохтори воқеии MergeTree надорем, балки танҳо як MergeTree, зеро дар он ҷо на log ва на memTable. Мо танҳо фавран маълумотро ба системаи файлӣ менависем, ки аллакай ба сутунҳо тақсим карда шудаанд. Ва агар шумо 100 сутун дошта бошед, пас зиёда аз 200 файл бояд ба директорияи алоҳида навишта шаванд. Хамаи ин хеле душвор аст.

Истифодаи самараноки ClickHouse. Алексей Миловидов (Яндекс)

Ва саволе ба миён меояд: "Чӣ тавр ин корро дуруст кардан мумкин аст?" Агар чунин вазъият ба шумо лозим аст, ки ба ҳар ҳол маълумотро ба ClickHouse нависед.

Усули 1. Ин роҳи осонтарин аст. Як навъ навбати тақсимшударо истифода баред. Масалан, Кафка. Шумо танҳо аз Кафка маълумот мегиред, мо онро дар як сония як бор ҷамъ мекунем. Ва ҳама чиз хуб мешавад, шумо сабт мекунед, ҳама чиз хуб кор мекунад.

Камбудиҳо дар он аст, ки Кафка системаи дигари тақсимшудаи вазнин аст. Ман инчунин мефаҳмам, ки оё шумо аллакай дар ширкати худ Кафка доред. Ин хуб аст, он қулай аст. Аммо агар он вуҷуд надошта бошад, шумо бояд пеш аз кашола кардани системаи дигари тақсимшуда ба лоиҳаи худ се маротиба фикр кунед. Ва аз ин рӯ, ба назар гирифтани алтернативаҳо меарзад.

Истифодаи самараноки ClickHouse. Алексей Миловидов (Яндекс)

Усули 2. Дар ин ҷо як алтернативаи кӯҳна ва дар айни замон хеле содда аст. Оё шумо ягон сервер доред, ки гузоришҳои шуморо тавлид мекунад. Ва он танҳо сабтҳои шуморо ба файл менависад. Ва як маротиба дар як сония, масалан, мо ин файлро тағир медиҳем, файли навро кушоем. Ва скрипти алоҳида ё аз ҷониби cron ё ягон демон қадимтарин файлро мегирад ва онро ба ClickHouse менависад. Агар шумо дар як сония як бор гузориш нависед, ҳамааш хуб мешавад.

Аммо камбудии ин усул дар он аст, ки агар сервери шумо, ки дар он гузоришҳо тавлид мешаванд, дар ҷое нопадид шуда бошад, он гоҳ маълумот низ нопадид мешавад.

Истифодаи самараноки ClickHouse. Алексей Миловидов (Яндекс)

Усули 3. Боз як роҳи ҷолиб вуҷуд дорад, ки он умуман бидуни файлҳои муваққатӣ аст. Масалан, шумо як намуди спиннери таблиғотӣ ё ягон демони ҷолибе доред, ки маълумот тавлид мекунад. Ва шумо метавонед як хӯшаи маълумотро мустақиман дар RAM, дар буфер ҷамъ кунед. Ва ҳангоме ки миқдори кофии вақт мегузарад, шумо ин буферро як сӯ мегузоред, нав эҷод кунед ва он чизеро, ки аллакай дар ClickHouse ҷамъ шудааст, дар риштаи алоҳида ҷойгир кунед.

Аз тарафи дигар, маълумот инчунин бо kill -9 нопадид мешавад. Агар сервери шумо хомӯш шавад, шумо ин маълумотро гум мекунед. Ва мушкилоти дигар ин аст, ки агар шумо ба базаи маълумот навишта натавонистед, пас маълумоти шумо дар RAM ҷамъ мешавад. Ва ё RAM тамом мешавад, ё шумо танҳо маълумотро гум мекунед.

Истифодаи самараноки ClickHouse. Алексей Миловидов (Яндекс)

Усули 4. Боз як роҳи ҷолиб. Оё шумо ягон раванди сервер доред. Ва ӯ метавонад якбора маълумотро ба ClickHouse фиристад, аммо онро дар як пайваст иҷро кунед. Масалан, ман дархости http-ро бо рамзгузории интиқол фиристодам: пора бо воридкунӣ. Ва он порчаҳоро хеле кам тавлид мекунад, шумо метавонед ҳар як сатрро фиристед, гарчанде ки барои чаҳорчӯбаи ин маълумот хароҷоти изофӣ вуҷуд дорад.

Аммо, дар ин ҳолат, маълумот фавран ба ClickHouse фиристода мешавад. Ва худи ClickHouse онҳоро буфер мекунад.

Аммо мушкилот низ вуҷуд доранд. Акнун шумо маълумотро аз даст медиҳед, аз он ҷумла ҳангоми кушта шудани раванди шумо ва агар раванди ClickHouse кушта шавад, зеро он як замимаи нопурра хоҳад буд. Ва дар ClickHouse замимаҳо то ҳадди муайяни андозаи сатрҳо атомӣ мебошанд. Дар асл, ин роҳи ҷолиб аст. Инчунин истифода бурдан мумкин аст.

Истифодаи самараноки ClickHouse. Алексей Миловидов (Яндекс)

Усули 5. Дар ин ҷо боз як роҳи ҷолиб аст. Ин як навъ сервери аз ҷониби ҷомеа таҳияшуда барои ҷамъоварии маълумот мебошад. Ман худам онро надидаам, бинобар ин ман чизеро кафолат дода наметавонам. Аммо, барои худи ClickHouse ҳеҷ гуна кафолат вуҷуд надорад. Ин ҳам манбаи кушода аст, аммо аз тарафи дигар, шумо метавонед ба баъзе стандартҳои сифат, ки мо кӯшиш мекунем пешниҳод кунем, одат кунед. Аммо барои ин - ман намедонам, ба GitHub равед, ба код нигаред. Шояд онҳо чизи хубе навиштаанд.

*аз соли 2020 низ бояд ба назар гирифта шавад Хонаи гурбача.

Истифодаи самараноки ClickHouse. Алексей Миловидов (Яндекс)

Усули 6. Роҳи дигар ин истифодаи ҷадвалҳои буферӣ мебошад. Бартарии ин усул дар он аст, ки оғоз кардани он хеле осон аст. Ҷадвали буферӣ созед ва ба он дохил кунед.

Аммо камбудй дар он аст, ки масъала пурра хал нашудааст. Агар бо суръати навъи MergeTree шумо бояд маълумотро аз рӯи як партия дар як сония гурӯҳбандӣ кунед, пас бо суръати дар ҷадвали буферӣ, шумо бояд ҳадди аққал то якчанд ҳазор дар як сония гурӯҳбандӣ кунед. Агар дар як сония зиёда аз 10 000 бошад, он ҳанӯз ҳам бад хоҳад буд. Ва агар шумо ба гурӯҳҳо дохил кунед, шумо мебинед, ки дар як сония сад ҳазор сатр ба даст оварда мешавад. Ва ин аллакай дар маълумоти хеле вазнин аст.

Ва инчунин ҷадвалҳои буферӣ сабт надоранд. Ва агар дар сервери шумо чизе хато бошад, пас маълумот гум мешавад.

Истифодаи самараноки ClickHouse. Алексей Миловидов (Яндекс)

Ва ҳамчун бонус, мо ба наздикӣ имкон доштем, ки маълумотро аз Кафка дар ClickHouse ҷамъ кунем. Дар он ҷо як муҳаррики мизи - Кафка. Шумо танҳо эҷод мекунед. Ва шумо метавонед дар он назари моддӣ овезон кунед. Дар ин ҳолат, ӯ маълумотро аз Кафка хориҷ мекунад ва ба ҷадвалҳои ба шумо лозимӣ дохил мекунад.

Ва алалхусус он чизе, ки ин имкониятро шод мегардонад, он аст, ки мо онро ба даст наовардаем. Ин хусусияти ҷомеа аст. Ва ҳангоме ки ман "хусусияти ҷомеа" мегӯям, ман онро бидуни таҳқир мегӯям. Мо кодро хондем, баррасӣ кардем, он бояд хуб кор кунад.

* аз соли 2020, чунин дастгирӣ вуҷуд дорад Харгӯш.

Истифодаи самараноки ClickHouse. Алексей Миловидов (Яндекс)

Ҳангоми ворид кардани маълумот боз чӣ метавонад нороҳат ё ғайричашмдошт бошад? Агар шумо дархости арзишҳоро ворид кунед ва дар арзишҳо баъзе ифодаҳои ҳисобшударо нависед. Масалан, now() низ ифодаи арзёбӣшуда аст. Ва дар ин ҳолат, ClickHouse маҷбур мешавад, ки тарҷумони ин ифодаҳоро барои ҳар як сатр оғоз кунад ва иҷроиш бо фармоишҳои бузург коҳиш хоҳад ёфт. Беҳтар аз он пешгирӣ кунед.

* дар айни замон, масъала комилан ҳал шудааст, ҳангоми истифодаи ифодаҳо дар VALUES дигар регрессияи иҷроиш вуҷуд надорад.

Мисоли дигаре, ки дар он мушкилот вуҷуд дорад, ин аст, ки маълумоти шумо дар як партия ба як қатор қисмҳо тааллуқ дорад. Бо нобаёнӣ, қисмҳои ClickHouse аз рӯи моҳ. Ва агар шумо як партияи як миллион сатрро ворид кунед ва дар тӯли якчанд сол маълумот мавҷуд аст, пас шумо дар он ҷо якчанд даҳҳо қисмҳо хоҳед дошт. Ва ин ба он баробар аст, ки партияҳо якчанд даҳ маротиба хурдтар хоҳанд буд, зеро дар дохили онҳо ҳамеша аввал ба қисмҳо тақсим карда мешаванд.

* ба наздикӣ дар ClickHouse дар реҷаи таҷрибавӣ дастгирии формати паймонҳои порчаҳо ва порчаҳо дар RAM бо сабти пешакӣ илова карда шуд, ки ин мушкилотро қариб пурра ҳал мекунад.

Истифодаи самараноки ClickHouse. Алексей Миловидов (Яндекс)

Акнун намуди дуюми мушкилот - чопкунии маълумотро баррасӣ кунед.

Навиштани маълумот метавонад сахт ва баъзан сатр бошад. Сатр - ин вақтест, ки шумо навакак гирифтаед ва эълон кардед, ки шумо ҳама майдонҳои навъи сатр доред. Дардовар аст. Шумо набояд ин корро кунед.

Биёед бифаҳмем, ки чӣ тавр ин корро дуруст кардан мумкин аст, дар ҳолатҳое, ки шумо мехоҳед бигӯед, ки мо ягон майдон, сатр дорем ва бигзор ClickHouse онро мустақилона муайян кунад, аммо ман ваннаи буғӣ намегирам. Аммо он ҳанӯз ҳам саъю кӯшиш кардан лозим аст.

Истифодаи самараноки ClickHouse. Алексей Миловидов (Яндекс)

Масалан, мо суроғаи IP дорем. Дар як ҳолат, мо онро ҳамчун сатр захира кардем. Масалан, 192.168.1.1. Дар акси ҳол, он як қатор навъи UInt32 * хоҳад буд. 32 бит барои суроғаи IPv4 кифоя аст.

Аввалан, аҷиб аст, ки маълумот тақрибан якхела фишурда мешавад. Албатта, фарқият хоҳад буд, аммо он қадар калон нест. Ҳамин тавр, дар диски I/O ягон мушкилоти махсус вуҷуд надорад.

Аммо дар вақти CPU ва вақти иҷрои дархост фарқияти ҷиддӣ вуҷуд дорад.

Биёед шумораи суроғаҳои IP-и беназирро ҳисоб кунем, агар онҳо ҳамчун рақам нигоҳ дошта шаванд. Дар як сония 137 миллион хат мебарояд. Агар ҳамон сатрҳо бошад, пас 37 миллион сатр дар як сония. Намедонам, чаро ин тасодуф рух дод. Ман худам ин дархостҳоро иҷро кардам. Аммо бо вуҷуди ин тақрибан 4 маротиба сусттар аст.

Ва агар шумо фарқияти фазои дискро ҳисоб кунед, пас фарқият вуҷуд дорад. Ва фарқият тақрибан чоряк аст, зеро суроғаҳои IP-и беназир хеле зиёданд. Ва агар сатрҳои дорои миқдори ками арзишҳои гуногун вуҷуд дошта бошанд, пас онҳо оромона дар луғат тақрибан ба як ҳаҷм фишурда мешуданд.

Ва тафовути чоркаратаи вақт дар роҳ хобида нест. Шояд шумо, албатта, парвое надоред, аммо вақте чунин фарқиятро мебинам, ғамгин мешавам.

Истифодаи самараноки ClickHouse. Алексей Миловидов (Яндекс)

Биёед ҳолатҳои гуногунро баррасӣ кунем.

1. Як ҳолате, ки шумо чанд арзишҳои беназири гуногун доред. Дар ин ҳолат, мо як таҷрибаи оддиеро истифода мебарем, ки шумо эҳтимол медонед ва онро барои ҳама гуна DBMS истифода бурда метавонед. Ин ҳама на танҳо барои ClickHouse маъно дорад. Танҳо идентификаторҳои рақамиро ба пойгоҳи додаҳо нависед. Ва шумо метавонед ба сатрҳо ва бозгашт дар паҳлӯи барномаи худ табдил диҳед.

Масалан, шумо як минтақа доред. Ва шумо кӯшиш мекунед, ки онро ҳамчун сатр захира кунед. Ва он ҷо навишта мешавад: Москва ва вилояти Маскав. Ва вакте мебинам, ки дар он чо «Москва» навишта шудааст, пас ин хануз хеч нест ва вакте ки МО аст, ягон хел аламовар мешавад. Ин қадар байт аст.

Ба ҷои ин, мо танҳо рақами Ulnt32 ва 250-ро менависем. Мо дар Яндекс 250 дорем, аммо рақами шумо метавонад гуногун бошад. Дар ҳар сурат, ман мегӯям, ки ClickHouse дорои қобилияти дарунсохт барои кор бо геобаза мебошад. Шумо танҳо як феҳристро бо минтақаҳо, аз ҷумла як иерархӣ нависед, яъне дар он ҷо Маскав, вилояти Маскав ва ҳама чизҳое, ки ба шумо лозиманд, хоҳанд буд. Ва шумо метавонед дар сатҳи дархост табдил диҳед.

Истифодаи самараноки ClickHouse. Алексей Миловидов (Яндекс)

Варианти дуюм тақрибан якхела аст, аммо бо дастгирии дар дохили ClickHouse. Ин як навъи маълумоти Enum аст. Шумо танҳо тамоми арзишҳои лозимиро дар дохили Enum нависед. Масалан, намуди дастгоҳ ва дар он ҷо нависед: мизи корӣ, мобилӣ, планшет, телевизор. Танҳо 4 вариант.

Камбудӣ дар он аст, ки шумо бояд давра ба давра тағир диҳед. Танҳо як вариант илова карда шудааст. Мо ҷадвали тағирёбанда мекунем. Дар асл, тағир додани ҷадвал дар ClickHouse ройгон аст. Махсусан барои Enum ройгон аст, зеро маълумот дар диск тағир намеёбад. Аммо бо вуҷуди ин, тағирот дар ҷадвал қулфи * пайдо мекунад ва бояд то анҷоми ҳама интихобҳо интизор шавад. Ва танҳо пас аз ин тағирот иҷро карда мешавад, яъне, ҳанӯз ҳам баъзе нороҳатиҳо вуҷуд доранд.

* дар версияҳои охирини ClickHouse, ALTER комилан бебанд карда шудааст.

Истифодаи самараноки ClickHouse. Алексей Миловидов (Яндекс)

Варианти дигаре, ки барои ClickHouse хеле беназир аст, пайвасти луғатҳои беруна мебошад. Шумо метавонед рақамҳоро дар ClickHouse нависед ва директорияҳои худро дар ҳама гуна системаи барои шумо мувофиқ нигоҳ доред. Масалан, шумо метавонед истифода баред: MySQL, Mongo, Postgres. Шумо ҳатто метавонед микросервиси шахсии худро эҷод кунед, ки ин маълумотро тавассути http ирсол мекунад. Ва дар сатҳи ClickHouse, шумо функсияеро менависед, ки ин маълумотро аз рақамҳо ба сатр табдил медиҳад.

Ин як роҳи махсусгардонидашуда, вале хеле самараноки иҷро кардани пайвастшавӣ дар ҷадвали беруна аст. Ва ду вариант вуҷуд дорад. Дар як вариант, ин маълумот пурра кэш карда мешавад, пурра дар RAM мавҷуд аст ва дар баъзе фосилаҳо нав карда мешавад. Ва дар варианти дигар, агар ин маълумот ба RAM мувофиқат накунад, шумо метавонед онро қисман кэш кунед.

Ана як мисол. Yandex.Direct мавҷуд аст. Ва ширкати таблиғотӣ ва баннерҳо вуҷуд дорад. Эҳтимол, даҳҳо миллион ширкатҳои таблиғотӣ вуҷуд доранд. Ва тақрибан дар RAM мувофиқат мекунад. Ва миллиардҳо баннерҳо ҳастанд, онҳо мувофиқ нестанд. Ва мо луғати кэшшударо аз MySQL истифода мебарем.

Ягона мушкилот дар он аст, ки луғати кэшшуда хуб кор хоҳад кард, агар суръати зарба ба 100% наздик бошад. Агар он хурдтар бошад, пас ҳангоми коркарди дархостҳо барои ҳар як бастаи додаҳо, воқеан калидҳои гумшударо гирифтан ва барои гирифтани маълумот аз MySQL рафтан лозим меояд. Дар бораи ClickHouse, ман то ҳол кафолат дода метавонам, ки - бале, он суст намешавад, ман дар бораи системаҳои дигар гап намезанам.

Ва ҳамчун бонус, луғатҳо як роҳи хеле осони навсозии маълумот дар ClickHouse мебошанд. Яъне, шумо дар бораи ширкатҳои таблиғотӣ гузориш доштед, корбар танҳо ширкати таблиғотиро иваз кард ва дар ҳама маълумоти кӯҳна, дар ҳама гузоришҳо, ин маълумот низ тағйир ёфт. Агар шумо бевосита ба ҷадвал сатрҳо нависед, шумо наметавонед онҳоро навсозӣ кунед.

Истифодаи самараноки ClickHouse. Алексей Миловидов (Яндекс)

Роҳи дигар, вақте ки шумо намедонед, ки идентификаторҳои сатрҳои худро аз куҷо дарёфт кунед. шумо метавонед танҳо ҳаш. Ва осонтарин вариант ин гирифтани хэши 64-бит мебошад.

Ягона мушкилот дар он аст, ки агар хэш 64-бит бошад, пас шумо қариб албатта бархӯрд хоҳед дошт. Зеро агар як миллиард сатр вуҷуд дошта бошад, пас эҳтимолият аллакай моддӣ мешавад.

Ва ин хел номҳои ширкатҳои таблиғотиро ҳаш кардан хуб нест. Агар маъракаҳои таблиғотии ширкатҳои гуногун омехта шаванд, он гоҳ чизи нофаҳмо пайдо мешавад.

Ва як ҳиллаи оддӣ вуҷуд дорад. Дуруст аст, ки он барои маълумоти ҷиддӣ низ чандон мувофиқ нест, аммо агар чизе он қадар ҷиддӣ набошад, пас ба калиди луғат идентификатори дигари муштариро илова кунед. Ва он гоҳ шумо бархӯрд хоҳед дошт, аммо танҳо дар дохили як муштарӣ. Ва мо ин усулро барои харитаи пайванд дар Yandex.Metrica истифода мебарем. Мо дар он ҷо URL-ҳо дорем, мо хэшҳоро нигоҳ медорем. Ва мо медонем, ки низоъҳо ҳастанд, албатта. Аммо вақте ки саҳифа намоиш дода мешавад, пас эҳтимолияти он, ки он дар як саҳифа барои як корбар вуҷуд дорад, ки баъзе URL-ҳо ба ҳам мепайвандад ва ин мушоҳида мешавад, пас инро сарфи назар кардан мумкин аст.

Ҳамчун бонус, барои бисёре аз амалиётҳо танҳо хэшҳо кофӣанд ва худи сатрҳо дар ҳеҷ ҷо нигоҳ дошта намешаванд.

Истифодаи самараноки ClickHouse. Алексей Миловидов (Яндекс)

Мисоли дигар, агар сатрҳо кӯтоҳ бошанд, ба монанди доменҳои вебсайт. Онҳо метавонанд ҳамчун нигоҳ дошта шаванд. Ё, масалан, забони браузери ru 2 байт аст. Албатта, ба байтҳо дилам мехӯрад, аммо хавотир нашав, 2 байт алам нест. Лутфан онро тавре нигоҳ доред, хавотир нашавед.

Истифодаи самараноки ClickHouse. Алексей Миловидов (Яндекс)

Ҳолати дигар ин аст, ки, баръакс, сатрҳои зиёд вуҷуд доранд ва дар айни замон дар онҳо шумораи зиёди беназир вуҷуд доранд ва ҳатто маҷмӯи эҳтимолан номаҳдуд аст. Намунаи маъмулӣ ибораҳои ҷустуҷӯ ё URL мебошад. Ҷустуҷӯи ибораҳо, аз ҷумла аз сабаби хатогиҳо. Биёед бубинем, ки дар як рӯз чанд ибораи ҷустуҷӯии беназир. Ва маълум мешавад, ки онхо кариб нисфи тамоми ходисахо мебошанд. Ва дар ин ҳолат, шумо шояд фикр кунед, ки шумо бояд маълумотро ба эътидол оваред, идентификаторҳоро ҳисоб кунед ва онҳоро дар ҷадвали алоҳида ҷойгир кунед. Аммо ба шумо лозим нест, ки ин корро кунед. Танҳо ин сатрҳоро тавре нигоҳ доред.

Беҳтараш - чизе ихтироъ накунед, зеро агар шумо онро алоҳида нигоҳ доред, шумо бояд пайваст кунед. Ва ин пайвастшавӣ дар беҳтарин дастрасии тасодуфӣ ба хотира аст, агар он то ҳол дар хотира мувофиқат кунад. Агар он мувофиқат накунад, дар маҷмӯъ мушкилот ба миён меояд.

Ва агар маълумот дар ҷои худ нигоҳ дошта шавад, онҳо танҳо бо тартиби дуруст аз системаи файлӣ хонда мешаванд ва ҳама чиз хуб аст.

Истифодаи самараноки ClickHouse. Алексей Миловидов (Яндекс)

Агар шумо URL-ҳо ё дигар сатри мураккаби дароз дошта бошед, пас шумо бояд дар бораи он фикр кунед, ки шумо метавонед каме фишурдаҳоро пешакӣ ҳисоб кунед ва онро дар сутуни алоҳида нависед.

Барои URL-ҳо, масалан, шумо метавонед доменро алоҳида нигоҳ доред. Ва агар ба шумо воқеан домен лозим бошад, пас танҳо ин сутунро истифода баред, ва URL-ҳо дурӯғ хоҳанд буд ва шумо ҳатто ба онҳо даст нахоҳед дод.

Биёед бубинем, ки фарқият чист. ClickHouse дорои функсияи махсусест, ки доменро ҳисоб мекунад. Ин хеле зуд аст, мо онро оптимизатсия кардем. Ва, ростқавлона, он ҳатто ба RFC мувофиқат намекунад, аммо бо вуҷуди ин ҳама чизеро, ки ба мо лозим аст, баррасӣ мекунад.

Ва дар як ҳолат, мо танҳо URL-ро мегирем ва доменро ҳисоб мекунем. Он 166 миллисония мешавад. Ва агар шумо домени тайёрро гиред, он танҳо 67 миллисония, яъне қариб се маротиба тезтар мешавад. Ва тезтар, на аз он сабаб, ки мо бояд баъзе ҳисобҳоро анҷом диҳем, балки барои он ки мо маълумотро камтар хонем.

Бо баъзе сабабҳо, як дархост, ки сусттар аст, суръати бештар дар гигабайт дар як сония мегирад. Зеро он гигабайт бештар мехонад. Ин маълумоти комилан зиёдатист. Чунин ба назар мерасад, ки дархост тезтар иҷро мешавад, аммо барои анҷом додани он вақти зиёдтар мегирад.

Ва агар шумо ба миқдори маълумот дар диск назар кунед, маълум мешавад, ки URL 126 мегабайт ва домен ҳамагӣ 5 мегабайт аст. 25 баробар кам мешавад. Аммо, дархост ҳоло ҳам танҳо 4 маротиба тезтар аст. Аммо ин аз он сабаб аст, ки маълумот гарм аст. Ва агар он сард мебуд, он гоҳ эҳтимолан аз ҳисоби диски I/O 25 маротиба тезтар мешуд.

Дар омади гап, агар шумо баҳо диҳед, ки домен аз URL чӣ қадар камтар аст, пас он тақрибан 4 маротиба бармеояд Аммо бо баъзе сабабҳо, маълумот дар диск 25 маротиба камтар мегирад. Чаро? Аз сабаби компрессия. Ва url фишурда шудааст ва домен фишурда мешавад. Аммо аксар вақт URL дорои як хӯшаи ахлот аст.

Истифодаи самараноки ClickHouse. Алексей Миловидов (Яндекс)

Ва, албатта, истифодаи намудҳои дурусти додаҳо, ки махсусан барои арзишҳои дуруст ё мувофиқ тарҳрезӣ шудаанд, меарзад. Агар шумо дар IPv4 бошед, UInt32 * -ро захира кунед. Агар IPv6 бошад, пас FixedString(16), зеро суроғаи IPv6 128 бит аст, яъне бевосита дар формати дуӣ нигоҳ доред.

Аммо чӣ мешавад, агар шумо баъзан суроғаҳои IPv4 ва баъзан IPv6 дошта бошед? Бале, шумо метавонед ҳардуро нигоҳ доред. Як сутун барои IPv4, дигаре барои IPv6. Албатта, имкони харитаи IPv4 ба IPv6 вуҷуд дорад. Ин ҳам кор хоҳад кард, аммо агар ба шумо аксар вақт дар дархостҳои худ суроғаи IPv4 лозим бошад, хуб мебуд, ки онро дар сутуни алоҳида ҷойгир кунед.

* Ҳоло ClickHouse дорои намудҳои алоҳидаи IPv4, IPv6 додаҳо мебошад, ки маълумотро ҳамчун рақамҳо самаранок нигоҳ медоранд, аммо онҳоро ҳамчун сатрҳо бароҳат муаррифӣ мекунанд.

Истифодаи самараноки ClickHouse. Алексей Миловидов (Яндекс)

Инчунин қайд кардан муҳим аст, ки пешакӣ коркарди маълумот бамаврид аст. Масалан, баъзе логҳои хом ба шумо меоянд. Ва, шояд, шумо набояд онҳоро фавран ба ClickHouse гузоред, гарчанде ки ҳеҷ кор кардан хеле ҷолиб аст ва ҳама чиз кор хоҳад кард. Аммо ба ҳар ҳол меарзад, ки он ҳисобҳои имконпазирро анҷом диҳед.

Масалан, версияи браузер. Дар баъзе шӯъбаи ҳамсоя, ки ман намехоҳам ангушти онро нишон диҳам, версияи браузер дар он ҷо чунин нигоҳ дошта мешавад, яъне ҳамчун сатр: 12.3. Ва он гоҳ, барои таҳияи гузориш, онҳо ин сатрро гирифта, ба массив ва сипас ба элементи якуми массив тақсим мекунанд. Табиист, ки ҳама чиз суст мешавад. Ман пурсидам, ки чаро ин корро мекунанд. Онҳо ба ман гуфтанд, ки оптимизатсияи бармаҳалро дӯст намедоранд. Ва ман пессимизми бармаҳалро дӯст намедорам.

Пас дар ин маврид ба 4 сутун таксим кардан дурусттар мебуд. Дар ин ҷо натарсед, зеро ин ClickHouse аст. ClickHouse махзани сутун аст. Ва сутунҳои хурдтар чӣ қадар тозатар бошанд, ҳамон қадар беҳтар аст. 5 BrowserVersion хоҳад буд, 5 сутун созед. Ин хуб аст.

Истифодаи самараноки ClickHouse. Алексей Миловидов (Яндекс)

Акнун фикр кунед, ки агар шумо сатрҳои хеле дароз ва массивҳои хеле дароз дошта бошед, чӣ бояд кард. Онҳо умуман лозим нест, ки дар ClickHouse нигоҳ дошта шаванд. Ба ҷои ин, шумо метавонед танҳо баъзе идентификаторҳоро дар ClickHouse нигоҳ доред. Ва ин хатҳои дароз онҳоро ба ягон системаи дигар тела медиҳанд.

Масалан, яке аз хидматҳои таҳлилии мо дорои баъзе параметрҳои ҳодиса мебошад. Ва агар параметрҳои зиёде ба рӯйдодҳо ворид шаванд, мо танҳо 512-и аввалро, ки дучор меоянд, захира мекунем, зеро 512 афсӯс нест.

Истифодаи самараноки ClickHouse. Алексей Миловидов (Яндекс)

Ва агар шумо дар бораи намудҳои додаҳои худ қарор қабул карда натавонед, шумо инчунин метавонед маълумотро ба ClickHouse нависед, аммо ба ҷадвали муваққатии навъи Log, ки барои маълумоти муваққатӣ махсус аст. Пас аз он, шумо метавонед таҳлил кунед, ки чӣ гуна тақсимоти арзишҳо дар он ҷо доред, он чизе ки умуман вуҷуд дорад ва намудҳои дурустро ташкил медиҳад.

* Ҳоло ClickHouse як намуди маълумот дорад Кардинализми паст ки ин ба шумо имкон медихад, ки бо сарфи ками кувва са-маранок нигох дошта шавад.

Истифодаи самараноки ClickHouse. Алексей Миловидов (Яндекс)

Акнун боз як мисоли ҷолибро баррасӣ кунед. Баъзан корҳо барои одамон ба таври аҷиб кор мекунанд. Ман меравам ва инро мебинам. Ва дарҳол чунин ба назар мерасад, ки ин аз ҷониби як маъмури хеле ботаҷриба ва оқил, ки таҷрибаи ғанӣ дар танзими версияи MySQL 3.23 дорад, анҷом додааст.

Дар ин ҷо мо ҳазор ҷадвалро мебинем, ки ҳар яки онҳо боқимондаи тақсими он ба ҳазор нафар маълум нест.

Аслан, ман таҷрибаи одамони дигарро эҳтиром мекунам, аз ҷумла фаҳмидани он, ки ин таҷриба чӣ гуна азобро ба даст овардан мумкин аст.

Истифодаи самараноки ClickHouse. Алексей Миловидов (Яндекс)

Ва сабабхо каму беш равшананд. Инҳо стереотипҳои кӯҳна мебошанд, ки ҳангоми кор бо системаҳои дигар ҷамъ шуда метавонанд. Масалан, ҷадвалҳои MyISAM калиди ибтидоии кластерӣ надоранд. Ва ин роҳи мубодилаи маълумот метавонад як кӯшиши ноумедона барои ба даст овардани ҳамон функсия бошад.

Сабаби дигар дар он аст, ки дар ҷадвалҳои калон иҷро кардани ҳама гуна амалиёти тағирдиҳӣ душвор аст. Ҳама чиз баста мешавад. Гарчанде ки дар версияҳои муосири MySQL, ин мушкилот дигар он қадар ҷиддӣ нест.

Ё, масалан, microsharding, аммо бештар дар бораи он.

Истифодаи самараноки ClickHouse. Алексей Миловидов (Яндекс)

Дар ClickHouse, ба шумо лозим нест, ки ин корро кунед, зеро, аввалан, калиди асосӣ кластер аст, маълумот аз рӯи калиди ибтидоӣ тартиб дода мешавад.

Ва баъзан одамон аз ман мепурсанд: "Иҷрои дархостҳои диапазон дар ClickHouse бо андозаи ҷадвал чӣ гуна тағир меёбад?". Ман мегӯям, ки он тамоман тағир намеёбад. Масалан, шумо ҷадвали дорои як миллиард сатр доред ва шумо диапазони як миллион сатрро мехонед. Ҳама чиз хуб аст. Агар ҷадвал як триллион сатр дошта бошад ва шумо як миллион сатрро хонда истода бошед, он тақрибан якхела хоҳад буд.

Ва, дуюм, ҳама гуна қисмҳо ба монанди қисмҳои дастӣ талаб карда намешаванд. Агар шумо ворид шавед ва ба он чизе ки дар системаи файлӣ мавҷуд аст, бубинед, шумо хоҳед дид, ки ҷадвал чизи хеле ҷиддӣ аст. Ва дар дохили он чизе монанди қисмҳо мавҷуд аст. Яъне ClickHouse ҳама чизро барои шумо мекунад ва ба шумо лозим нест, ки азоб кашед.

Истифодаи самараноки ClickHouse. Алексей Миловидов (Яндекс)

Тағйир додан дар ClickHouse ройгон аст, агар сутуни илова/таркиро тағир диҳед.

Ва шумо набояд ҷадвалҳои хурд созед, зеро агар шумо дар ҷадвали шумо 10 сатр ё 10 000 сатр дошта бошед, он гоҳ ин тамоман муҳим нест. ClickHouse як системаест, ки интиқолро оптимизатсия мекунад, на таъхир, аз ин рӯ коркарди 10 сатр маъно надорад.

Истифодаи самараноки ClickHouse. Алексей Миловидов (Яндекс)

Як мизи калонро истифода бурдан дуруст аст. Аз қолабҳои кӯҳна даст кашед, ҳамааш хуб мешавад.

Ва ҳамчун бонус, дар версияи охирин, мо имкон дорем, ки калиди тақсимоти ихтиёрӣ созем, то ҳама гуна амалиёти нигоҳдорӣ дар қисмҳои алоҳидаро иҷро кунем.

Масалан, ба шумо бисёр ҷадвалҳои хурд лозиманд, масалан, вақте ки зарурати коркарди баъзе маълумотҳои фосилавӣ вуҷуд дорад, шумо қисмҳоро мегиред ва шумо бояд пеш аз навиштан ба ҷадвали ниҳоӣ тағиротро дар онҳо анҷом диҳед. Барои ин, як муҳаррики мизи аҷиб мавҷуд аст - StripeLog. Он ба TinyLog монанд аст, танҳо беҳтар аст.

* Ҳоло ClickHouse бештар дорад вуруди функсияи ҷадвал.

Истифодаи самараноки ClickHouse. Алексей Миловидов (Яндекс)

Дигар намунаи зидди намуна microsharding аст. Масалан, шумо бояд маълумотро тақсим кунед ва шумо 5 сервер доред ва фардо 6 сервер хоҳад буд. Ва шумо фикр мекунед, ки чӣ гуна ин маълумотро мувозинат кунед. Ва ба ҷои ин, шумо на ба 5 пора, балки ба 1 пора тақсим мешавед. Ва он гоҳ шумо ҳар яке аз ин микрошардҳоро ба сервери алоҳида харита мекунед. Ва шумо дар як сервер муваффақ хоҳед шуд, масалан, 000 ClickHouse, масалан. Намунаи алоҳида дар портҳои алоҳида ё пойгоҳи додаҳои алоҳида.

Истифодаи самараноки ClickHouse. Алексей Миловидов (Яндекс)

Аммо дар ClickHouse ин чандон хуб нест. Зеро ҳатто як мисоли ClickHouse кӯшиш мекунад, ки тамоми захираҳои сервери дастрасро барои коркарди як дархост истифода барад. Яъне, шумо як навъ сервер доред ва дар он ҷо, масалан, 56 ядрои протсессори. Шумо дархостеро иҷро мекунед, ки як сонияро мегирад ва он 56 ядроро истифода мебарад. Ва агар шумо дар як сервер 200 ClickHouse ҷойгир карда бошед, пас маълум мешавад, ки 10 ришта оғоз мешавад. Умуман, ҳама чиз хеле бад хоҳад буд.

Сабаби дигар он аст, ки тақсимоти кор дар ин мавридҳо нобаробар хоҳад буд. Баъзехо пештар, баъзехо дертар тамом мешаванд. Агар ҳамаи ин дар як маврид рӯй медод, он гоҳ худи ClickHouse мефаҳмид, ки чӣ гуна маълумотро дар байни ҷараёнҳо дуруст тақсим кардан мумкин аст.

Ва сабаби дигар он аст, ки шумо тавассути TCP алоқаи байнипротсессорӣ хоҳед дошт. Маълумот бояд сериализатсия карда шавад, сериализатсия карда шавад ва ин шумораи зиёди микрошардҳо мебошад. Он танҳо кор намекунад.

Истифодаи самараноки ClickHouse. Алексей Миловидов (Яндекс)

Дигар антипаттерн, гарчанде ки онро базӯр антипаттерн номидан мумкин нест. Ин микдори калони пеш-кадам аст.

Умуман, преагрегат хуб аст. Шумо як миллиард сатр доштед, шумо онро ҷамъ кардед ва он 1 сатр шуд ва ҳоло дархост фавран иҷро мешавад. Ҳама чиз бузург аст. Ҳамин тавр шумо метавонед ин корро кунед. Ва барои ин, ҳатто ClickHouse дорои як навъи ҷадвали махсуси AggregatingMergeTree мебошад, ки ҳангоми ворид кардани маълумот ҷамъшавии афзояндаро анҷом медиҳад.

Аммо вақтҳое ҳастанд, ки шумо фикр мекунед, ки мо чунин маълумотро ҷамъ мекунем ва чунин маълумотро ҷамъ мекунем. Ва дар баъзе шӯъбаи ҳамсоя, ман намехоҳам бигӯям, ки кадоме аз онҳо, онҳо ҷадвалҳои SummingMergeTree-ро барои ҷамъбаст бо калиди ибтидоӣ истифода мебаранд ва 20 сутун ҳамчун калиди асосӣ истифода мешаванд. Ба ҳар ҳол, ман номи баъзе сутунҳоро барои тавтиъа иваз кардам, аммо ин гап аст.

Истифодаи самараноки ClickHouse. Алексей Миловидов (Яндекс)

Ва чунин мушкилот ба миён меоянд. Аввалан, миқдори маълумоте, ки шумо доред, хеле кам карда намешавад. Масалан, се баробар кам мешавад. Се маротиба барои дастрас кардани таҳлили номаҳдуд, ки бо доштани маълумоти муттаҳидшуда меояд, нархи хуб хоҳад буд. Агар маълумот ҷамъ карда шавад, пас шумо ба ҷои таҳлил танҳо омори бадбахт мегиред.

Ва махсусан чӣ хуб аст? Ки ин одамон аз шӯъбаи дигар, рафта, баъзан хоҳиш кунанд, ки ба калиди ибтидоӣ як сутуни дигар илова кунанд. Яъне мо чунин маълумотҳоро ҷамъ овардаем ва ҳоло каме бештар мехоҳем. Аммо дар ClickHouse калиди асосии тағирёбанда вуҷуд надорад. Аз ин рӯ, шумо бояд якчанд скриптҳоро дар C ++ нависед. Ва ман скриптҳоро дӯст намедорам, ҳатто агар онҳо дар C++ бошанд.

Ва агар шумо бубинед, ки ClickHouse барои чӣ сохта шудааст, пас маълумоти ҷамъшуда маҳз ҳамон сенарияест, ки барои он таваллуд шудааст. Агар шумо ClickHouse-ро барои маълумоти ҷамъшуда истифода баред, пас шумо ҳама чизро дуруст мекунед. Агар шумо ҷамъоварӣ кунед, пас ин баъзан бахшидашаванда аст.

Истифодаи самараноки ClickHouse. Алексей Миловидов (Яндекс)

Боз як ҳолати ҷолиб ин дархостҳо дар ҳалқаи беохир мебошад. Ман баъзан ба ягон сервери истеҳсолӣ меравам ва дар он ҷо рӯйхати равандҳои намоишро мебинам. Ва ҳар дафъае, ки ман мефаҳмам, ки чизи даҳшатнок рӯй медиҳад.

Масалан, ин ҷост. Дархол маълум мешавад, ки дар як талаб хама корро ичро кардан мумкин буд. Танҳо URL ва рӯйхатро дар он ҷо нависед.

Истифодаи самараноки ClickHouse. Алексей Миловидов (Яндекс)

Чаро бисёре аз чунин дархостҳо дар як ҳалқаи беохир бад ҳастанд? Агар индекс истифода нашавад, пас шумо аз рӯи ҳамон маълумот гузаришҳои зиёде хоҳед дошт. Аммо агар индекс истифода шавад, масалан, шумо дар ru калиди ибтидоӣ доред ва шумо дар он ҷо url = чизе менависед. Ва шумо фикр мекунед, ки як url ​​аз ҷадвал ба таври нуқта хонда мешавад, ҳама чиз хуб мешавад. Аммо дар ҳақиқат не. Зеро ClickHouse ҳама чизро дар гурӯҳҳо иҷро мекунад.

Вақте ки ӯ бояд як қатор маълумотро хонад, вай каме бештар мехонад, зеро индекс дар ClickHouse кам аст. Ин индекс ба шумо имкон намедиҳад, ки дар ҷадвал як сатри инфиродӣ пайдо кунед, танҳо як навъ диапазон. Ва маълумот дар блокҳо фишурда мешавад. Барои хондани як сатр, шумо бояд тамоми блокро гирифта, онро кушоед. Ва агар шумо як қатор дархостҳоро иҷро кунед, шумо чорроҳаҳои зиёди онҳо хоҳед дошт ва шумо кори зиёдеро такрор ба такрор анҷом медиҳед.

Истифодаи самараноки ClickHouse. Алексей Миловидов (Яндекс)

Ва ҳамчун бонус, шумо метавонед бубинед, ки дар ClickHouse шумо набояд аз интиқоли ҳатто мегабайтҳо ва ҳатто садҳо мегабайтҳо ба бахши IN тарсед. Ман аз таҷрибаи худ дар ёд дорам, ки агар мо як қатор арзишҳоро дар қисмати IN дар MySQL гузаронем, масалан, мо 100 мегабайти баъзе рақамҳоро дар он ҷо гузаронем, пас MySQL 10 гигабайт хотираро мехӯрад ва дигар ҳеҷ чиз рӯй намедиҳад. он, ҳама чиз бад кор мекунад.

Ва чизи дуюм ин аст, ки дар ClickHouse, агар дархостҳои шумо индексро истифода баранд, он ҳамеша аз сканкунии пурра сусттар нест, яъне агар ба шумо лозим аст, ки қариб тамоми ҷадвалро хонед, он пайдарпай меравад ва тамоми ҷадвалро мехонад. Умуман, вай инро муайян мекунад.

Бо вуҷуди ин, баъзе душвориҳо вуҷуд доранд. Масалан, он IN бо зерпурсиш индексро истифода намебарад. Аммо ин мушкили мост ва мо бояд онро ислоҳ кунем. Дар ин ҷо ягон чизи асосӣ вуҷуд надорад. Биёед, инро кунем*.

Ва чизи ҷолиби дигар ин аст, ки агар шумо дархости хеле тӯлонӣ дошта бошед ва коркарди дархостҳои тақсимшуда идома дорад, пас ин дархости хеле тӯлонӣ ба ҳар як сервер бидуни фишурда фиристода мешавад. Масалан, 100 мегабайт ва 500 сервер. Ва, мутаносибан, 50 гигабайт тавассути шабака интиқол дода мешавад. Он интиқол дода мешавад ва он гоҳ ҳама чиз бомуваффақият иҷро карда мешавад.

* аллакай истифода мешавад; ҳама чиз тавре ки ваъда дода шуд, ислоҳ карда шуд.

Истифодаи самараноки ClickHouse. Алексей Миловидов (Яндекс)

Ва ин хеле маъмул аст, агар дархостҳо аз API омада бошанд. Масалан, шумо ягон намуди хидматро анҷом додед. Ва агар касе ба хидмати шумо ниёз дошта бошад, пас шумо API-ро кушодед ва аслан пас аз ду рӯз мебинед, ки чизи нофаҳмо рӯй медиҳад. Ҳама чиз пурбор аст ва баъзе дархостҳои даҳшатнок ворид мешаванд, ки ҳеҷ гоҳ набояд ин тавр бошанд.

Ва танҳо як роҳи ҳалли он вуҷуд дорад. Агар шумо API-ро кушода бошед, пас шумо бояд онро буред. Масалан, барои ворид кардани баъзе квотаҳо. Дигар вариантҳои оқилона вуҷуд надоранд. Вагарна дархол сценария менависанду мушкилот пеш меояд.

Ва ClickHouse хусусияти махсус дорад - ин ҳисоб кардани квотаҳо мебошад. Ғайр аз он, шумо метавонед калиди квотаи худро интиқол диҳед. Ин, масалан, ID-и дохилии корбар аст. Ва квотаҳо барои ҳар яки онҳо мустақилона ҳисоб карда мешаванд.

Истифодаи самараноки ClickHouse. Алексей Миловидов (Яндекс)

Акнун чизи ҷолиби дигар. Ин нусхабардории дастӣ аст.

Ман бисёр ҳолатҳоеро медонам, ки сарфи назар аз он ки ClickHouse дорои дастгирии дарунсохти такрорӣ мебошад, одамон ClickHouse-ро дастӣ такрор мекунанд.

Принсип чист? Шумо қубури коркарди маълумот доред. Ва он мустақилона кор мекунад, масалан, дар марказҳои гуногуни маълумот. Шумо ҳамон маълумотро ба ҳамин тарз ба ClickHouse менависед. Дуруст аст, ки амалия нишон медиҳад, ки маълумот аз сабаби баъзе хусусиятҳо дар коди шумо ҳоло ҳам фарқ мекунад. Умедворам, ки дар шумо.

Ва мунтазам ба шумо лозим меояд, ки ба таври дастӣ ҳамоҳанг созед. Масалан, дар як моҳ як маротиба маъмурон rsync мекунанд.

Дар асл, истифодаи такрори дарунсохт дар ClickHouse хеле осонтар аст. Аммо шояд баъзе зиддиятҳо вуҷуд дошта бошанд, зеро барои ин ба шумо ZooKeeper лозим аст. Ман дар бораи ZooKeeper ҳеҷ чизи бад намегӯям, аслан система кор мекунад, аммо чунин мешавад, ки одамон аз сабаби java-фобия онро истифода намебаранд, зеро ClickHouse он қадар системаи хубест, ки дар C ++ навишта шудааст, ки шумо метавонед истифода баред ва ҳамааш хуб мешавад. Ва ZooKeeper дар java. Ва гӯё шумо ҳатто дидан намехоҳед, аммо пас шумо метавонед нусхабардории дастӣ истифода баред.

Истифодаи самараноки ClickHouse. Алексей Миловидов (Яндекс)

ClickHouse як системаи амалӣ аст. Он талаботи шуморо ба назар мегирад. Агар шумо нусхабардории дастӣ дошта бошед, пас шумо метавонед ҷадвали Тақсимшударо эҷод кунед, ки ба репликаҳои дастӣ назар мекунад ва байни онҳо ивазкуниро анҷом медиҳад. Ва ҳатто як варианти махсусе мавҷуд аст, ки ба шумо имкон медиҳад, ки аз флопҳо канорагирӣ кунед, ҳатто агар хатҳои шумо ба таври мунтазам фарқ кунанд.

Истифодаи самараноки ClickHouse. Алексей Миловидов (Яндекс)

Ғайр аз он, агар шумо муҳаррикҳои ҷадвали ибтидоиро истифода баред, мушкилот вуҷуд дорад. ClickHouse чунин созандаест, ки дорои як қатор муҳаррикҳои гуногуни ҷадвал аст. Барои ҳама ҳолатҳои ҷиддӣ, тавре ки дар ҳуҷҷатҳо навишта шудааст, ҷадвалҳои оилаи MergeTree -ро истифода баред. Ва ҳама чизи боқимонда - ин барои ҳолатҳои алоҳида ё санҷишҳо аст.

Дар ҷадвали MergeTree ба шумо лозим нест, ки ягон сана ва вақт дошта бошед. Шумо ҳоло ҳам метавонед истифода баред. Агар сана ва вақт вуҷуд надошта бошад, нависед, ки пешфарз 2000 аст. Он кор хоҳад кард ва захираҳоро талаб намекунад.

Ва дар версияи нави сервер, шумо ҳатто метавонед муайян кунед, ки шумо бе калиди қисм тақсимоти фармоишӣ доред. Ин ҳамон хоҳад буд.

Истифодаи самараноки ClickHouse. Алексей Миловидов (Яндекс)

Аз тарафи дигар, муҳаррикҳои ҷадвали ибтидоиро истифода бурдан мумкин аст. Масалан, маълумотро як маротиба пур кунед ва бубинед, печонед ва нест кунед. Шумо метавонед Log-ро истифода баред.

Ё нигоҳ доштани ҳаҷми хурд барои коркарди миёна StripeLog ё TinyLog мебошад.

Хотира метавонад истифода шавад, агар миқдори ками маълумот вуҷуд дошта бошад ва танҳо чизеро дар RAM печонед.

Истифодаи самараноки ClickHouse. Алексей Миловидов (Яндекс)

ClickHouse маълумоти аз нав танзимшударо чандон дӯст намедорад.

Дар ин ҷо як мисоли маъмул аст. Ин шумораи зиёди URL-ҳост. Шумо онҳоро дар ҷадвали ҳамсоя ҷойгир мекунед. Ва он гоҳ мо тасмим гирифтем, ки бо онҳо JOIN кунем, аммо ин, чун қоида, кор намекунад, зеро ClickHouse танҳо Hash JOIN-ро дастгирӣ мекунад. Агар барои миқдори зиёди маълумоте, ки барои пайваст кардани он RAM кофӣ набошад, JOIN кор намекунад *.

Агар маълумот дорои дараҷаи баланд бошад, хавотир нашавед, онро дар шакли ғайримуқаррарӣ нигоҳ доред, URL-ҳо бевосита дар ҷадвали асосӣ ҷойгир карда мешаванд.

* ва ҳоло ClickHouse ҳам пайвастагии якҷоя дорад ва он дар шароите кор мекунад, ки маълумоти мобайнӣ ба RAM мувофиқат намекунад. Аммо ин бесамар аст ва тавсия эътибор дорад.

Истифодаи самараноки ClickHouse. Алексей Миловидов (Яндекс)

Якчанд мисоли дигар, аммо ман аллакай шубҳа дорам, ки онҳо зидди намунаанд ё не.

ClickHouse як камбудии маълум дорад. Вай чй тавр нав кардан* ро намедонад. Ба маъное, ин ҳатто хуб аст. Агар шумо ягон маълумоти муҳим дошта бошед, масалан, баҳисобгирии муҳосибӣ, пас ҳеҷ кас наметавонад онҳоро фиристад, зеро ҳеҷ гуна навсозӣ вуҷуд надорад.

* дастгирии навсозӣ ва нест кардан дар режими партия кайҳо илова карда шудааст.

Аммо баъзе роҳҳои махсус вуҷуд доранд, ки имкон медиҳанд навсозиҳо дар замина пайдо шаванд. Масалан, ҷадвалҳои навъи ReplaceMergeTree. Онҳо ҳангоми якҷояшавии замина навсозӣ мекунанд. Шумо метавонед инро бо ҷадвали оптимизатсия маҷбур кунед. Аммо ин корро зуд-зуд анҷом надиҳед, зеро он қисматро пурра аз нав сабт мекунад.

JOIN-ҳои тақсимшуда дар ClickHouse - ин низ аз ҷониби банақшагирии дархост суст коркард карда мешавад.

Бад, аммо баъзан хуб.

Истифодаи ClickHouse танҳо барои хондани маълумот бо интихоб*.

Ман тавсия намедиҳам, ки ClickHouse-ро барои ҳисобҳои калон истифода барад. Аммо ин комилан дуруст нест, зеро мо аллакай аз ин тавсия дур мешавем. Ва мо ба наздикӣ қобилияти татбиқ кардани моделҳои омӯзиши мошинро дар ClickHouse - Catboost илова кардем. Ва ин маро ба ташвиш меорад, зеро ман фикр мекунам: «Чӣ даҳшат аст. Ин аст, ки дар як байт чанд давра пайдо мешавад! Барои ман афсӯс аст, ки давраҳои соатро дар байт оғоз кунам.

Истифодаи самараноки ClickHouse. Алексей Миловидов (Яндекс)

Аммо натарсед, ClickHouse-ро насб кунед, ҳамааш хуб мешавад. Агар чизе бошад, мо ҷомеа дорем. Зимнан, ҷомеа шумост. Ва агар ягон мушкилие дошта бошед, ҳадди ақалл метавонед ба чати мо равед ва умедворам, ки ба шумо кумак мекунанд.

Саволҳои шумо

Ташаккур барои гузориш! Дар бораи садамаи ClickHouse ба куҷо шикоят кардан мумкин аст?

Шумо метавонед худи ҳозир ба ман шахсан шикоят кунед.

Ман ба наздикӣ ба истифодаи ClickHouse шурӯъ кардам. Дарҳол интерфейси cli-ро тарк кард.

Чӣ хол.

Каме дертар, ман серверро бо интихоби хурд партофтам.

Шумо истеъдод доред.

Ман як хатои GitHub кушодам, аммо онро нодида гирифтанд.

Биё бубинем.

Алексей маро фиреб дод, ки дар гузориш иштирок кунам ва ваъда дод, ки ба ман бигӯед, ки шумо маълумотро дар дохили он чӣ тавр фишурда мекунед.

Ин хеле оддӣ аст.

Ин аст он чизе ки ман дирӯз фаҳмидам. Мушаххасоти бештар.

Ҳеҷ гуна ҳилаҳои даҳшатнок вуҷуд надоранд. Ин танҳо фишурдани блок ба блок аст. Пешфарз LZ4 аст, шумо метавонед ZSTD*-ро фаъол созед. Блокҳо аз 64 килобайт то 1 мегабайт.

* инчунин кодекҳои махсуси фишурдасозиро дастгирӣ мекунанд, ки метавонанд дар занҷир бо дигар алгоритмҳо истифода шаванд.

Оё блокҳо танҳо маълумоти хом мебошанд?

На маҳз хом. Массивҳо мавҷуданд. Агар шумо сутуни ададӣ дошта бошед, он гоҳ рақамҳои як саф дар массив ҷамъ карда мешаванд.

Он равшан аст.

Алексей, мисоле, ки бо uniqExact бар IP-ҳо буд, яъне далели он, ки uniqExact аз рӯи сатрҳо нисбат ба рақамҳо вақти зиёдтар мегирад ва ғайра. Чӣ мешавад, агар мо дар лаҳзаи корректор бо гӯшҳои худ финт кор кунем ва партоем? Яъне шумо гӯё гуфтаед, ки он дар диск чандон тафовут надорад. Агар мо сатрҳоро аз диск хонем, пас агрегатҳоро тезтар ба даст меорем ё не? Ё мо то ҳол дар ин ҷо ба қадри кофӣ фоида мегирем? Ба назари ман, шумо онро санҷидаед, аммо бо баъзе сабабҳо онро дар нишондиҳанда нишон надодаед.

Ман фикр мекунам, ки он сусттар аз нест, андохта мешавад. Дар ин ҳолат, суроғаи IP бояд аз сатр таҳлил карда шавад. Албатта, дар ClickHouse, таҳлили суроғаи IP низ оптимизатсия карда шудааст. Мо хеле кушиш кардем, вале дар худи хамон чо шумо ракамхои ба шакли даххазорум навишташударо доред. Хеле нороҳаткунанда. Аз тарафи дигар, функсияи uniqExact дар сатрҳо сусттар кор мекунад, на танҳо аз он сабаб, ки ин сатрҳо ҳастанд, балки инчунин аз он сабаб, ки ихтисоси дигари алгоритм интихоб шудааст. Сатрҳо танҳо ба таври гуногун коркард карда мешаванд.

Ва агар мо як навъи маълумоти ибтидоиро гирем? Масалан, идентификатсияи корбареро, ки мо дар он дорем, навиштанд, онро ҳамчун як сатр навиштанд ва баъд партофтанд, ин шавқовартар мешавад ё не?

Ман шубҳа дорам. Ман фикр мекунам, ки ин боз ҳам аламовартар хоҳад буд, зеро дар ниҳоят, таҳлили рақамҳо як мушкили ҷиддӣ аст. Ба назари ман, ин ҳамкор ҳатто гузорише доштааст, ки дар шакли даҳҳазорум таҳлил кардани рақамҳо чӣ қадар мушкил аст, аммо шояд не.

Алексей, ташаккури зиёд барои гузориш! Ва ташаккури зиёд барои ClickHouse! Ман дар бораи нақшаҳо як савол дорам. Оё дар нақшаҳои нопурра навсозии луғатҳо хусусият вуҷуд дорад?

яъне қисман бозсозӣ?

Ҳа Ҳа. Мисли қобилияти насб кардани майдони MySQL дар он ҷо, яъне пас аз он навсозӣ кунед, ки танҳо ин маълумот бор карда шавад, агар луғат хеле калон бошад.

Хусусияти хеле ҷолиб. Ва, ба назарам, дар сӯҳбати мо касе онро пешниҳод кардааст. Шояд ин ҳатто шумо будед.

Ман чунин фикр намекунам.

Аҷоиб, ҳоло маълум мешавад, ки ду дархост. Ва шумо метавонед онро оҳиста оғоз кунед. Аммо ман мехоҳам шуморо фавран огоҳ кунам, ки татбиқи ин хусусият хеле осон аст. Яъне, аз рӯи назария, шумо бояд танҳо рақами версияро дар ҷадвал нависед ва баъд нависед: версия аз чунин ва фалон камтар аст. Ва ин маънои онро дорад, ки, эҳтимолан, мо онро ба мухлисон пешниҳод хоҳем кард. Оё шумо ҳаваскор ҳастед?

Бале, аммо мутаассифона дар C++ не.

Оё ҳамкорони шумо метавонанд бо C++ навишта шаванд?

Ман касеро меёбам.

Бузург*.

* хусусият пас аз ду моҳи гузориш илова карда шуд - онро муаллифи савол таҳия ва аз ҷониби ӯ пешниҳод кардааст дархостро кашед.

Ташаккур!

Салом! Ташаккур барои гузориш! Шумо қайд кардед, ки ClickHouse тамоми захираҳои дастрасро хеле хуб истеъмол мекунад. Ва сухангӯи дар паҳлӯи Luxoft дар бораи тасмими худ барои Почтаи Русия сӯҳбат кард. Вай гуфт, ки онҳо ClickHouse-ро дар ҳақиқат дӯст медоштанд, аммо онҳо онро ба ҷои рақиби асосии худ истифода набурданд, зеро он тамоми протсессорро мехӯрд. Ва онҳо натавонистанд онро ба меъмории худ, ба ZooKeeper бо докерҳо часпонанд. Оё имкон дорад, ки ClickHouse-ро бо ягон роҳ маҳдуд кард, то он ҳама чизеро, ки ба он дастрас аст, истеъмол накунад?

Бале, ин имконпазир ва хеле осон аст. Агар шумо хоҳед, ки ядрои камтар истеъмол кунед, пас танҳо нависед set max_threads = 1. Ва ин ҳама аст, он дархостро дар як ядро ​​иҷро мекунад. Ғайр аз он, шумо метавонед танзимоти гуногунро барои корбарони гуногун муайян кунед. Пас ҳеҷ мушкиле нест. Ва ба ҳамкорони худ аз Luxoft бигӯед, ки хуб нест, ки онҳо ин танзимотро дар ҳуҷҷатҳо наёфтанд.

Алексей, салом! Мехостам ин саволро диҳам. Ин бори аввал нест, ки ман мешунавам, ки бисёр одамон ClickHouse-ро ҳамчун анбори гузоришҳо истифода мебаранд. Дар гузориш гуфтед, ки ин корро накунед, яъне хатҳои дароз нигоҳ доштан лозим нест. Шумо дар ин бора чӣ фикр доред?

Аввалан, гузоришҳо одатан хатҳои дароз нестанд. Албатта, истисноҳо вуҷуд доранд. Масалан, баъзе хидматҳое, ки дар java навишта шудаанд, истисноро мепартоянд, он сабт карда мешавад. Ва ҳамин тавр, дар як ҳалқаи беохир ва тамом шудани фазои диски сахт. Ҳалли ин масъала хеле содда аст. Агар хатҳо хеле дароз бошанд, пас онҳоро буред. дароз чӣ маъно дорад? Даххо килобайт бад * аст.

* дар версияҳои охирини ClickHouse, "тозакунии индекси мутобиқшавӣ" фаъол карда шудааст, ки мушкилоти нигоҳдории сатрҳои дарозро барои қисмат бартараф мекунад.

Оё як килобайт муқаррарӣ аст?

Ин маъмул аст.

Салом! Ташаккур барои гузориш! Ман аллакай дар ин бора дар чат пурсидам, аммо дар ёд надорам, ки оё ман ҷавоб гирифтаам. Оё ягон нақшаи васеъ кардани бахши WITH бо тарзи CTE вуҷуд дорад?

Ҳоло не. Бахши WITH то ҳадде сабукфикр аст. Ин барои мо як хусусияти хурд аст.

Ман мефаҳмам. Сипос!

Ташаккур барои гузориш! Хеле ҷолиб! саволи глобалӣ. Оё ба нақша гирифта шудааст, ки шояд дар шакли як навъ нотаҳо, тағир додани ҳазфи маълумот анҷом дода шавад?

Ҳатман. Ин вазифаи аввалини мо дар навбати мост. Мо холо фаъолона фикр карда истодаем, ки хама корро чй тавр дуруст ба чо оварем. Ва шумо бояд пахшкунии клавиатураро оғоз кунед*.

* тугмаҳои клавиатураро пахш карданд ва ҳама чиз анҷом ёфт.

Оё он ба ягон навъ ба кори система таъсир мерасонад ё не? Оё воридкунӣ мисли ҳозира зуд хоҳад буд?

Эҳтимол худи несткунӣ, худи навсозиҳо хеле вазнин хоҳанд буд, аммо ин ба иҷрои интихобҳо ва иҷрои замимаҳо ба ҳеҷ ваҷҳ таъсир намерасонад.

Ва боз як саволи хурд. Дар презентатсия шумо дар бораи калиди асосӣ гап задед. Мувофиқи он, мо тақсимкунӣ дорем, ки ҳар моҳ ба таври нобаёнӣ аст, дуруст? Ва вақте ки мо диапазони санаро муқаррар мекунем, ки ба як моҳ мувофиқат мекунад, мо танҳо ин қисмро мехонем, дуруст?

Бале.

Савол. Агар мо ягон калиди ибтидоиро интихоб карда натавонем, оё дуруст аст, ки онро маҳз аз рӯи майдони "Сана" иҷро кунем, то дар замина таҷдиди сохтори хурдтари ин додаҳо ба амал ояд, то онҳо ба тартиб бештар мувофиқ бошанд? Агар шумо дархостҳои диапазон надошта бошед ва шумо ҳатто ягон калиди аввалияро интихоб карда натавонед, оё гузоштани сана ба калиди асосӣ меарзад?

Бале.

Шояд дар калиди ибтидоӣ майдонеро гузоред, ки агар маълумот аз рӯи ин майдон мураттаб карда шавад, беҳтар фишурда мешавад. Масалан, ID корбар. Масалан, корбар ба ҳамон сайт меравад. Дар ин ҳолат, идентификатсияи корбар ва вақтро гузоред. Ва он гоҳ маълумоти шумо беҳтар фишурда мешавад. Дар мавриди сана, агар шумо воқеан надоред ва ҳеҷ гоҳ дар бораи санаҳо дархостҳои диапазон надошта бошед, шумо наметавонед санаро дар калиди ибтидоӣ гузоред.

Хуб ташаккури зиёд!

Манбаъ: will.com

Илова Эзоҳ