â see on avatud lĂ€htekoodiga veergudepĂ”hine andmebaaside haldussĂŒsteem (OLAP) Internetis analĂŒĂŒtiliste pĂ€ringute töötlemiseks, mille lĂ”i Yandex. Seda kasutavad Yandex, CloudFlare, VK.com, Badoo ja paljud teised teenused kĂ”ikjal maailmas tĂ”eliselt suurte andmehulkade salvestamiseks (tuhandete ridade sisestamine sekundis vĂ”i petabaidide kaupa andmete salvestamine kettale).
Tavalisel, «reapĂ”hisel» andmebaasi haldussĂŒsteemil, milleks on nĂ€iteks MySQL, Postgres, MS SQL Server, sĂ€ilitatakse andmed sellises jĂ€rjestuses:

Samas on vÀÀrtused, mis kuuluvad ĂŒhte ritta, fĂŒĂŒsiliselt lĂ€hedal. VeergudepĂ”histes andmebaasides salvestatakse erinevate veergude vÀÀrtused eraldi, ja ĂŒhe veeru andmed on koos:

VeergudepÔhiste andmebaaside nÀideteks on Vertica, Paraccel (Actian Matrix, Amazon Redshift), Sybase IQ, Exasol, Infobright, InfiniDB, MonetDB (VectorWise, Actian Vector), LucidDB, SAP HANA, Google Dremel, Google PowerDrill, Druid, kdb+.
EttevĂ”te â meilifoward hakks kasutama Clickhouse'i 2018. aastal aruannete koostamiseks ja oli vĂ€ga muljet avaldanud selle lihtsuse, skaleeritavuse, SQL toe ja kiirusest. Selle andmebaasi töö kiirus oli peaaegu nagu nĂ”idus.
Lihtsus
Clickhouse on Ubuntu installitakse ĂŒheainsa kĂ€suga. Kui oskate SQL-i, saate kohe hakata Clickhouse'i kasutama. See ei tĂ€henda aga, et saaksite MySQL-is "show create table" teha ja SQL-i lihtsalt kopeerida ja kleepida Clickhouse'i.
VĂ”rreldes MySQL-iga on selle andmebaasi puhul tabeliskeemide mÀÀratlemisel olulisi andmetĂŒĂŒpide erinevusi. SeetĂ”ttu on mugavaks töötamiseks vajalik veidi aega tabeliskeemide mÀÀratlemiste muutmiseks ja tabelimootorite tundmaĂ”ppimiseks.
Clickhouse töötab suurepĂ€raselt ilma igasuguse lisatarkvarata, kuid kui soovite kasutada replikatsiooni, peate installima ZooKeeperi. PĂ€ringute jĂ”udluse analĂŒĂŒs nĂ€itab suurepĂ€raseid tulemusi â sĂŒsteemitabelid sisaldavad kogu teavet ning kĂ”ik andmed on kĂ€ttesaadavad vanade ja igavate SQL-i abil.
Tootlikkus
- Clickhouse'i vÔrreldes Vertica ja MySQL-ga konfigureeritud serveris: kaks IntelŸ XeonŸ CPU E5-2650 v2 @ 2,60 GHz; 128 GiB RAM; md RAID-5 8 6TB SATA HDD-l, ext4.
- Clickhouse'i vÔrreldes Amazon RedShifti pilveandmehoidla.
- Blogi vÀljavÔtted :

ClickHouse'i andmebaas omab vĂ€ga lihtsat disaini â kĂ”ik klastris olevad sĂ”lmed tĂ€idavad samu funktsioone ja koordineerimise jaoks kasutatakse ainult ZooKeeperit. Oleme ehitanud vĂ€ikese klastrite gruppi ja viinud lĂ€bi teste, mille kĂ€igus leidsime, et sĂŒsteemil on ĂŒllatavalt hea jĂ”udlus, mis vastab analĂŒĂŒtiliste andmebaaside benchmarkâides lubatud eelistele. Otsustasime pĂ”hjalikumalt uurida ClickHouse'i aluseks olevat kontseptsiooni. Esimese teadusuuringute takistusena oli tööriistade puudus ja ClickHouse'i kogukonna vĂ€henenud suurus, mistĂ”ttu sĂŒvenesime selle andmebaasi disaini, et mĂ”ista, kuidas see toimib.
ClickHouse ei toeta andmete vastuvĂ”ttu otse Kafka'lt, kuna see on lihtsalt andmebaas. SeetĂ”ttu kirjutasime me oma adaptermooduli Go keeles. See luges Kafka'st kodeeritud Capân Proto sĂ”numeid, konverteeris need TSV formaati ja sisestas ClickHouse'i pakettide kaupa lĂ€bi HTTP-liidese. Hiljem kirjutasime selle teenuse ĂŒmber, et kasutada Go raamatukogu koos ClickHouse'i oma liidese kasutamisega, et parandada jĂ”udlust. PaketivastuvĂ”tu jĂ”udluse hindamisel avastasime olulise asja â selgus, et ClickHouse'i jĂ”udlus sĂ”ltub suurel mÀÀral paketist, st samaaegselt sisestatud ridade arvust. Selle mĂ”istmiseks uurisime, kuidas ClickHouse andmeid salvestab.
ClickHouse'i andmete salvestamiseks kasutatav peamine, pigem mootori perekond on MergeTree. See mootor on kontseptuaalselt sarnane LSM-algoritmiga, mis on rakendatud Google BigTable'is vÔi Apache Cassandra's, kuid vÀldib vahepealse mÀlutabeli loomist ning kirjutab andmed otse kettale. See annab sellele suurepÀrase kirjutamise lÀbilaskevÔime, kuna iga sisestatud partii sorteeritakse ainult "esimese vÔtme" (primary key) jÀrgi, tihendatakse ja kirjutatakse kettale, et luua segment.
MĂ€lu tabeli vĂ”i andmete "vĂ€rskuse" puudumine tĂ€hendab, et andmeid saab ainult lisada, nende muutmist vĂ”i kustutamist sĂŒsteem ei toeta. Praegu on ainus viis andmete kustutamine kuude kaupa, kuna segmentide vahel ei teki kunagi kuupiire. ClickHouse meeskond töötab aktiivselt selle funktsiooni kohandatavamaks muutmise nimel. Teisest kĂŒljest muudab see konfliktivabaks segmentide kirjutamise ja ĂŒhendamise, seega vastuvĂ”tu lĂ€bilaskevĂ”ime skaleerub joonearselt paralleelsete insertide arvuga, kuni ei tekita I/O vĂ”i tuumade kĂŒllastumist.
Kuid see olukord tĂ€hendab ka, et sĂŒsteem ei sobi vĂ€ikeste pakettide jaoks, mistĂ”ttu kĂŒlastatakse puhverdamiseks Kafka teenuseid ja insertereid. Edasi, ClickHouse jĂ€tkab taustal pidevat segmentide sulandamist, nii et paljud vĂ€ikesed andmepalad ĂŒhendatakse ja salvestatakse rohkem kordi, suurendades sellega kirjutamise intensiivsust. Sellega seoses vĂ”ib liiga palju seotud osi pĂ”hjustada sisendite agressiivset piiramist, kuni sulandamine kestab. Oleme leidnud, et parim kompromiss reaalajas andmete vastuvĂ”tu ja vastuvĂ”tu efektiivsuse vahel on piiratud arvu sisendite vastuvĂ”tt sekundis.
Lugemise tabelite jĂ”udluse vĂ”tmekomponent on indekseerimine ja andmete paigutus kĂ”vakettale. ĂkskĂ”ik kui kiire on töötlemine, kui mootor peab skaneerima terabayte andmeid kettalt ja kasutama neist vaid osa, vĂ”tab see aega. ClickHouse on veergude andmete hoidla, seega iga segment sisaldab faili iga veeru jaoks, kus on iga rea jaoks jĂ€rjestatud vÀÀrtused. Seega saavad kogu veerud, mida pĂ€ringus ei ole, esialgu vahele jĂ€etud ning seejĂ€rel vĂ”ivad mitmed lahtrid olla töödeldud paralleelselt vektoriseeritud tĂ€itmisega. TĂ€ieliku skaneerimise vĂ€ltimiseks on igal segmendil vĂ€ike indeksifail.
Arvestades, et kĂ”ik veerud on jĂ€rjekorras âpeamise vĂ”tmeâ jĂ€rgi, sisaldab indeksifail ainult mĂ€rke (tabatud read) igast N-ndast reast, et neid oleks vĂ”imalik hoida mĂ€lus isegi vĂ€ga suurte tabelite jaoks. NĂ€iteks saab seada vaikeseaded âmĂ€rgistada iga 8192. reaâ, siis âkarmâ tabeli indekseerimine, mis sisaldab 1 triljonit rida, mis mahub kergesti mĂ€llu, vĂ”tab vaid 122 070 tĂ€hemĂ€rki.
SĂŒsteemi areng
Clickhouse'i arengut ja tĂ€iustamist saab jĂ€lgida ja veenduda, et 'kĂŒpsemise' protsess toimub muljetavaldava kiirusel.

Populaarsus
Tundub, et Clickhouse'i populaarsus kasvab eksponentsiaalselt, eriti venekeelses kogukonnas. Eelmise aasta High Load 2018 konverents nĂ€itas, et sellised hiiglased nagu vk.com ja Badoo kasutavad Clickhouse'i, mille abil sisestavad nad andmeid (nt logisid) kĂŒmnetelt tuhandelt serverilt ĂŒheaegselt. 40-minutilises videos . Peagi avaldame mugavuse huvides stenogrammi Habr's.
Rakendusvaldkonnad
PĂ€rast teatud aja veetmist uurimisel usun, et on valdkondi, kus ClickHouse vĂ”ib olla kasulik vĂ”i suudab tĂ€ielikult asendada teisi, traditsioonilisemaid ja populaarsemaid lahendusi nagu MySQL, PostgreSQL, ELK, Google Big Query, Amazon RedShift, TimescaleDB, Hadoop, MapReduce, Pinot ja Druid. JĂ€rgnevalt on toodud ĂŒksikasjad ClickHouse'i kasutamise kohta ĂŒlaltoodud andmebaaside moderniseerimiseks vĂ”i tĂ€ielikuks asendamiseks.
MySQL ja PostgreSQL vÔimaluste laiendamine
Hiljuti asendasime osaliselt MySQL-i ClickHouse'iga uudiskirjade platvormil. . Probleem oli selles, et MySQL registreeris igasuguse saatmise ja iga kirjas oleva lingi base64-koodiga, luues hiiglasliku MySQL tabeli (email_stats). PĂ€rast 10 miljoni kirja saatmist teenuse tellijatele oli see tabel 150 GB suurune, mille tĂ”ttu MySQL hakkas lihtsate pĂ€ringute puhul "tĂŒkki tundma". Probleemi lahendamiseks kasutame tĂ”husalt InnoDB tabeli tihendamist, mis vĂ€hendas selle mahtu neljakordselt. Siiski pole mĂ”tet hoida MySQL-is enam kui 20-30 miljonit e-kirja vaid ajaloo lugemise nimel, kuna iga lihtne pĂ€ring, mis mingil pĂ”hjusel peab teostama tĂ€isskaneerimise, pĂ”hjustab vahetusmĂ€lu ja suurt I/O koormust, millest saime regulaarselt Zabbix'i hoiatusi.

Clickhouse kasutab kahte tihendamisalgoritmi, mis vÀhendavad andmete mahtu umbes , kuid antud konkreetses juhul olid andmed eriti "tihendatavad".

ELK asendamine
Oma kogemusele tuginedes nÔuab ELK (ElasticSearch, Logstash ja Kibana, antud juhul ElasticSearch) logide kÀitamiseks palju rohkem ressursse kui logide salvestamiseks vajalik. ElasticSearch on suurepÀrane mootor, kui vajate logides head tÀisteksti otsingu vÔimalust (kuigi ma ei arva, et see teile tÔeliselt vajalik oleks), kuid mind huvitab, miks on sellest de-facto saanud standardne ajakirjanduse mootor. Selle vastuvÔtutootlikkus koos Logstashiga on meile tekitanud probleeme isegi suhteliselt vÀikeste koormuste korral ja on nÔudnud jÀrjest rohkem RAM-i ja kettaruumi. Andmebaasina on Clickhouse ElasticSearchist parem jÀrgmistel pÔhjustel:
- SQL dialekti tugi;
- Parema andmete kokkusurumise aste;
- Regex regulaaravaldiste otsingu tugi tÀisteksti otsingu asemel;
- Parandatud pĂ€ringute kavandamine ja kĂ”rgem ĂŒldine tootlikkus.
Praegu on ClickHouse'i ja ELK vĂ”rreldes suurim probleem logide vĂ€ljastamise lahenduste puudumine ning samuti dokumentatsiooni ja Ă”ppematerjalide nappus selle teema kohta. Samas saab iga kasutaja ELKi seadistada Digital Ocean'i juhendi abil, mis on vĂ€ga oluline selliste tehnoloogiate kiireks kasutuselevĂ”tuks. Andmebaasi mootor on olemas, kuid Filebeat'i tugi ClickHouse'ile puudub. Jah, seal on olemas ja logide töötlemise sĂŒsteem , on olemas tööriist logifailide andmete sisestamiseks ClickHouse'i, kuid see kĂ”ik nĂ”uab rohkem aega. Siiski on ClickHouse endiselt liider oma lihtsuse tĂ”ttu, mistĂ”ttu isegi algajad saavad selle paigaldada ja hakata tĂ€isfunktsionaalset kasutama vaid 10 minuti pĂ€rast.
Minimaalseid lahendusi eelistades proovisin kasutada FluentBit'i, vĂ€ga vĂ€ikese mĂ€lu kasutusega logide vĂ€ljastamise tööriista, koos ClickHouse'iga, vĂ€ltides samas Kafka kasutamist. Kuid mĂ”ned vĂ€iksed ĂŒhilduvusprobleemid, nagu , enne kui seda saab teha ilma proksivaateta, mis muudab andmed FluentBitist ClickHouse'i.
Alternatiivina Kibana'le saab ClickHouse'i kasutada tagaplaanina . Nagu aru sain, vĂ”ivad sellega kaasneda jĂ”udlusprobleemid suurte andmepunktide renderdamisel, eriti vanemate Grafana versioonidega. Qwintry's me pole seda veel proovinud, kuid kaebusi selle ĂŒle on aeg-ajalt tulnud ClickHouse'i tugikanalist Telegramis.
Google Big Query ja Amazon RedShift'i asendamine (lahendus suurtele ettevÔtetele)
BigQuery ideaalne kasutusviis on laadida 1 TB JSON andmeid ja teha nende pĂ”hjal analĂŒĂŒtilisi pĂ€ringuid. BigQuery on suurepĂ€rane toode, mille skaleeritavust on raske ĂŒle hinnata. See on palju keerulisem tarkvara kui ClickHouse, mis töötab sisevĂ”rgus, kuid kliendi seisukohalt on tal ClickHouse'iga palju ĂŒhist. BigQuery vĂ”ib kiiresti âkalliksâ minna, kui hakkate maksma iga SELECT'i eest, seega on see tĂ”eline SaaS-lahendus koos kĂ”igi oma plusside ja miinustega.
ClickHouse on parim valik, kui teete palju arvutuslikult kulukaid pĂ€ringuid. Mida rohkem SELECT pĂ€ringuid te iga pĂ€ev teete, seda rohkem tasub Big Query asendada ClickHouse'iga, sest see vahetus aitab sÀÀsta tuhandeid dollareid, kui tegemist on suurte terabaitide töötlemisega. See ei kehti salvestatud andmete puhul, mille töötlemine Big Query's on ĂŒsna odav.
Artiklis, mille on koostanud Altinity kaasasutaja Aleksandr Zaitsev kÀsitletakse sellise andmebaasi migreerimise eeliseid.
TimescaleDB asendamine
TimescaleDB on PostgreSQL laiendus, mis optimeerib ajaseeriate töötlemist tavalises andmebaasis., ).
Kuigi ClickHouse ei ole tĂ”sine konkurent ajareadade niĆĄis, on selle veergude struktuur ja vektorkĂŒsimuste tĂ€itmine enamikus analĂŒĂŒsipĂ€ringute töötlemisel TimescaleDB-st mĂ€rgatavalt kiirem. Samuti on ClickHouse-i pakettide andmete vastuvĂ”tu jĂ”udlus umbes 3 korda parem, ning ta kasutab 20 korda vĂ€hem diskiruumi, mis on tĂ”eliselt oluline suurte ajalooliste andmemahtude töötlemisel: âš.
Erinevalt ClickHouse'ist on TimescaleDB-s ainus viis veidi diskiruumi kokku hoida ZFS-i vĂ”i sarnaste failisĂŒsteemide kasutamine.
Eelseisvad ClickHouse uuendused toovad tÔenÀoliselt sisse delta-kompressiooni, mis muudab selle veelgi sobivamaks ajareadade andmete töötlemiseks ja salvestamiseks. TimescaleDB vÔib olla parem valik kui 'puhtal' ClickHouse'il jÀrgmistes olukordades:
- vÀiksed installatsioonid, kus on vÀga vÀhe RAM-i (<3 GB);
- suure hulga vÀikeste INSERT-kÀskude puhul, mida te ei soovi suurtesse fragmentidesse puhverdada;
- parem jĂ€rjepidevus, ĂŒhtsus ja ACID-nĂ”uded;
- PostGIS-i tugi;
- ĂŒhendamine olemasolevate PostgreSQL tabelitega, kuna Timescale DB on pĂ”himĂ”tteliselt PostgreSQL.
Konkurents Hadoopi ja MapReduce sĂŒsteemidega
Hadoop ja muud MapReduce tooted vĂ”ivad teostada mitmeid keerulisi arvutusi, kuid need töötavad tavaliselt vĂ€ga suurtel viivitustega. ClickHouse lahendab selle probleemi, töötledes terabaiti andmeid ja andes tulemusi peaaegu kohe. Seega on ClickHouse palju tĂ”husam kiiret, interaktiivset analĂŒĂŒtilist uurimistööd tehes, mis peaks andmetöötluse spetsialiste kindlasti huvitama.
Konkurents Pinot ja Druidiga
ClickHouse'i lĂ€himad konkurendid on veergude pĂ”hised lineaarse skaleeritavuse avatud lĂ€htekoodiga tooted Pinot ja Druid. Nende sĂŒsteemide vĂ”rdlev hea töö on avaldatud artiklis 1. veebruar 2018

See artikkel vajab vĂ€rskendamist â see vĂ€idab, et ClickHouse ei toeta UPDATE ja DELETE toiminguid, mis ei ole viimaste versioonide osas tĂ€ielikult tĂ”si.
Meil ei ole piisavalt kogemusi nende andmebaaside haldamisel, kuid mulle ei meeldi ĂŒldse Druid'i ja Pinot'i kĂ€itamiseks vajaliku infrastruktuuri keerukus â seal on palju âliikuvaid osiâ, mis on Java ĂŒmber ehitatud.
Druid ja Pinot on Apache'i inkubaatoriprojektid, mille arengut kajastatakse pĂ”hjalikult Apache'i GitHub'i projektilehtedel. Pinot ilmus inkubaatorisse 2018. aasta oktoobris, samas kui Druid sĂŒndis kaheksa kuud varem â veebruaris.
Teave AFS-i toimimise kohta on vĂ€hene ning see tekitab minus mĂ”ned, vĂ”ib-olla rumalad kĂŒsimused. Huvi pakub, kas Pinot'i autorid on mĂ€rganud, et Apache Foundation on Druid'ile soodsamalt meelestatud, ning kas see on tekitanud konkurendi suhtes kadedust? Kas Druid'i areng pidurdub ja Pinot'i areng kiireneb, kui esimese toetajad Ă€kki teisega enamasti huvi tunnevad?
ClickHouse'i puudused
VÀhenenud vÔrreldes: ilmselgelt on see endiselt arenev tehnoloogia, kuid sarnaseid probleeme ei ole teiste veergude andmebaasides tÀheldatud.
VĂ€ikesed sisendiĂŒksused ei tööta kĂ”rge kiirusel hĂ€sti: sisendid peaksid olema jagatud suurte tĂŒkkideks, kuna vĂ€ikeste sisendiĂŒksuste jĂ”udlus vĂ€heneb proportsionaalselt iga rea veergude arvule. Just nii salvestatakse andmeid ClickHouse'is kettale â iga veerg tĂ€hendab ĂŒht vĂ”i enamat faili, seega 1 rea sisestamiseks, mis sisaldab 100 veergu, tuleb avada ja kirjutada vĂ€hemalt 100 faili. SeetĂ”ttu on sisendite puhvherdamiseks vajalik vahendaja (kui klient ise puhvreerimist ei taga) â tavaliselt on selleks Kafka vĂ”i mĂ”ni jĂ€rjekorrasĂŒsteem. Samuti saab kasutada Buffer tabeli mootorit, et hiljem kopeerida suuri andmefragmente MergeTree tabelitesse.
Tabelite ĂŒhendused on piiratud serveri RAM-iga, kuid vĂ€hemalt need on olemas! NĂ€iteks Druidil ja Pinotil ei ole ĂŒldse selliseid ĂŒhendusi, kuna nende rakendamine on keeruline jaotatud sĂŒsteemides, mis ei toeta suurte andmekoguste liikumist sĂ”lmede vahel.
JĂ€reldused
JĂ€rgmiste aastate jooksul plaanime Qwintrys laialdaselt kasutada ClickHouse'i, kuna see andmebaasihaldussĂŒsteem pakub suurepĂ€rast tasakaalu jĂ”udluse, madalate kulude, skaleeritavuse ja lihtsuse vahel. Olen peaaegu kindel, et see hakkab kiiresti laienema, kui ClickHouse'i kogukond vĂ€lja mĂ”tleb rohkem vĂ”imalusi selle kasutamiseks vĂ€ikestes ja keskmistes installatsioonides.
Veidi reklaami đ
AitĂ€h, et olete meiega. Kas teile meeldivad meie artiklid? Kas soovite nĂ€ha rohkem huvitavaid materjale? Toetage meid, tehes tellimuse vĂ”i soovitades meid tuttavatele. , ainulaadne sisenemise taseme serverite analoog, mille oleme teie jaoks vĂ€lja mĂ”elnud: (saadaval on RAID1 ja RAID10 variandid, kuni 24 sĂŒdamikku ja kuni 40GB DDR4).
Kas Dell R730xd on kaks korda odavam Equinixi Tier IV andmete keskuses Amsterdamis? Ainult meie juures Hollandi turul! Dell R420 â 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB â alates $99! Lugege, kuidas
Allikas: habr.com
