Се сол пеш Виктор Тарнавский ва Алексей Миловидов аз Яндекс дар саҳна HighLoad++гуфт, то чӣ андоза хуб ClickHouse аст, ва чӣ тавр он суст намешавад. Ва дар марҳилаи оянда буд Александр Зайцев с гузориш дар бораи гузаштан ба кликхона аз дигар МДМ аналитики ва бо хулосае, ки кликхона, албатта, хуб, вале хеле қулай нест. Вақте ки дар соли 2016 ширкат Ҳаёти кӯча, ки Искандар он вакт кор мекард, системаи аналитикии бисьёрпетабайтиро ба кликхона, он «рохи хишти зард»-и ҷолиби пур аз хатарҳои номаълум буд - кликхона дар он вакт ба майдони мина монанд менамуд.
Се сол баъд кликхона хеле беҳтар шуд - дар ин муддат Александр ширкати Altinity-ро таъсис дод, ки на танҳо ба одамон кӯчидан кӯмак мекунад кликхона даҳҳо лоиҳаҳо, балки худи маҳсулотро дар якҷоягӣ бо ҳамкорони Яндекс такмил медиҳад. Ҳозир кликхона хануз як сайру гашти бепарво нест, вале миназор нест.
Александр аз соли 2003 инҷониб бо системаҳои тақсимшуда кор карда, лоиҳаҳои калонро таҳия мекунад MySQL, Oracle и Вертика. Дар охир HighLoad++ 2019 Александр, яке аз пешравони истифода кликхона, гуфт, ки ин DBMS ҳоло чӣ аст. Мо дар бораи хусусиятҳои асосии он меомӯзем кликхона: чи тавр он аз дигар системахо фарк мекунад ва дар кадом маврид истифода бурдани он самараноктар аст. Бо истифода аз мисолҳо, мо ба амалияҳои охирин ва дар лоиҳа санҷидашуда барои сохтани системаҳо дар асоси он назар хоҳем кард кликхона.
Ретроспектив: он чи 3 сол пеш рух дода буд
Се сол пеш аз ин мо ширкатро дигар кардем Ҳаёти кӯча ба кликхона аз дигар махзани таҳлилӣ ва муҳоҷирати таҳлили шабакаи таблиғот чунин менамуд:
Ва албатта, мо дар ҳаракат ба он кӯмак мекунем кликхона с MySQL, Вертика, Oracle, сабз, Redshift ва дигар системаҳо. Мо дар ҳаракатҳои гуногун ширкат доштем ва ҳамаи онҳо муваффақ шуданд.
Ҷамъият, ронандагӣ ва шавковар. Дар кликхона ҷомеаи олӣ: вохӯриҳо, сӯҳбатҳо ва Алексей Миловидов, ки ҳамаи моро бо энергия ва хушбинии худ пур мекунад.
Гузариш ба ClickHouse
Рафтан ба кликхона бо баъзе сабабҳо ба шумо танҳо се чиз лозим аст:
Маҳдудиятҳоро фаҳмедкликхона ва он барои чӣ мувофиқ нест.
Бартарӣ гиред технология ва бузургтарин қувваҳои он.
Таҷриба. Ҳатто фаҳмидани он ки чӣ тавр кор мекунад кликхона, на хама вакт пешгуй кардан мумкин аст, ки он кай тезтар мешавад, кай сусттар мешавад, кай бехтар мешавад ва кай бадтар мешавад. Пас кӯшиш кунед.
Мушкилоти ҳаракат
Танҳо як "аммо" вуҷуд дорад: агар шумо ба он ҳаракат кунед кликхона аз чизи дигар, пас одатан чизе нодуруст меравад. Мо ба баъзе таҷрибаҳо ва чизҳое, ки дар базаи дӯстдоштаи мо кор мекунанд, одат кардаем. Масалан, касе, ки бо он кор мекунад SQПойгоҳи додаҳои L маҷмӯи вазифаҳои зеринро ҳатмӣ мешуморанд:
муомилот;
маҳдудиятҳо;
мувофиқат;
индексҳо;
НАВОРӢ/НОЗӢ;
NULLs;
миллисонияҳо;
чархҳои навъи автоматӣ;
пайвастагиҳои сершумор;
тақсимоти худсарона;
воситаҳои идоракунии кластер.
Ҷалбкунӣ ҳатмист, аммо се сол пеш дар кликхона Ҳеҷ яке аз ин функсияҳо дастрас набуданд! Ҳоло камтар аз нисфи он чизе, ки иҷро нашудааст, боқӣ мемонад: транзаксияҳо, маҳдудиятҳо, Пайвастагӣ, миллисонияҳо ва навъи кастинг.
Ва чизи асосӣ ин аст, ки дар кликхона баъзе таҷрибаҳо ва равишҳои стандартӣ кор намекунанд ё ба таври дигар кор мекунанд, ки мо одат кардаем. Ҳар чизе ки дар он пайдо мешавад кликхона, мувофиқат мекунад "Роҳи ClickHouse", яъне. функсияҳо аз дигар пойгоҳи додаҳо фарқ мекунанд. Барои намуна:
Якчанд пайвастагӣ вуҷуд дорад, аммо банақшагирии дархост вуҷуд надорад. Чӣ тавр онҳо пас аз он иҷро карда мешаванд, умуман барои одамони ҷаҳони пойгоҳи додаҳо чандон равшан нест.
Скриптҳои ClickHouse
Соли 1960 математики амрикоии венгерӣ Wigner EP мақола навишт"Самаранокии беасоси математика дар илмҳои табиатшиносӣ» («Самаранокии нофаҳмо будани математика дар илмҳои табиатшиносӣ»), ки ҷаҳони гирду атрофи мо бо баъзе сабабҳо бо қонунҳои математикӣ хуб тавсиф шудааст. Математика як илми абстрактист ва қонунҳои физикӣ, ки дар шакли математикӣ ифода шудаанд, ночиз нестанд ва Wigner EP таъкид кард, ки ин хеле ачиб аст.
CREATE TABLE cpu_alc (
created_date Date,
created_at DateTime,
time String,
tags_id UInt32,
metrics Nested(
name LowCardinality(String),
value Float64
)
) ENGINE = MergeTree(created_date, (tags_id, created_at), 8192);
SELECT max(metrics.value[indexOf(metrics.name,'usage_user')]) FROM ...
сохтори Лона ду массив мебошанд: metrics.name и метрика.арзиш. Дар ин ҷо шумо метавонед чунин маълумоти мониторинги худсаронаро ҳамчун массиви номҳо ва массиви андозагирӣ барои ҳар як ҳодиса нигоҳ доред. Барои оптимизатсияи минбаъда, ба ҷои як чунин сохтор, шумо метавонед якчанд созед. Масалан, яке барои данд-арзиш, дигаре - барои Int-маънои зеро Int Ман мехоҳам, ки самараноктар захира кунам.
Аммо дастрасӣ ба чунин сохтор душвортар аст. Шумо бояд як сохтори махсусро истифода баред, ки бо истифода аз функсияҳои махсус арзишҳои аввал индекс ва сипас массивро берун кунед:
SELECT max(metrics.value[indexOf(metrics.name,'usage_user')]) FROM ...
Аммо он ҳанӯз ҳам хеле зуд кор мекунад. Роҳи дигари нигоҳ доштани маълумоти номунтазам аз рӯи сатр аст.
Маълумоти номунтазам. Сатрҳо. Дар ин усули анъанавӣ, бе массивҳо, номҳо ва арзишҳо ҳамзамон нигоҳ дошта мешаванд. Агар 5 андозагирӣ якбора аз як дастгоҳ гирифта шавад, дар базаи маълумот 000 сатр тавлид мешавад:
CREATE TABLE cpu_rlc (
created_date Date,
created_at DateTime,
time String,
tags_id UInt32,
metric_name LowCardinality(String),
metric_value Float64
) ENGINE = MergeTree(created_date, (metric_name, tags_id, created_at), 8192);
SELECT
maxIf(metric_value, metric_name = 'usage_user'),
...
FROM cpu_r
WHERE metric_name IN ('usage_user', ...)
кликхона бо ин мубориза мебарад - он дорои васеъшавии махсус мебошад кликхона SQL. Масалан, maxIf — функсияи махсус, ки ҳадди аксарро аз рӯи метрика ҳангоми иҷро шудани ягон шарт ҳисоб мекунад. Шумо метавонед якчанд чунин ифодаҳоро дар як дархост нависед ва дарҳол арзиши чанд метрикаро ҳисоб кунед.
Дар мавриди массивҳо, ҳама чиз каме бадтар аст. Маълумот ҳоло ҳам хуб фишурда шудааст ва намунаи номунтазамро нигоҳ доштан мумкин аст. Аммо кликхона - пойгоҳи додаҳои сутунӣ ва вақте ки мо ҳама чизро дар массив нигоҳ медорем, он ба як қатор табдил меёбад ва мо барои чандирӣ бо самаранокӣ пардохт мекунем. Барои ҳама гуна амалиёт, шумо бояд тамоми массивро дар хотира хонед, пас дар он элементи дилхоҳро пайдо кунед - ва агар массив афзоиш ёбад, суръат паст мешавад.
Дар яке аз ширкатҳое, ки ин усулро истифода мебаранд (масалан, Uber), массивҳо ба қисмҳои 128 элемент бурида мешаванд. Маълумот аз якчанд ҳазор метрика бо ҳаҷми 200 ТБ маълумот/рӯз на дар як массив, балки дар 10 ё 30 массив бо мантиқи махсуси нигоҳдорӣ нигоҳ дошта мешавад.
Усули соддатарин бо сатрҳо мебошад. Аммо маълумот суст фишурда шудааст, андозаи ҷадвал калон аст ва ҳатто вақте ки дархостҳо ба якчанд ченакҳо асос ёфтаанд, ClickHouse ба таври оптималӣ кор намекунад.
Схемаи гибридӣ
Фарз мекунем, ки мо схемаи массивро интихоб кардем. Аммо агар мо донем, ки аксари панелҳои мо танҳо ченакҳои корбар ва системаро нишон медиҳанд, мо метавонем ин нишондиҳандаҳоро ба таври илова ба сутунҳо аз массив дар сатҳи ҷадвал бо ин роҳ амалӣ созем:
Ҷамъоварии сохторҳои маълумот. Ин яке аз "хусусиятҳои қотил" аст кликхона. Сарфи назар аз он, ки бачаҳои Яндекс мегӯянд, ки мо намехоҳем маълумотро ҷамъ кунем, ҳама чиз дар кликхона, зеро он зуд ва қулай аст.
В кликхона роҳҳои гуногуни анҷом додани як чиз вуҷуд дорад. Масалан, шумо метавонед арзиши охирини ҷадвалро бо се роҳи гуногун барои ВПМ - Воҳиди Пардозиши Марказӣ (чаҳорум низ ҳаст, аммо боз ҳам экзотиктар аст).
SELECT origin,
timestamp,
timestamp -LAG(timestamp, 1) OVER (PARTITION BY origin ORDER BY timestamp) AS duration,
timestamp -MIN(timestamp) OVER (PARTITION BY origin ORDER BY timestamp) AS startseq_duration,
ROW_NUMBER() OVER (PARTITION BY origin ORDER BY timestamp) AS sequence,
COUNT() OVER (PARTITION BY origin ORDER BY timestamp) AS nb
FROM mytable
ORDER BY origin, timestamp;
В кликхона Шумо ин корро карда наметавонед - он стандартро дастгирӣ намекунад SQL-2003 ва шояд ҳеҷ гоҳ ин корро нахоҳад кард. Ба ҷои ин, дар кликхона Чунин навиштан одат шудааст:
Ман ба лямбдаҳо ваъда додам - инҳоянд!
Ин як аналоги дархости таҳлилӣ дар стандарт аст SQL-2003: вай фарқи байни ин дуро ҳисоб мекунад тамғаи вақт, давомнокӣ, рақами тартибӣ - ҳама чизест, ки мо одатан функсияҳои таҳлилиро баррасӣ мекунем. ДАР кликхона Мо онҳоро тавассути массивҳо ҳисоб мекунем: аввал мо маълумотро ба массив мепӯшонем, баъд аз он мо ҳама чизеро, ки дар массив мехоҳем, иҷро мекунем ва сипас онро боз васеъ мекунем. Ин чандон қулай нест, он ҳадди аққал дӯст доштани барномасозии функсионалӣ талаб мекунад, аммо он хеле чандир аст.
Хусусиятҳои махсус
Гайр аз ин, дар кликхона бисёр вазифаҳои махсус. Масалан, чӣ тавр муайян кардан мумкин аст, ки чанд сессия дар як вақт баргузор мешавад? Вазифаи маъмулии мониторинг ин муайян кардани сарбории ҳадди аксар бо як дархост мебошад. ДАР кликхона Барои ин вазифаи махсус вуҷуд дорад:
Умуман, ClickHouse дорои вазифаҳои махсус барои бисёр мақсадҳо мебошад: