Bikaranîna Clickhouse wekî şûna ELK, Big Query û TimescaleDB

Clickhouse Pergalek rêveberiya databasa stûnek-çavkaniya vekirî ya ji bo pêvajoya lêpirsîna analîtîk a serhêl (OLAP) ye ku ji hêla Yandex ve hatî afirandin. Ew ji hêla Yandex, CloudFlare, VK.com, Badoo û karûbarên din ên li çaraliyê cîhanê ve tê bikar anîn da ku bi rastî mîqdarên mezin dane tomar bike (navkirina bi hezaran rêzan di çirkekê de an petabytes daneyên ku li ser dîskê hatine hilanîn).

Di DBMS-ya normal, "string" de, ku mînakên wê MySQL, Postgres, MS SQL Server in, dane bi vê rêzê têne hilanîn:

Bikaranîna Clickhouse wekî şûna ELK, Big Query û TimescaleDB

Di vê rewşê de, nirxên ku bi yek rêzê ve girêdayî ye, bi fîzîkî li kêleka hev têne hilanîn. Di DBMS-ya stûnê de, nirxên ji stûnên cihêreng têne hilanîn, û daneyên yek stûnê bi hev re têne hilanîn:

Bikaranîna Clickhouse wekî şûna ELK, Big Query û TimescaleDB

Mînakên DBMS-yên stûnî Vertica, Paraccel (Actian Matrix, Amazon Redshift), Sybase IQ, Exasol, Infobright, InfiniDB, MonetDB (VectorWise, Actian Vector), LucidDB, SAP HANA, Google Dremel, Google PowerDrill, Druid, kdb+ ne.

Şirket şandina nameyê ye Qwintry Min di sala 2018-an de ji bo raporkirinê dest bi karanîna Clickhouse kir û ji sadebûn, pîvandin, piştgirîya SQL û leza wê pir bandor bûm. Leza vê DBMS bi sêrbaziyê re sînordar bû.

sivikî

Clickhouse bi yek fermanê li Ubuntu saz dike. Ger hûn SQL dizanin, hûn dikarin tavilê ji bo hewcedariyên xwe dest bi karanîna Clickhouse bikin. Lêbelê, ev nayê vê wateyê ku hûn dikarin di MySQL de "tabloya biafirînin" nîşan bidin û SQL-ê li Clickhouse-ê kopî-paste bikin.

Li gorî MySQL, di vê DBMS-ê de di pênaseyên şema tabloyê de cûdahiyên celebên daneyê yên girîng hene, ji ber vê yekê hûn hîn jî hewceyê hin dem in ku hûn pênaseyên şema tabloyê biguhezînin û motorên tabloyê fêr bibin da ku rehet bibin.

Clickhouse bêyî nermalava pêvek pir baş dixebite, lê heke hûn dixwazin dubarekirinê bikar bînin, hûn ê hewce bikin ku ZooKeeper saz bikin. Analîzkirina performansa pirsê encamên hêja destnîşan dike - tabloyên pergalê hemî agahdarî dihewîne, û hemî dane dikarin bi karanîna SQL-ya kevn û bêzar werin vegerandin.

Berhemdariyê

  • Benchmark Clickhouse beramberî Vertica û MySQL berhevoka li ser servera veavakirinê: du soket Intel® Xeon® CPU E5-2650 v2 @ 2.60GHz; 128 GiB RAM; md RAID-5 li ser 8 6TB SATA HDD, ext4.
  • Benchmark berhevdana Clickhouse bi hilanîna cloudê ya Amazon RedShift re.
  • Bişkojkên blogê Cloudflare di derbarê performansa Clickhouse de:

Bikaranîna Clickhouse wekî şûna ELK, Big Query û TimescaleDB

Databasa ClickHouse xwedan sêwiranek pir hêsan e - hemî girêkên di komê de xwedî heman fonksiyonê ne û ji bo hevrêziyê tenê ZooKeeper bikar tînin. Me komek piçûk ji çend nokan ava kir û ceribandinek kir, di dema ku me dît ku pergal xwedan performansa pir bi heybet e, ku bi avantajên îdîakirî yên di pîvanên DBMS analîtîk de têkildar e. Me biryar da ku em ji nêz ve li konsepta li pişt ClickHouse binêrin. Astengiya yekem a lêkolînê nebûna amûran û civata piçûk a ClickHouse bû, ji ber vê yekê me di sêwirana vê DBMS-ê de xêz kir da ku fêm bikin ka ew çawa dixebite.

ClickHouse piştgirî nade wergirtina daneyan rasterast ji Kafka ji ber ku ew tenê databasek e, ji ber vê yekê me karûbarê xweya adapterê li Go nivîsand. Wê peyamên şîfrekirî yên Cap'n Proto ji Kafka dixwend, ew veguherand TSV û bi navbeynkariya HTTP-ê ve ew bi koman ve di ClickHouse de xist. Dûv re me ev karûbar ji nû ve nivîsand da ku pirtûkxaneya Go bi pêwendiya xweya ClickHouse re bikar bîne da ku performansê baştir bike. Dema ku em performansa wergirtina pakêtan dinirxînin, me tiştek girîng kifş kir - derket holê ku ji bo ClickHouse ev performans bi giranî bi mezinahiya pakêtê ve girêdayî ye, ango, hejmara rêzên ku bi hevdemî têne danîn. Ji bo ku fêm bikin ka çima ev diqewime, me nihêrî ka ClickHouse çawa daneyan hilîne.

Motora sereke, an bêtir, malbatek motorên tabloyê ku ji hêla ClickHouse ve ji bo hilanîna daneyan tê bikar anîn, MergeTree ye. Ev motor ji hêla têgehî ve dişibihe algorîtmaya LSM-ê ya ku di Google BigTable an Apache Cassandra de tê bikar anîn, lê ji avakirina tabloyek bîranîna navîn dûr dikeve û daneyan rasterast li ser dîskê dinivîse. Ev rêgezek nivîsandinê ya hêja dide wê, ji ber ku her pakêtek têxistî tenê ji hêla mifteya bingehîn a "mifteya seretayî" ve tê veqetandin, tê pêçandin û li ser dîskê tê nivîsandin da ku perçeyek çêbike.

Nebûna tabloya bîranînê an têgehek "teze" ya daneyan jî tê vê wateyê ku ew tenê dikarin werin zêdekirin, pergal piştgirî nade guhertin an jêbirin. Ji îro pê ve, yekane awayê jêbirina daneyan ev e ku meriv wê li gorî meha salnameyê jê bibe, ji ber ku beş qet sînorê mehekê derbas nakin. Tîma ClickHouse bi aktîvî li ser çêkirina vê taybetmendiyê bikêrhatî dixebite. Ji hêla din ve, ew nivîsandin û yekkirina beşan bê nîqaş dike, ji ber vê yekê pîvanên rêwerzê bi jimareya têkelên paralel re bi rêkûpêk werdigirin heya ku I/O an jî kor têr bibin.
Lêbelê, ev rewş jî tê vê wateyê ku pergal ji bo pakêtên piçûk ne guncan e, ji ber vê yekê karûbar û inserterên Kafka ji bo tamponkirinê têne bikar anîn. Zêdetir, ClickHouse di paşerojê de berdewam dike ku bi domdarî beşan tevde bike, ji ber vê yekê dê gelek hûrguliyên piçûk bêtir werin berhev kirin û tomar kirin, bi vî rengî tundiya tomarkirinê zêde bike. Lêbelê, pir beşên negirêdayî heya ku yekbûn bidome dê bibe sedema têkbirina hovane ya navdêran. Me dît ku lihevhatina çêtirîn di navbera guheztina daneya rast û performansa hilgirtinê de ev e ku meriv jimareyek tixûbdar di her çirkeyê de di tabloyê de bipejirîne.

Mifteya performansa xwendina tabloyê nîşankirin û cîhê daneya li ser dîskê ye. Pêvajo çiqas bilez be jî, dema ku motor hewce bike ku terabytes daneyan ji dîskê bişopîne û tenê perçeyek jê bikar bîne, ew ê dem bigire. ClickHouse firotgehek stûnek e, ji ber vê yekê her beş ji bo her stûnê (stûnek) pelek bi nirxên rêzkirî ji bo her rêzê vedihewîne. Bi vî rengî, hemî stûnên ku di pirsnameyê de tune ne dikarin pêşî werin paşguh kirin, û dûv re jî gelek şaneyên paralel bi darvekirina vektorîkirî têne hilberandin. Ji bo ku hûn ji şopandinek bêkêmasî dûr nekevin, her beş pelek navnîşek piçûk heye.

Ji ber ku hemî stûn ji hêla "mifteya seretayî" ve têne rêz kirin, pelê navnîşê tenê etîketên (rêzên hatine girtin) yên her rêza N-emîn dihewîne, da ku bikaribe wan di bîranînê de ji bo tabloyên pir mezin jî biparêze. Mînakî, hûn dikarin mîhengên xwerû destnîşan bikin ku "her rêza 8192-an nîşan bide", dûv re bi 1 trîlyonek tabloyek "kêm" nîşan bide. xêzên ku bi hêsanî di bîranînê de cih digirin dê tenê 122 tîpan bigirin.

Pêşkeftina pergalê

Pêşkeftin û başkirina Clickhouse dikare li ser were şopandin depo Github û piştrast bikin ku pêvajoya "mezinbûnê" bi lezek berbiçav diqewime.

Bikaranîna Clickhouse wekî şûna ELK, Big Query û TimescaleDB

Popularity

Wusa dixuye ku populerbûna Clickhouse her ku diçe zêde dibe, nemaze di civata rûsî-axêv de. Konferansa Bilind a 2018 ya sala borî (Moskow, 8-9 Mijdar, 2018) destnîşan kir ku cinawirên mîna vk.com û Badoo Clickhouse-ê bikar tînin, ku daneyan (mînak, têketin) ji deh hezaran serveran bi hevdemî vedihewîne. Di vîdyoyek 40 hûrdem de Yuri Nasretdinov ji tîmê VKontakte di derbarê çawaniyê de diaxive. Di nêzîk de em ê ji bo rehetiya xebata bi materyalê re li ser Habrê bişînin.

Serîlêdanên

Piştî ku demek lêkolînê derbas kir, ez difikirim ku deverên ku ClickHouse dikare bikêr be an bikaribe bi tevahî li şûna çareseriyên din ên kevneşopî û populer ên wekî MySQL, PostgreSQL, ELK, Google Big Query, Amazon RedShift, TimescaleDB, Hadoop, MapReduce, Pinot û Druid. Li jêr hûrguliyên karanîna ClickHouse hene ku DBMS-a jorîn nûve bikin an bi tevahî biguhezînin.

Berfirehkirina MySQL û PostgreSQL

Herî dawî, me ji bo platforma nûçenameyê bi qismî li şûna MySQL ClickHouse da nûçenameya Mautic. Pirsgirêk ev bû ku MySQL ji ber sêwirana nebaş, her e-nameya ku hatî şandin û her lînka wê e-nameyê bi hashek base64 tomar kir, tabloyek mezin a MySQL çêkir (email_stats). Piştî şandina tenê 10 mîlyon e-name ji aboneyên karûbarê re, vê tabloyê 150 GB cîhê pelê dagir kir, û MySQL li ser pirsên hêsan dest bi "bêaqil" kir. Ji bo çareserkirina pirsgirêka cîhê pelê, me bi serfirazî berhevkirina tabloya InnoDB bikar anî, ku ew bi faktorek 4 kêm kir. Lêbelê, hîn jî ne maqûl e ku meriv ji 20-30 mîlyon e-nameyên di MySQL-ê de tenê ji bo xwendina dîrokê hilîne, ji ber ku her pirsek hêsan ku ji ber hin sedeman hewce dike ku şopek tevahî bike, di guheztinê de encam dide û gelek /O load, li gorî ku me bi rêkûpêk ji Zabbix hişyarî distîne.

Bikaranîna Clickhouse wekî şûna ELK, Big Query û TimescaleDB

Clickhouse du algorîtmayên berhevkirinê bikar tîne ku hêjmara daneyê bi qasî kêm dike 3-4 caran, lê di vê rewşa taybetî de, dane bi taybetî "bihevhatî" bû.

Bikaranîna Clickhouse wekî şûna ELK, Big Query û TimescaleDB

ELK Replacement

Li ser bingeha ezmûna min, stûna ELK (ElasticSearch, Logstash û Kibana, di vê rewşa taybetî de ElasticSearch) ji bo xebitandinê ji ya ku ji bo hilanîna têketinan hewce dike pir zêdetir çavkaniyan hewce dike. ElasticSearch motorek mezin e heke hûn lêgerîna têketina tev-nivîsê ya baş dixwazin (û ez nafikirim ku hûn bi rastî jê re hewce ne), lê ez meraq dikim çima ew bûye motora têketinê ya defakto ya standard. Performansa hilgirtina wê, bi Logstash re hevgirtî, di barên xebata pir sivik de jî pirsgirêkan da me û pêdivî bi zêdekirina bêtir û bêtir RAM û cîhê dîskê hebû. Wekî databasek, Clickhouse ji ber sedemên jêrîn ji ElasticSearch çêtir e:

  • Piştgiriya zaravayê SQL;
  • Asta herî baş a berhevkirina daneyên hilanîn;
  • Piştgiriya lêgerîna Regex li şûna lêgerîna tevahî nivîsê;
  • Plansazkirina pirsê ya çêtir û performansa giştî ya çêtir.

Heya nuha, pirsgirêka herî mezin a ku dema ku ClickHouse bi ELK re berhev dike derdikeve holê nebûna çareseriyên ji bo barkirina têketinê, û her weha nebûna belge û dersên li ser vê mijarê ye. Di heman demê de, her bikarhêner dikare ELK-ê bi karanîna manual Okyanûsa dîjîtal saz bike, ku ji bo pêkanîna bilez a teknolojiyên weha pir girîng e. Li vir motorek databasê heye, lê hêj ji bo ClickHouse Filebeat tune. Belê heye herikandin û pergalek ji bo xebata bi têketin mal log, amûrek heye dûvikê bitikîne da ku daneyên pelê têketinê têkeve ClickHouse, lê ev hemî bêtir wext digire. Lêbelê, ClickHouse ji ber sadebûna xwe hîn jî rê li ber digire, ji ber vê yekê tewra destpêk jî dikarin wê bi hêsanî saz bikin û di nav 10 hûrdeman de dest bi karanîna bi tevahî fonksiyonel bikin.

Bi tercîhkirina çareseriyên mînîmalîst, min hewl da ku FluentBit, amûrek ji bo şandina têketinên bi bîranînek pir hindik, ligel ClickHouse bikar bînim, dema ku ez hewl didim ku Kafka bikar nekim. Lêbelê, nerazîbûnên piçûk hewce ne ku bêne çareser kirin, wekî pirsgirêkên formata dateberî ku ew bêyî qata proxy ya ku daneyan ji FluentBit vediguherîne ClickHouse were kirin.

Wekî alternatîfek Kibana, hûn dikarin ClickHouse wekî paşnav bikar bînin Grafana. Ji tiştê ku ez fêm dikim, ev dikare bibe sedema pirsgirêkên performansê dema ku hejmareke mezin ji xalên daneyê, nemaze bi guhertoyên kevntir ên Grafana re peyda dike. Me hîna vê yekê li Qwintry ceribandiye, lê gilî li ser vê yekê dem bi dem li ser kanala piştevaniya ClickHouse ya li ser Telegram xuya dibin.

Veguheztina Google Big Query û Amazon RedShift (çareserî ji bo pargîdaniyên mezin)

Doza karanîna îdeal ji bo BigQuery ev e ku meriv 1TB daneyên JSON bar bike û li ser wê lêpirsînên analîtîk bimeşîne. Big Query hilberek mezin e ku mezinbûna wê dijwar e ku meriv zêde binirxîne. Ev nermalava ji ClickHouse-ê ku li ser komek hundurîn dimeşe pir tevlihevtir e, lê ji nihêrîna xerîdar, ew bi ClickHouse re pir hevpar e. BigQuery gava ku hûn dest bi dravdana her SELECT bikin dikare zû "biha" bide, ji ber vê yekê ew çareseriyek SaaS ya rastîn e digel hemî erênî û xirabiyên xwe.

ClickHouse gava ku hûn gelek pirsnameyên biha yên hesabkirinê dimeşînin bijareya çêtirîn e. Her roj bêtir pirsên SELECT ku hûn dimeşînin, ew qas girîng e ku hûn Big Query bi ClickHouse re biguhezînin, ji ber ku veguheztinek wusa dê bi hezaran dolaran ji we xilas bike dema ku ew tê ser gelek terabytes daneya ku têne hilberandin. Ev ji bo daneyên hilandî, ku di Big Query de pêvajoyek pir erzan e, derbas nabe.

Di gotarek Alexander Zaitsev, hev-avakarê Altinity "Guhertina li ClickHouse" feydeyên koçberiyek DBMS-a wusa diyar dike.

Guhertina TimescaleDB

TimescaleDB pêvekek PostgreSQL ye ku di databasek birêkûpêk de xebata bi rêzikên demjimêran re xweşbîn dike (https://docs.timescale.com/v1.0/introduction, https://habr.com/ru/company/zabbix/blog/458530/).

Her çend ClickHouse ne hevrikek ciddî ye di rêza rêzikên demê de, lê strukturên stûnî û darvekirina lêpirsîna vektorê ye, ew di pir rewşan de pêvajoyên lêpirsîna analîtîk de ji TimescaleDB pir zûtir e. Di heman demê de, performansa wergirtina daneya berhevokê ji ClickHouse bi qasî 3 qat zêde ye, û di heman demê de ew 20 carî cîhê dîskê kêmtir bikar tîne, ku bi rastî ji bo hilanîna jimarên mezin ên daneyên dîrokî girîng e: 
https://www.altinity.com/blog/ClickHouse-for-time-series.

Berevajî ClickHouse, yekane awayê ku meriv cîhê dîskê di TimescaleDB de hilîne ev e ku meriv ZFS an pergalên pelan ên mîna wan bikar bîne.

Nûvekirinên dahatû yên ClickHouse dê îhtîmalek berhevkirina deltayê destnîşan bikin, ku dê wê ji bo hilanîn û hilanîna daneyên rêzikên demê hîn maqûltir bike. TimescaleDB dibe ku di rewşên jêrîn de ji ClickHouse tazî bijarek çêtir be:

  • Sazkirinên piçûk bi RAM-a pir hindik (<3 GB);
  • hejmareke mezin ji INSERTên piçûk ên ku hûn naxwazin di nav perçeyên mezin de tampon bikin;
  • hevgirtin, yekrengî û daxwazên ACID çêtir;
  • Piştgiriya PostGIS;
  • bi tabloyên PostgreSQL yên heyî re bibin yek, ji ber ku Timescale DB bi bingehîn PostgreSQL ye.

Pêşbaziya bi pergalên Hadoop û MapReduce re

Hadoop û hilberên din ên MapReduce dikarin gelek hesabên tevlihev pêk bînin, lê ew mêl dikin ku di derengiya mezin de bixebitin. ClickHouse vê pirsgirêkê bi hilberandina terabytes daneyan çareser dike û hema hema di cih de encam dide. Bi vî rengî, ClickHouse ji bo pêkanîna lêkolîna analîtîk a bilez, înteraktîf, ku divê ji zanyarên daneyê re balkêş be, pir bikêr e.

Pêşbaziya bi Pinot û Druid re

Pêşbazên herî nêzîk ên ClickHouse hilberên çavkaniya vekirî yên stûnek, xêzkirî yên berbelav Pinot û Druid in. Xebatek hêja ku van pergalan berhev dike di gotarê de tê weşandin Romana Leventova 1 Sibat 2018

Bikaranîna Clickhouse wekî şûna ELK, Big Query û TimescaleDB

Pêdivî ye ku ev gotar were nûve kirin - ew dibêje ku ClickHouse piştgirî nade operasyonên UPDATE û DELETE, ku ew bi guhertoyên herî dawî re bi tevahî ne rast e.

Digel van DBMS-an pir ezmûna me tune, lê ez ji tevliheviya binesaziya bingehîn a ku ji bo xebitandina Druid û Pinot hewce ye hez nakim - ew komek tevahî "beşên tevger" e ku ji her alî ve ji hêla Java-yê ve hatî dorpêç kirin.

Druid û Pinot projeyên inkubatorê Apache ne, ku pêşkeftina wan bi hûrgulî ji hêla Apache ve li ser rûpelên projeya xwe ya GitHub-ê tê vegirtin. Pinot di Cotmeha 2018-an de di inkubatorê de xuya bû, û Druid 8 meh berê ji dayik bû - di Sibatê de.

Kêmbûna agahdariya li ser ka AFS çawa dixebite ji min re hin pirsan, û dibe ku bêaqil derxe holê. Ez meraq dikim gelo nivîskarên Pinot ferq kirine ku Weqfa Apache bêtir li hember Druid dilpak e, û gelo helwestek wusa li hember hevrikek bû sedema hestek çavnebariyê? Ma pêşkeftina Druid hêdî dibe û pêşkeftina Pinot zûtir dibe ger sponsorên ku yên berê ji nişka ve bi ya paşîn re eleqedar dibin?

Dezawantajên ClickHouse

Nemirî: Eşkere ye, ev hîn jî teknolojiyek bêzar e, lê di her rewşê de, tiştek wusa di DBMS-yên stûnên din de nayê dîtin.

Têkiliyên piçûk bi leza zêde baş naxebitin: Divê têkel li perçeyên mezin werin dabeş kirin ji ber ku performansa têlên piçûk li gorî hejmara stûnên di her rêzê de kêm dibe. Bi vî rengî ClickHouse daneyan li ser dîskê diparêze - her stûn tê wateya 1 pel an jî bêtir, ji ber vê yekê ji bo têxin 1 rêzek ku 100 stûn hene, hûn hewce ne ku bi kêmî ve 100 pelan vekin û binivîsin. Ji ber vê yekê ji bo vekirina tamponê navbeynkarek hewce dike (heta ku xerîdar bixwe tampon peyda neke) - bi gelemperî Kafka an celebek pergala rêzgirtinê. Her weha hûn dikarin motora tabloya Buffer bikar bînin da ku paşê perçeyên mezin ên daneyê li tabloyên MergeTree kopî bikin.

Tevliheviyên tabloyê ji hêla RAM-a serverê ve têne sînorkirin, lê bi kêmanî ew li wir in! Mînakî, Druid û Pinot qet xwedan girêdanên weha nînin, ji ber ku dijwar e ku ew rasterast di pergalên belavbûyî yên ku piştgirî nadin veguheztina perçeyên mezin ên daneyê di navbera girêkan de bicîh bikin.

vebiguherin

Di salên pêş de, em plan dikin ku li Qwintry-ê ClickHouse-ê berfireh bikar bînin, ji ber ku ev DBMS hevsengiyek performansê ya hêja, sermaya kêm, pîvanbûn, û sadebûnê peyda dike. Ez pir pê bawer im ku gava ku civata ClickHouse rêyên bêtir peyda bike ku wê di sazkirinên piçûk û navîn de bikar bîne, ew ê zû belav bibe.

Hin reklam 🙂

Spas ji bo ku hûn bi me re bimînin. Ma hûn ji gotarên me hez dikin? Ma hûn dixwazin naveroka balkêştir bibînin? Piştgiriya me bikin bi danîna fermanek an pêşniyarkirina hevalan, ewr VPS ji bo pêşdebiran ji 4.99 $, analogek bêhempa ya pêşkêşkerên asta têketinê, ku ji hêla me ve ji bo we hatî vedîtin: Tevahiya rastiyê di derbarê VPS (KVM) E5-2697 v3 (6 Cores) 10 GB DDR4 480 GB SSD 1Gbps ji 19 $ an çawa serverek parve dike? (bi RAID1 û RAID10, heta 24 core û heya 40 GB DDR4 peyda dibe).

Dell R730xd 2x erzantir li navenda daneya Equinix Tier IV li Amsterdam? Tenê li vir 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV ji 199$ li Hollanda! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - ji $99! Li ser bixwînin Meriv çawa pargîdaniya binesaziyê ava dike. pola bi karanîna serverên Dell R730xd E5-2650 v4 bi nirxek 9000 euro ji bo quruşek?

Source: www.habr.com

Add a comment