on Yandexi loodud avatud lĂ€htekoodiga veergude andmebaasihaldussĂŒsteem veebipĂ”hise analĂŒĂŒtilise pĂ€ringu töötlemiseks (OLAP). Seda kasutavad Yandex, CloudFlare, VK.com, Badoo ja teised teenused ĂŒle maailma tĂ”eliselt suurte andmemahtude salvestamiseks (sisestades tuhandeid ridu sekundis vĂ”i petabaite kettale salvestatud andmeid).
Tavalises "stringi" DBMS-is, mille nÀideteks on MySQL, Postgres, MS SQL Server, salvestatakse andmed jÀrgmises jÀrjekorras:

Sel juhul salvestatakse ĂŒhe reaga seotud vÀÀrtused fĂŒĂŒsiliselt lĂ€heduses. Veergude DBMS-ides salvestatakse erinevate veergude vÀÀrtused eraldi ja ĂŒhest veerust pĂ€rinevad andmed salvestatakse koos:

VeerupÔhised DBMS-id on nÀiteks Vertica, Paraccel (Actian Matrix, Amazon Redshift), Sybase IQ, Exasol, Infobright, InfiniDB, MonetDB (VectorWise, Actian Vector), LucidDB, SAP HANA, Google Dremel, Google PowerDrill, Druid, kdb+.
Postiedastaja ettevĂ”te alustas Clickhouseâi kasutamist aruandluseks 2018. aastal ning avaldas suurt muljet selle lihtsus, mastaapsus, SQL-i tugi ja kiirus. Selle DBMS-i kiirus piirnes maagiaga.
Lihtsus
Clickhouse on paigaldatud Ubuntu ĂŒheainsa kĂ€suga. Kui sa SQL-i oskad, saad kohe Clickhouse'i oma vajaduste jaoks kasutama hakata. See aga ei tĂ€henda, et saad MySQL-is kĂ€ivitada kĂ€su "show create table" ja SQL-i Clickhouse'i kopeerida ja kleepida.
VĂ”rreldes MySQL-iga on tabeliskeemi definitsioonides olulisi andmetĂŒĂŒpide erinevusi, seega kulub teil siiski veidi aega, et tabeliskeemi mÀÀratlusi muuta ja tabelimootoreid tundma Ă”ppida.
Clickhouse töötab suurepĂ€raselt ilma tĂ€iendava tarkvarata, kuid kui soovite kasutada replikatsiooni, peate installima ZooKeeperi. PĂ€ringu jĂ”udluse analĂŒĂŒs nĂ€itab suurepĂ€raseid tulemusi - sĂŒsteemitabelid sisaldavad kogu teavet ja kĂ”iki andmeid saab vana ja igava SQL-i abil hankida.
ĐŃĐŸĐžĐ·ĐČĐŸĐŽĐžŃДлŃĐœĐŸŃŃŃ
- Clickhouse'i vÔrdlus Vertica ja MySQL-iga serveri konfiguratsioonis: kaks pesa IntelŸ XeonŸ CPU E5-2650 v2 @ 2.60 GHz; 128 GiB RAM; md RAID-5 8 6TB SATA HDD-l, ext4.
- Clickhouse'i vÔrdlus Amazon RedShifti pilvesalvestusega.
- Blogi vÀljavÔtted :

ClickHouse'i andmebaas on vĂ€ga lihtsa ĂŒlesehitusega â kĂ”ik klastri sĂ”lmed on sama funktsionaalsusega ja kasutavad koordineerimiseks ainult ZooKeeperit. Ehitasime mitmest sĂ”lmest vĂ€ikese klastri ja teostasime testimise, mille kĂ€igus leidsime, et sĂŒsteemil on ĂŒsna muljetavaldav jĂ”udlus, mis vastab analĂŒĂŒtilistes DBMS-i vĂ”rdlusalustes vĂ€lja toodud eelistele. Otsustasime ClickHouse'i kontseptsiooni lĂ€hemalt uurida. Esimene takistus uurimistööle oli tööriistade puudumine ja vĂ€ike ClickHouse'i kogukond, mistĂ”ttu sĂŒvenesime selle DBMS-i disaini, et mĂ”ista selle toimimist.
ClickHouse ei toeta andmete otse vastuvĂ”tmist Kafkalt, kuna see on lihtsalt andmebaas, nii et kirjutasime Go's oma adapteriteenuse. See luges Kafka Cap'n Proto kodeeritud sĂ”numeid, teisendas need TSV-vormingusse ja sisestas HTTP-liidese kaudu partiidena ClickHouse'i. Hiljem kirjutasime selle teenuse ĂŒmber, et kasutada toimivuse parandamiseks Go teeki koos ClickHouse'i enda liidesega. Pakettide vastuvĂ”tmise jĂ”udlust hinnates avastasime olulise asja - selgus, et ClickHouseâi puhul sĂ”ltub see jĂ”udlus tugevalt paketi suurusest ehk samaaegselt sisestatud ridade arvust. Et mĂ”ista, miks see juhtub, uurisime, kuidas ClickHouse andmeid salvestab.
Peamine mootor vÔi Ôigemini tabelimootorite perekond, mida ClickHouse andmete salvestamiseks kasutab, on MergeTree. See mootor sarnaneb pÔhimÔtteliselt Google BigTable'is vÔi Apache Cassandras kasutatava LSM-i algoritmiga, kuid vÀldib vahepealse mÀlutabeli koostamist ja kirjutab andmed otse kettale. See annab suurepÀrase kirjutamisvÔimsuse, kuna iga sisestatud pakett sorteeritakse ainult primaarvÔtme jÀrgi, tihendatakse ja kirjutatakse segmendi moodustamiseks kettale.
MĂ€lutabeli vĂ”i andmete âvĂ€rskuseâ kontseptsiooni puudumine tĂ€hendab ka seda, et neid saab ainult lisada, sĂŒsteem ei toeta muutmist ega kustutamist. Praegu on ainus viis andmete kustutamiseks kustutada need kalendrikuu jĂ€rgi, kuna segmendid ei ĂŒleta kunagi kuu piiri. ClickHouse'i meeskond töötab aktiivselt selle funktsiooni kohandamiseks. Teisest kĂŒljest muudab see segmentide kirjutamise ja ĂŒhendamise tĂŒlivabaks, nii et saate lĂ€bilaskevĂ”ime skaalasid lineaarselt samaaegsete lisade arvuga, kuni toimub I/O vĂ”i tuuma kĂŒllastumine.
See aga tĂ€hendab ka seda, et sĂŒsteem ei sobi vĂ€ikeste pakettide jaoks, mistĂ”ttu kasutatakse puhverdamiseks Kafka teenuseid ja sisestajaid. JĂ€rgmiseks jĂ€tkab ClickHouse taustal pidevalt segmentide liitmist, nii et palju vĂ€ikeseid teabekilde kombineeritakse ja salvestatakse rohkem kordi, suurendades nii salvestuse intensiivsust. Liiga palju ĂŒhendamata osi pĂ”hjustab aga sisestuste agressiivset tĂ”rjumist seni, kuni ĂŒhendamine jĂ€tkub. Oleme leidnud, et parim kompromiss reaalajas allaneelamise ja allaneelamise jĂ”udluse vahel on tabelisse piiratud arv sisestusi sekundis.
Tabeli lugemise jĂ”udluse vĂ”ti on indekseerimine ja andmete asukoht kettal. Olenemata sellest, kui kiire on töötlemine, vĂ”tab see aega, kui mootor peab kettalt skannima terabaite andmeid ja kasutama ainult osa sellest. ClickHouse on veeruline pood, nii et iga segment sisaldab iga veeru (veeru) jaoks faili, kus on iga rea ââjaoks sorteeritud vÀÀrtused. Nii saab esmalt vahele jĂ€tta terved pĂ€ringust puuduvad veerud ja seejĂ€rel töödelda mitut lahtrit paralleelselt vektoriseeritud tĂ€itmisega. TĂ€ieliku skannimise vĂ€ltimiseks on igal segmendil vĂ€ike registrifail.
Arvestades, et kĂ”ik veerud on sorteeritud âesmavĂ”tmeâ jĂ€rgi, sisaldab registrifail ainult iga N rea silte (hĂ”ive ridu), et saaks neid mĂ€llu hoida isegi vĂ€ga suurte tabelite puhul. NĂ€iteks saate mÀÀrata vaikesĂ€teteks "mĂ€rgi iga 8192. rida", seejĂ€rel "kasina" indekseerida tabelit 1 triljoniga. kergesti mĂ€llu mahtuvad read vĂ”tavad vaid 122 070 tĂ€hemĂ€rki.
SĂŒsteemi arendamine
Clickhouse'i arengut ja tÀiustamist saab jÀlgida aadressil ja veenduge, et "kasvamise" protsess toimuks muljetavaldava tempoga.

Populaarsus
Clickhouseâi populaarsus nĂ€ib hĂŒppeliselt kasvavat, eriti venekeelses kogukonnas. Eelmise aasta High load 2018 konverents (Moskva, 8.-9) nĂ€itas, et sellised koletised nagu vk.com ja Badoo kasutavad Clickhouseâi, millega nad sisestavad andmeid (nĂ€iteks logisid) samaaegselt kĂŒmnetelt tuhandetelt serveritelt. 2018-minutilises videos . Peagi postitame materjaliga töötamise hĂ”lbustamiseks Ă€rakirja Habrile.
Taotlused
PĂ€rast uurimistööle kulutamist arvan, et on valdkondi, kus ClickHouse vĂ”iks olla kasulik vĂ”i vĂ”iks tĂ€ielikult asendada teisi traditsioonilisemaid ja populaarsemaid lahendusi, nagu MySQL, PostgreSQL, ELK, Google Big Query, Amazon RedShift, TimescaleDB, Hadoop, MapReduce, Pinot ja Druiid. JĂ€rgnevalt kirjeldatakse ĂŒlaltoodud DBMS-i ajakohastamiseks vĂ”i tĂ€ielikuks asendamiseks ClickHouse'i kasutamise ĂŒksikasju.
MySQL-i ja PostgreSQL-i vÔimaluste laiendamine
Just hiljuti asendasime MySQL-i osaliselt oma uudiskirjaplatvormi ClickHouse'iga . Probleem seisnes selles, et kehva kujunduse tĂ”ttu logis MySQL iga saadetud meili ja selle lingi base64 rĂ€si abil, luues tohutu MySQL-i tabeli (email_stats). PĂ€rast teenuse tellijatele vaid 10 miljoni meili saatmist vĂ”ttis see tabel enda alla 150 GB failiruumi ja MySQL hakkas lihtsate pĂ€ringute puhul âlollâ. Failiruumi probleemi lahendamiseks kasutasime edukalt InnoDB tabeli tihendamist, mis vĂ€hendas seda 4 korda. Siiski pole siiski mĂ”tet salvestada MySQL-i rohkem kui 20-30 miljonit meili ainult lugemisajaloo huvides, kuna iga lihtne pĂ€ring, mis mingil pĂ”hjusel vajab tĂ€ielikku skannimist, pĂ”hjustab vahetust ja palju /O koormus, mille kohta saime regulaarselt Zabbixilt hoiatusi.

Clickhouse kasutab kahte tihendusalgoritmi, mis vÀhendavad andmemahtu ligikaudu , kuid sel konkreetsel juhul olid andmed eriti "kokkusurutavad".

ELK asendamine
Minu enda kogemuse pĂ”hjal nĂ”uab ELK pinu (ElasticSearch, Logstash ja Kibana, antud juhul ElasticSearch) töötamiseks palju rohkem ressursse kui logide salvestamiseks. ElasticSearch on suurepĂ€rane mootor, kui vajate head tĂ€isteksti logiotsingut (mida ma arvan, et te tegelikult ei vaja), kuid ma mĂ”tlen, miks see on muutunud de facto standardseks logimootoriks. Selle neelamisjĂ”udlus koos Logstashiga tekitas meile probleeme isegi ĂŒsna vĂ€ikese koormuse korral ja nĂ”udis ĂŒha rohkem RAM-i ja kettaruumi lisamist. Andmebaasina on Clickhouse parem kui ElasticSearch jĂ€rgmistel pĂ”hjustel:
- SQL dialekti tugi;
- Salvestatud andmete parim tihendusaste;
- Regexi regulaaravaldise otsingute tugi tÀistekstiotsingu asemel;
- TĂ€iustatud pĂ€ringu ajastamine ja suurem ĂŒldine jĂ”udlus.
Hetkel on suurim probleem, mis ClickHouseâi ELK-ga vĂ”rreldes ĂŒles kerkib, logide ĂŒleslaadimise lahenduste puudumine, samuti teemakohase dokumentatsiooni ja Ă”petuste puudumine. Lisaks saab iga kasutaja konfigureerida ELK-i Digital Oceani kĂ€siraamatu abil, mis on selliste tehnoloogiate kiireks rakendamiseks vĂ€ga oluline. Andmebaasimootor on olemas, kuid ClickHouse'i jaoks pole veel Filebeati. Jah, see on olemas ja sĂŒsteem palkidega töötamiseks , on olemas tööriist logifaili andmete sisestamiseks ClickHouse'i, kuid see kĂ”ik vĂ”tab rohkem aega. ClickHouse on aga oma lihtsuse tĂ”ttu endiselt liider, nii et isegi algajad saavad selle hĂ”lpsasti installida ja juba 10 minutiga tĂ€ielikult funktsionaalselt kasutama hakata.
Eelistades minimalistlikke lahendusi, proovisin koos ClickHouse'iga kasutada vĂ€ga vĂ€hese mĂ€luga logide saatmise tööriista FluentBit, pĂŒĂŒdes samas vĂ€ltida Kafka kasutamist. KĂŒll aga tuleb tegeleda vĂ€iksemate sobimatustega, nt Enne seda saab teha ilma puhverserveri kihita, mis teisendab andmed FluentBitist ClickHouse'iks.
Alternatiivina saab Kibanat kasutada ClickHouse'i taustaprogrammina . Minu arusaamist mööda vÔib see pÔhjustada jÔudlusprobleeme suure hulga andmepunktide renderdamisel, eriti Grafana vanemate versioonide puhul. Me pole seda Qwintrys veel proovinud, kuid Telegrami ClickHouse'i tugikanalis ilmuvad aeg-ajalt selle kohta kaebused.
Google Big Query ja Amazon RedShifti asendamine (lahendus suurettevÔtetele)
Ideaalne BigQuery kasutusjuht on laadida 1 TB JSON-andmeid ja kĂ€itada sellel analĂŒĂŒtilisi pĂ€ringuid. Big Query on suurepĂ€rane toode, mille skaleeritavust ei saa ĂŒle hinnata. See on siseklastris töötavast ClickHouse'ist palju keerulisem tarkvara, kuid kliendi seisukohast on sellel palju ĂŒhist ClickHouse'iga. BigQuery vĂ”ib kiiresti kalliks minna, kui hakkate SELECTi eest maksma, seega on see tĂ”eline SaaS-i lahendus koos oma plusside ja miinustega.
ClickHouse on parim valik, kui kĂ€itate palju arvutuslikult kulukaid pĂ€ringuid. Mida rohkem SELECT pĂ€ringuid iga pĂ€ev kĂ€ivitate, seda mĂ”ttekam on Big Query asendada ClickHouse'iga, sest selline asendus vĂ”ib sÀÀsta tuhandeid dollareid, kui tegemist on paljude terabaitide töödeldavate andmetega. See ei kehti salvestatud andmete kohta, mida on Big Querys ĂŒsna odav töödelda.
Altinity kaasasutaja Aleksander Zaitsevi artiklis rÀÀgib sellise DBMS-i migratsiooni eelistest.
TimescaleDB asendamine
TimescaleDB on PostgreSQL-i laiendus, mis optimeerib tööd aegridade aegridadega tavalises andmebaasis (, ).
Kuigi ClickHouse ei ole tĂ”sine konkurent aegridade niĆĄis, vaid veerukujulise struktuuri ja vektorpĂ€ringu tĂ€itmisega, on see enamikel juhtudel analĂŒĂŒtilise pĂ€ringu töötlemisel palju kiirem kui TimescaleDB. Samal ajal on ClickHouse'ist pakiandmete vastuvĂ”tmise jĂ”udlus ligikaudu 3 korda suurem ja see kasutab ka 20 korda vĂ€hem kettaruumi, mis on vĂ€ga oluline suurte ajalooliste andmete töötlemiseks: âš.
Erinevalt ClickHouse'ist on ainus viis TimescaleDB kettaruumi sÀÀstmiseks kasutada ZFS-i vĂ”i sarnaseid failisĂŒsteeme.
ClickHouse'i eelseisvad uuendused vÔtavad tÔenÀoliselt kasutusele delta tihendamise, mis muudab selle aegridade andmete töötlemiseks ja salvestamiseks veelgi sobivamaks. TimescaleDB vÔib olla parem valik kui paljas ClickHouse jÀrgmistel juhtudel:
- vÀikesed installid vÀga vÀhese RAM-iga (<3 GB);
- suur hulk vÀikeseid INSERTe, mida te ei soovi puhverdada suurteks fragmentideks;
- parem jĂ€rjepidevus, ĂŒhtlus ja ACID nĂ”uded;
- PostGIS-i tugi;
- liitumine olemasolevate PostgreSQL-i tabelitega, kuna ajaskaala DB on sisuliselt PostgreSQL.
VĂ”istlus Hadoopi ja MapReduce sĂŒsteemidega
Hadoop ja teised MapReduce'i tooted suudavad teha palju keerulisi arvutusi, kuid neil on tavaliselt suur latentsusaeg. ClickHouse lahendab selle probleemi, töötledes terabaiti andmeid ja andes tulemusi peaaegu kohe. Seega on ClickHouse palju tĂ”husam kiirete interaktiivsete analĂŒĂŒtiliste uuringute lĂ€biviimisel, mis peaks andmeteadlastele huvi pakkuma.
VÔistlus Pinot ja Druidiga
ClickHouse'i lĂ€himad konkurendid on sammaskujulised, lineaarselt skaleeritavad avatud lĂ€htekoodiga tooted Pinot ja Druid. Artiklis on avaldatud suurepĂ€rane töö nende sĂŒsteemide vĂ”rdlemiseks kuupĂ€evaga 1. veebruar 2018

See artikkel vajab vĂ€rskendamist â seal öeldakse, et ClickHouse ei toeta UPDATE ja DELETE toiminguid, mis ei kehti viimaste versioonide puhul tĂ€ielikult.
Meil pole nende andmebaasidega palju kogemusi, kuid mulle ei meeldi Druidi ja Pinoti kĂ€itamiseks vajaliku infrastruktuuri keerukus â see on terve hulk liikuvaid osi, mida igast kĂŒljest ĂŒmbritseb Java.
Druid ja Pinot on Apache inkubaatoriprojektid, mille edenemist Apache oma GitHubi projektilehtedel ĂŒksikasjalikult kajastab. Pinot ilmus inkubaatorisse 2018. aasta oktoobris ja Druid sĂŒndis 8 kuud varem â veebruaris.
Teabe puudumine AFS-i toimimise kohta tekitab minus mĂ”ningaid ja vĂ”ib-olla rumalaid kĂŒsimusi. Huvitav, kas Pinot autorid mĂ€rkasid, et Apache Foundation on Druidi suhtes soosivam ja kas selline suhtumine konkurendisse tekitas kadedust? Kas Druidi areng aeglustub ja Pinotâ areng kiireneb, kui esimese toetajad hakkavad ootamatult teise vastu huvi tundma?
ClickHouse'i puudused
EbakĂŒpsus: Ilmselgelt pole see ikka veel igav tehnoloogia, kuid igal juhul ei tĂ€heldata teistes veergude DBMS-ides midagi sellist.
VĂ€ikesed lisad ei tööta suurel kiirusel hĂ€sti: lisad tuleb jagada suuremateks tĂŒkkideks, kuna vĂ€ikeste sisestuste jĂ”udlus halveneb proportsionaalselt veergude arvuga igas reas. Nii salvestab ClickHouse andmed kettale â iga veerg tĂ€histab 1 faili vĂ”i enamat, nii et 1 veergu sisaldava rea ââsisestamiseks tuleb avada ja kirjutada vĂ€hemalt 100 faili. SeetĂ”ttu on lisade puhverdamiseks vaja vahendajat (kui klient ise puhverdamist ei paku) - tavaliselt Kafka vĂ”i mĂ”ni jĂ€rjekorrahaldussĂŒsteem. Puhvertabeli mootorit saate kasutada ka suurte andmete kopeerimiseks hiljem MergeTree tabelitesse.
Tabelite liitumisi piirab serveri RAM, kuid vĂ€hemalt on need olemas! NĂ€iteks Druidil ja Pinotil pole selliseid ĂŒhendusi ĂŒldse, kuna neid on keeruline otse juurutada hajutatud sĂŒsteemides, mis ei toeta suurte andmetĂŒkkide liigutamist sĂ”lmede vahel.
JĂ€reldused
Plaanime ClickHouse'i lĂ€hiaastatel Qwintrys laialdaselt kasutada, kuna see DBMS tagab suurepĂ€rase jĂ”udluse, madala ĂŒldkulu, mastaapsuse ja lihtsuse tasakaalu. Olen ĂŒsna kindel, et see hakkab kiiresti levima, kui ClickHouse'i kogukond pakub rohkem vĂ”imalusi selle kasutamiseks vĂ€ikestes ja keskmise suurusega installides.
MĂ”ned reklaamid đ
TÀname, et jÀite meiega. Kas teile meeldivad meie artiklid? Kas soovite nÀha huvitavamat sisu? Toeta meid, esitades tellimuse vÔi soovitades sÔpradele, , algtaseme serverite ainulaadne analoog, mille me teie jaoks leiutasime: (saadaval RAID1 ja RAID10, kuni 24 tuuma ja kuni 40 GB DDR4-ga).
Dell R730xd 2x odavam Amsterdami Equinixi Tier IV andmekeskuses? Ainult siin Hollandis! Dell R420 â 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB â alates 99 dollarist! Millegi kohta lugema
Allikas: www.habr.com
