Hoʻohana pono i ka ClickHouse. Alexey Milovidov (Yandex)

Hoʻohana pono i ka ClickHouse. Alexey Milovidov (Yandex)

No ka mea he ʻōnaehana kūikawā ʻo ClickHouse, i ka wā e hoʻohana ai he mea nui ia e noʻonoʻo i nā hiʻohiʻona o kāna hoʻolālā. Ma kēia hōʻike, e kamaʻilio ʻo Alexey e pili ana i nā hiʻohiʻona o nā hewa maʻamau i ka hoʻohana ʻana iā ClickHouse, hiki ke alakaʻi i ka hana pono ʻole. E hōʻike ana nā hiʻohiʻona hoʻomaʻamaʻa pehea e hiki ai i ke koho ʻana i hoʻokahi a i ʻole kekahi papa hana hoʻoili ʻikepili ke hoʻololi i ka hana ma nā kauoha o ka nui.

Aloha kākou! ʻO Alexey koʻu inoa, hana wau i ClickHouse.

Hoʻohana pono i ka ClickHouse. Alexey Milovidov (Yandex)

ʻO ka mea mua, wikiwiki wau e ʻoluʻolu iā ʻoe i kēia lā, ʻaʻole wau e haʻi iā ʻoe i ka ClickHouse. ʻO kaʻoiaʻiʻo, ua luhi wau. I kēlā me kēia manawa aʻu e haʻi aku iā ʻoe he aha ia. A ua ʻike mua paha nā mea a pau.

Hoʻohana pono i ka ClickHouse. Alexey Milovidov (Yandex)

Akā, e haʻi wau iā ʻoe i nā hewa hiki ke loaʻa, ʻo ia hoʻi, pehea ʻoe e hoʻohana hewa ai iā ClickHouse. ʻO kaʻoiaʻiʻo,ʻaʻohe pono e makaʻu, no ka mea, ke kūkulu nei mākou i ClickHouse ma keʻano he pūnaewele maʻalahi, maʻalahi, a hana ma waho o ka pahu. Ua hoʻokomo wau, ʻaʻohe pilikia.

Akā, pono ʻoe e noʻonoʻo he loea kēia ʻōnaehana a hiki iā ʻoe ke hele maʻalahi i kahi hihia hoʻohana maʻamau e lawe i kēia ʻōnaehana mai kona wahi hōʻoluʻolu.

No laila, he aha ke ʻano o ka rake ma laila? ʻO ka hapa nui e kamaʻilio wau e pili ana i nā mea maopopo. Ua maopopo nā mea a pau i nā mea a pau, hoʻomaopopo nā mea a pau i nā mea a pau a hiki ke hauʻoli i ko lākou akamai loa, aʻo ka poʻe i hoʻomaopopoʻole e aʻo i kahi mea hou.

Hoʻohana pono i ka ClickHouse. Alexey Milovidov (Yandex)

ʻO ka hiʻohiʻona mua a me ka maʻalahi loa, ʻo ia hoʻi, ʻo ka mea pōʻino, ke hana pinepine ʻia, he helu nui o nā mea hoʻokomo me nā pahu liʻiliʻi, ʻo ia hoʻi ka nui o nā mea hoʻokomo liʻiliʻi.

Inā mākou e noʻonoʻo pehea e hana ai ʻo ClickHouse i ka hoʻokomo, a laila hiki iā ʻoe ke hoʻouna i kahi terabyte o ka ʻikepili i hoʻokahi noi. ʻAʻole ia he pilikia.

A e ʻike kākou i ka hana maʻamau. No ka laʻana, loaʻa iā mākou kahi papaʻaina mai Yandex.Metrica data. Hits. 105 kekahi mau kolamu. 700 bytes i hoʻopaʻa ʻole ʻia. A e hoʻokomo mākou i kahi ala maikaʻi i nā pūʻulu o hoʻokahi miliona lālani.

Hoʻokomo mākou i ka MergeTree i loko o ka papaʻaina, huli ka hapalua miliona mau lālani i kekona. Nui. Ma ka papaʻaina i hoʻopili hou ʻia e liʻiliʻi iki ia, ma kahi o 400 lālani i kekona.

A inā hiki iā ʻoe ke hoʻokomo i ke kōrum, e emi iki ana ʻoe, akā maikaʻi naʻe ka hana, 250 huaʻōlelo i kekona. ʻO ka hoʻokomo Quorum kahi hiʻohiʻona palapala ʻole ma ClickHouse*.

* mai ka makahiki 2020, ua palapala ʻia.

Hoʻohana pono i ka ClickHouse. Alexey Milovidov (Yandex)

He aha ka hopena inā hana ʻoe i kahi mea ʻino? Hoʻokomo mākou i hoʻokahi lālani i ka papa ʻaina MergeTree a loaʻa iā 59 lālani i kēlā me kēia kekona. He 10 manawa ʻoi aku ka lohi. I ReplicatedMergeTree - 000 lālani i kekona. A inā e hoʻāla ʻia ke kōrum, a laila e puka mai nā laina 6 i kēlā me kēia kekona. I koʻu manaʻo, he ʻano pupule loa kēia. Pehea e hiki ai iā ʻoe ke lohi e like me ia? Ua kākau wau ma koʻu pālule ʻaʻole pono e lohi ʻo ClickHouse. Akā naʻe, hiki i kekahi manawa.

Hoʻohana pono i ka ClickHouse. Alexey Milovidov (Yandex)

ʻOiaʻiʻo, ʻo kā mākou hemahema kēia. Hiki iā mākou ke hana maʻalahi i nā mea a pau, akā ʻaʻole mākou i hana. A ʻaʻole mākou i hana no ka mea ʻaʻole pono kā mākou palapala. Ua loaʻa iā mākou nā butches. Loaʻa wale iā mākou nā pūʻulu ma ko mākou komo ʻana, ʻaʻohe pilikia. Hoʻokomo mākou a hana maikaʻi nā mea a pau. Akā, ʻoiaʻiʻo, hiki i nā ʻano hiʻohiʻona āpau. No ka laʻana, inā loaʻa iā ʻoe kahi pūʻulu o nā kikowaena kahi i hana ʻia ai ka ʻikepili. A ʻaʻole lākou e hoʻokomo pinepine i ka ʻikepili, akā hoʻopau lākou me ka hoʻokomo pinepine ʻana. A pono mākou e pale i kēia.

Mai kahi ʻike loea, ʻo ka manaʻo ke hana ʻoe i kahi hoʻokomo ma ClickHouse, ʻaʻole i pau ka ʻikepili i kekahi memtable. ʻAʻole loaʻa iā mākou kahi ʻōnaehana log maoli ʻo MergeTree, akā he MergeTree wale nō, no ka mea, ʻaʻohe log a i ʻole memTable. Kākau koke mākou i ka ʻikepili i ka ʻōnaehana faila, i hoʻonohonoho ʻia i nā kolamu. A inā loaʻa iā ʻoe nā kolamu 100, pono e kākau ʻia ma mua o 200 mau faila i kahi papa kuhikuhi kaʻawale. He paʻakikī loa kēia a pau.

Hoʻohana pono i ka ClickHouse. Alexey Milovidov (Yandex)

A e kū mai ka nīnau: "Pehea e hana pono ai?" Inā pono ke kūlana e pono ai ʻoe e hoʻopaʻa i ka ʻikepili ma ClickHouse.

Keʻano 1. ʻO kēia ke ala maʻalahi. E hoʻohana i kekahi ʻano pila i puʻunaue ʻia. No ka laʻana, ʻo Kafka. Wehe wale ʻoe i ka ʻikepili mai Kafka a hoʻopaʻa iā ia i hoʻokahi kekona. A e maikaʻi nā mea a pau, hoʻopaʻa ʻoe, hana maikaʻi nā mea a pau.

ʻO nā hemahema ʻo Kafka kekahi ʻōnaehana puʻupuʻu nui. Ua maopopo iaʻu inā loaʻa iā Kafka kāu hui. Maikaʻi, maʻalahi. Akā inā ʻaʻole ia, a laila pono ʻoe e noʻonoʻo ʻekolu manawa ma mua o ka huki ʻana i kahi ʻōnaehana puʻupuʻu hou i kāu papahana. A no laila pono e noʻonoʻo i nā mea ʻē aʻe.

Hoʻohana pono i ka ClickHouse. Alexey Milovidov (Yandex)

Ke Kaʻina Hana 2. He mea ʻokoʻa kēia o ke kula kahiko a ma ka manawa like maʻalahi loa. Loaʻa iā ʻoe kekahi ʻano kikowaena e hoʻopuka i kāu mau lāʻau. A kākau wale ia i kāu mau moʻolelo i kahi faila. A i ka manawa hoʻokahi, no ka laʻana, hoʻololi mākou i kēia faila a haehae i kahi mea hou. A he palapala ʻokoʻa, ma o cron a i ʻole kekahi daemon, e lawe i ka faila kahiko a kākau iā ClickHouse. Inā hoʻopaʻa ʻoe i nā lāʻau i hoʻokahi kekona, a laila e maikaʻi nā mea a pau.

Akā ʻo ka hemahema o kēia ʻano, inā e nalowale kāu kikowaena kahi i hoʻokumu ʻia ai nā lāʻau i kahi wahi, a laila e nalowale hoʻi ka ʻikepili.

Hoʻohana pono i ka ClickHouse. Alexey Milovidov (Yandex)

ʻO ke ala 3. Aia kekahi ʻano hana hoihoi, ʻaʻole pono i nā faila pōkole. No ka laʻana, loaʻa iā ʻoe kekahi ʻano spinner hoʻolaha a i ʻole kekahi daemon hoihoi e hana ana i ka ʻikepili. A hiki iā ʻoe ke hōʻiliʻili i kahi hui o ka ʻikepili pololei i ka RAM, i ka buffer. A i ka hala ʻana o ka manawa, waiho ʻoe i kēia pale, hana i kahi mea hou, a ma kahi ʻāpana ʻokoʻa, e hoʻokomo i ka mea i hōʻiliʻili ʻia i loko o ClickHouse.

Ma kekahi ʻaoʻao, nalowale ka ʻikepili me ka pepehi -9. Inā hāʻule kāu kikowaena, e nalowale ana kēia ʻikepili. A ʻo kekahi pilikia ʻē aʻe inā ʻaʻole hiki iā ʻoe ke kākau i ka waihona, a laila e hōʻiliʻili kāu ʻikepili i ka RAM. A pau ka RAM, a i ʻole e nalowale ʻoe i ka ʻikepili.

Hoʻohana pono i ka ClickHouse. Alexey Milovidov (Yandex)

Keʻano 4. ʻO kekahi ala hoihoi. Loaʻa iā ʻoe kekahi ʻano kaʻina kikowaena. A hiki iā ia ke hoʻouna koke i ka ʻikepili i ClickHouse, akā e hana i ka pilina hoʻokahi. No ka laʻana, ua hoʻouna au i kahi noi http me ka hoʻololi-encoding: chunked me ka hoʻokomo. A ʻaʻole hiki ke hoʻouna i nā ʻāpana i kēlā me kēia laina, ʻoiai aia ke poʻo no ka hoʻopili ʻana i kēia ʻikepili.

Eia naʻe, ma kēia hihia e hoʻouna koke ʻia ka ʻikepili iā ClickHouse. A e hoʻopaʻa ʻo ClickHouse iā lākou iho.

Akā, puka mai nā pilikia. I kēia manawa e nalowale ana ʻoe i ka ʻikepili, me ka wā i pepehi ʻia ai kāu kaʻina hana a inā ua pepehi ʻia ke kaʻina hana ClickHouse, no ka mea, he hoʻokomo ʻole ia. A i loko o ClickHouse hoʻokomo ʻia ka atomic a hiki i kahi paepae i kuhikuhi ʻia i ka nui o nā lālani. Ma ke kumu, he ala hoihoi kēia. Hiki ke hoʻohana.

Hoʻohana pono i ka ClickHouse. Alexey Milovidov (Yandex)

Keʻano 5. Eia kekahi ala hoihoi. ʻO kēia kekahi ʻano kikowaena i kūkulu ʻia e ke kaiāulu no ka hōʻiliʻili ʻikepili. ʻAʻole wau i nānā iaʻu iho, no laila ʻaʻole hiki iaʻu ke hōʻoiaʻiʻo i kekahi mea. Eia naʻe, ʻaʻohe mea hōʻoia i hāʻawi ʻia no ClickHouse ponoʻī. He kumu hāmama kēia, akā ma ka ʻaoʻao ʻē aʻe, hiki ke hoʻohana ʻia ʻoe i kekahi kūlana maikaʻi a mākou e hoʻāʻo nei e hāʻawi. Akā no kēia mea - ʻaʻole wau ʻike, e hele i GitHub, e nānā i ke code. Malia paha ua kākau lākou i kahi mea maʻamau.

* e like me 2020, pono e hoʻohui ʻia i ka noʻonoʻo Hale Kitten.

Hoʻohana pono i ka ClickHouse. Alexey Milovidov (Yandex)

ʻO ke ala 6. ʻO kekahi ala ʻē aʻe e hoʻohana i nā papa Buffer. ʻO ka pōmaikaʻi o kēia ʻano hana he maʻalahi loa ia e hoʻomaka e hoʻohana. E hana i kahi papa Buffer a hoʻokomo i loko.

ʻO ka pōʻino, ʻaʻole i pau ka pilikia. Inā, ma ka pālākiō e like me MergeTree, pono ʻoe e hui pū i ka ʻikepili ma hoʻokahi pūʻulu i kēlā me kēia kekona, a laila ma ka helu ma ka papa hoʻopaʻa, pono ʻoe e hui i ka liʻiliʻi a hiki i kekahi mau tausani i kekona. Inā ʻoi aku ia ma mua o 10 i kēlā me kēia kekona, e pōʻino mau ana. A inā ʻoe e hoʻokomo iā ia i loko o nā pūʻulu, a laila ʻike ʻoe ua lilo ia i hoʻokahi haneli tausani laina i kekona. A aia kēia ma ka ʻikepili kaumaha loa.

A ʻaʻohe lāʻau o nā papa hoʻopaʻa. A inā he hewa i kāu kikowaena, a laila e nalowale ka ʻikepili.

Hoʻohana pono i ka ClickHouse. Alexey Milovidov (Yandex)

A ma ke ʻano he bonus, ua loaʻa iā mākou ka manawa ma ClickHouse e kiʻi i ka ʻikepili mai Kafka. Aia kahi ʻenekini papa - Kafka. Hana wale ʻoe. A hiki iā ʻoe ke kau i nā hiʻohiʻona materialized ma luna. I kēia hihia, e unuhi ʻo ia i ka ʻikepili mai Kafka a hoʻokomo i loko o nā papa āu e pono ai.

A ʻo ka mea ʻoluʻolu loa i kēia manawa, ʻaʻole mākou i hana. He hiʻohiʻona kaiaulu kēia. A i koʻu ʻōlelo ʻana he "hiʻohiʻona kaiāulu," ʻo ia kaʻu me ka hoʻowahāwahā ʻole. Heluhelu mākou i ke code, hana i kahi loiloi, pono e hana maikaʻi.

* mai 2020, ua ʻike ʻia ke kākoʻo like no ʻO RabbitMQ.

Hoʻohana pono i ka ClickHouse. Alexey Milovidov (Yandex)

He aha nā mea ʻē aʻe e hiki ke kūpono a i ʻole i manaʻo ʻia ke hoʻokomo ʻana i ka ʻikepili? Inā hana ʻoe i kahi noi waiwai hoʻokomo a kākau i kekahi mau huaʻōlelo i helu ʻia i nā waiwai. No ka laʻana, ʻo kēia manawa () he ʻōlelo helu pū kekahi. A i kēia hihia, koi ʻia ʻo ClickHouse e hoʻomaka i ka unuhi ʻana o kēia mau ʻōlelo ma kēlā me kēia laina, a e hāʻule ka hana ma nā kauoha o ka nui. ʻOi aku ka maikaʻi e pale i kēia.

* i kēia manawa, ua hoʻopau piha ʻia ka pilikia, ʻaʻohe hana hoʻihoʻi hou i ka wā e hoʻohana ai i nā ʻōlelo ma VALUES.

ʻO kekahi hiʻohiʻona ʻo ia ka wā e loaʻa ai kekahi mau pilikia ke loaʻa iā ʻoe ka ʻikepili ma kahi pūʻulu e pili ana i kahi hui o nā ʻāpana. Ma ka maʻamau, ʻo nā ʻāpana ClickHouse ma ka mahina. A inā ʻoe e hoʻokomo i kahi pūʻulu o hoʻokahi miliona mau lālani, a aia nā ʻikepili no kekahi mau makahiki, a laila e loaʻa iā ʻoe nā ʻāpana he nui ma laila. A ua like kēia me ka ʻoiaʻiʻo e loaʻa nā ʻāpana he ʻumi mau manawa liʻiliʻi i ka nui, no ka mea i loko o lākou e māhele mua ʻia i nā ʻāpana.

* I kēia mau lā, ma ke ʻano hoʻokolohua, ua hoʻohui ʻo ClickHouse i ke kākoʻo no ke ʻano paʻa o nā puʻupuʻu a me nā puʻupuʻu i RAM me ka log kākau mua, kahi kokoke loa e hoʻopau i ka pilikia.

Hoʻohana pono i ka ClickHouse. Alexey Milovidov (Yandex)

I kēia manawa, e nānā kāua i ka lua o ka pilikia - ke kikokiko ʻikepili.

Hiki ke paʻa a i ʻole ke kaula ʻikepili. ʻO String ka manawa āu i lawe ai a haʻi aku ʻo kāu mau kahua āpau he string type. ʻAʻole kēia. ʻAʻohe pono e hana i kēia.

E noʻonoʻo kāua pehea e hana pono ai i kēlā mau hihia ke makemake ʻoe e ʻōlelo he kahua kā mākou, he kaula, a e hoʻokuʻu iā ClickHouse ma kāna iho, ʻaʻole wau e pilikia. Akā, pono nō e hoʻoikaika.

Hoʻohana pono i ka ClickHouse. Alexey Milovidov (Yandex)

No ka laʻana, loaʻa iā mākou kahi helu IP. I kekahi hihia, ua mālama mākou iā ia ma ke ʻano he kaula. No ka laʻana, 192.168.1.1. A ma kekahi hihia ʻē aʻe, he helu o ke ʻano UInt32*. Ua lawa ka 32 bits no ka helu IPv4.

ʻO ka mea mua, ʻokoʻa, e hoʻopili like ʻia ka ʻikepili. He ʻokoʻa, ʻoiaʻiʻo, ʻaʻole nui. No laila ʻaʻohe pilikia kūikawā me ka disk I/O.

Akā aia kahi ʻokoʻa koʻikoʻi i ka manawa kaʻina hana a me ka manawa hoʻokō nīnau.

E helu kākou i ka helu o nā helu IP kū hoʻokahi inā mālama ʻia lākou ma ke ʻano he helu. He 137 miliona mau laina i kēlā me kēia kekona. Inā like ke ʻano o nā kaula, a laila 37 miliona mau laina i kekona. ʻAʻole maopopo iaʻu ke kumu i hiki mai ai kēia coincidence. Ua hoʻokō au i kēia mau noi iaʻu iho. Akā naʻe ma kahi o 4 mau manawa lohi.

A inā ʻoe e helu i ka ʻokoʻa o ka hakahaka disk, a laila aia kekahi ʻokoʻa. A ʻo ka ʻokoʻa e pili ana i hoʻokahi hapaha, no ka mea he nui nā helu IP kūʻokoʻa. A inā he mau laina liʻiliʻi o nā manaʻo like ʻole, a laila e maʻalahi e hoʻopili ʻia e like me ka puke wehewehe ʻōlelo i loko o ka leo like.

A ʻaʻole e waiho ka ʻokoʻa manawa ʻehā ma ke alanui. Malia paha ʻaʻole ʻoe e hāʻawi i ka pōʻino, ʻoiaʻiʻo, akā ke ʻike wau i kahi ʻokoʻa, kaumaha ia iaʻu.

Hoʻohana pono i ka ClickHouse. Alexey Milovidov (Yandex)

E nānā kākou i nā hihia like ʻole.

1. Hoʻokahi hihia inā liʻiliʻi kāu mau waiwai kūʻokoʻa. I kēia hihia, hoʻohana mākou i kahi hana maʻalahi āu i ʻike a hiki ke hoʻohana no kekahi DBMS. ʻAʻole kūpono kēia no ClickHouse wale nō. E kākau wale i nā mea hōʻike helu i loko o ka waihona. A hiki iā ʻoe ke hoʻololi i nā kaula a i hope ma ka ʻaoʻao o kāu noi.

No ka laʻana, he ʻāina kāu. A ke hoʻāʻo nei ʻoe e mālama iā ia ma ke ʻano he kaula. A e kākau ʻia ma laila: Moscow a me Moscow Region. A i koʻu ʻike ʻana he "Moscow", ʻaʻohe mea, akā inā ʻo Moscow, lilo ia i mea kaumaha loa. ʻO kēia ka nui o nā bytes.

Akā, kākau wale mākou i ka helu Ulnt32 a me 250. He 250 kā mākou ma Yandex, akā ʻokoʻa paha kāu. I ka hihia wale nō, e ʻōlelo wau ua loaʻa i ka ClickHouse kahi mana i kūkulu ʻia e hana me kahi geobase. Kākau wale ʻoe i kahi papa kuhikuhi me nā wahi, me kahi hierarchical, ʻo ia hoʻi, aia ʻo Moscow, Moscow Region, a me nā mea āpau āu e pono ai. A hiki iā ʻoe ke hoʻololi i ka pae noi.

Hoʻohana pono i ka ClickHouse. Alexey Milovidov (Yandex)

ʻO ka lua o ka koho he like ia, akā me ke kākoʻo i loko o ClickHouse. ʻO kēia ke ʻano ʻikepili Enum. Kākau wale ʻoe i nā waiwai āpau āu e pono ai i loko o ka Enum. No ka laʻana, ʻano mea hana a kākau ma laila: desktop, mobile, tablet, TV. Aia nā koho 4 i ka huina.

ʻO ka hemahema, pono ʻoe e hoʻololi i kēlā me kēia manawa. Hoʻokahi wale nō koho i hoʻohui ʻia. E hoʻololi i ka papaʻaina. ʻO ka ʻoiaʻiʻo, ʻaʻohe manuahi alter table ma ClickHouse. He manuahi no Enum no ka mea ʻaʻole loli ka ʻikepili ma ka disk. Akā naʻe, loaʻa iā Alter kahi laka ma ka papaʻaina a pono e kali a pau nā mea i koho ʻia. A ma hope wale nō e hoʻokō ʻia ai kēia hoʻololi, ʻo ia hoʻi, aia kekahi mau pilikia.

* i nā mana hou loa o ClickHouse, ua hana ʻia ʻo ALTER me ka pale ʻole.

Hoʻohana pono i ka ClickHouse. Alexey Milovidov (Yandex)

ʻO kahi koho ʻē aʻe no ClickHouse e hoʻopili ana i nā puke wehewehe ʻōlelo waho. Hiki iā ʻoe ke kākau i nā helu ma ClickHouse, a mālama i kāu mau papa kuhikuhi ma kekahi ʻōnaehana kūpono iā ʻoe. No ka laʻana, hiki iā ʻoe ke hoʻohana: MySQL, Mongo, Postgres. Hiki iā ʻoe ke hana i kāu microservice ponoʻī e hoʻouna i kēia ʻikepili ma o http. A ma ka pae ClickHouse, kākau ʻoe i kahi hana e hoʻololi i kēia ʻikepili mai nā helu i nā kaula.

ʻO kēia kahi ala kūikawā akā maikaʻi loa e hana i kahi hui ma kahi papa waho. A ʻelua mau koho. Ma kahi hoʻokahi, e hūnā piha ʻia kēia ʻikepili, piha i ka RAM a hōʻano hou ʻia me kahi alapine. A ma kahi koho ʻē aʻe, inā ʻaʻole kūpono kēia ʻikepili i ka RAM, a laila hiki iā ʻoe ke hūnā i kahi hapa.

Eia kekahi laʻana. Aia ʻo Yandex.Direct. A aia kahi hui hoʻolaha a me nā hae. Aia paha ma kahi o ʻumi miliona o nā hui hoʻolaha. A kūpono lākou i ka RAM. A aia nā piliona o nā hae, ʻaʻole kūpono lākou. A hoʻohana mākou i kahi puke wehewehe ʻōlelo huna mai MySQL.

ʻO ka pilikia wale nō, e hana maikaʻi ana ka puke wehewehe ʻōlelo huna inā kokoke ka helu pā i ka 100%. Inā ʻoi aku ka liʻiliʻi, a laila i ka wā e hoʻoili ai i nā nīnau no kēlā me kēia pūʻulu ʻikepili, pono ʻoe e lawe i nā kī i nalowale a hele e kiʻi i ka ʻikepili mai MySQL. No ClickHouse, hiki iaʻu ke hōʻoiaʻiʻo i kēlā - ʻae, ʻaʻole ia e lohi, ʻaʻole wau e kamaʻilio e pili ana i nā ʻōnaehana ʻē aʻe.

A ma ke ʻano he bonus, he ala maʻalahi loa nā puke weheweheʻōlelo e hoʻololi hou i ka ʻikepili ma ClickHouse. ʻO ia hoʻi, loaʻa iā ʻoe kahi hōʻike e pili ana i nā hui hoʻolaha, hoʻololi wale ka mea hoʻohana i ka hui hoʻolaha a ma nā ʻikepili kahiko āpau, i nā hōʻike āpau, ua hoʻololi pū ʻia kēia ʻikepili. Inā kākau pololei ʻoe i nā lālani i ka papaʻaina, ʻaʻole hiki ke hōʻano hou iā lākou.

Hoʻohana pono i ka ClickHouse. Alexey Milovidov (Yandex)

ʻO kahi ala ʻē aʻe inā ʻaʻole ʻoe i ʻike i kahi e loaʻa ai nā mea hōʻike no kāu mau kaula. hiki iā ʻoe ke hoʻololi wale. Eia kekahi, ʻo ka koho maʻalahi ka lawe ʻana i kahi hash 64-bit.

ʻO ka pilikia wale nō inā inā he 64-bit ka hash, a laila kokoke loa ʻoe e hui pū. No ka mea inā he piliona laina ma laila, a laila ua ʻike mua ʻia ka probability.

A ʻaʻole maikaʻi loa ka haʻi ʻana i nā inoa o nā hui hoʻolaha ma kēia ʻano. Inā hui pū ʻia nā hoʻolaha hoʻolaha o nā ʻoihana like ʻole, a laila aia kekahi mea hiki ʻole ke hoʻomaopopo.

A aia kahi hana maʻalahi. ʻOiaʻiʻo, ʻaʻole kūpono loa ia no ka ʻikepili koʻikoʻi, akā inā ʻaʻole koʻikoʻi kekahi mea, a laila e hoʻohui wale i ka mea kūʻai aku i ke kī puke wehewehe. A laila e loaʻa iā ʻoe nā collisions, akā i loko o hoʻokahi mea kūʻai aku. A ke hoʻohana nei mākou i kēia ala no nā palapala loulou ma Yandex.Metrica. Loaʻa iā mākou nā URL ma laila, mālama mākou i nā hashes. A ʻike mākou, ʻoiaʻiʻo, aia nā hui. Akā i ka wā e hōʻike ʻia ai ka ʻaoʻao, hiki ke hoʻopaʻa ʻia nā URL ma ka ʻaoʻao hoʻokahi o ka mea hoʻohana a ʻike ʻia kēia.

Ma ke ʻano he bonus, no ka nui o nā hana hashes wale nō i lawa a ʻaʻole pono e mālama ʻia nā kaula ma nā wahi āpau.

Hoʻohana pono i ka ClickHouse. Alexey Milovidov (Yandex)

ʻO kekahi laʻana inā pōkole nā ​​kaula, no ka laʻana, nā kāʻei pūnaewele. Hiki ke mālama ʻia e like me ia. A i ʻole, no ka laʻana, he 2 bytes ka ʻōlelo mākaʻikaʻi ru. ʻOiaʻiʻo, minamina nui wau i nā bytes, akā mai hopohopo, ʻaʻole minamina ʻo 2 bytes. E ʻoluʻolu e mālama ʻoe e like me ka mea maʻamau, mai hopohopo.

Hoʻohana pono i ka ClickHouse. Alexey Milovidov (Yandex)

ʻO kahi hihia ʻē aʻe i ka wā, ma kahi ʻē aʻe, he nui nā laina a he nui nā mea kūʻokoʻa i loko o lākou, a ʻo ka hoʻonohonoho ʻana paha he palena ʻole. ʻO kahi laʻana maʻamau he mau huaʻōlelo a i ʻole URL. Huli i nā huaʻōlelo, me nā typo. E ʻike kākou i ka nui o nā huaʻōlelo hulina kū hoʻokahi i kēlā me kēia lā. A ua ʻike ʻia ua kokoke lākou i ka hapalua o nā hanana āpau. A i kēia hihia, manaʻo paha ʻoe e pono ʻoe e hoʻomaʻamaʻa i ka ʻikepili, helu i nā mea ʻike, a waiho i kahi papa ʻokoʻa. Akā ʻaʻole pono ʻoe e hana i kēlā. E mālama wale i kēia mau laina e like me lākou.

ʻOi aku ka maikaʻi ʻaʻole e noʻonoʻo i kekahi mea, no ka mea inā mālama ʻoe iā ia ma kahi kaʻawale, pono ʻoe e hana i kahi hui. A ʻo kēia hui pū ʻana, ʻoi aku ka maikaʻi, ke komo ʻole i ka hoʻomanaʻo, inā pili ia i ka hoʻomanaʻo. Inā ʻaʻole kūpono, a laila pilikia nā pilikia.

A inā mālama ʻia ka ʻikepili ma kahi, a laila heluhelu wale ʻia ma ke kauoha i koi ʻia mai ka ʻōnaehana faila a maikaʻi nā mea āpau.

Hoʻohana pono i ka ClickHouse. Alexey Milovidov (Yandex)

Inā loaʻa iā ʻoe nā URL a i ʻole kekahi kaula lōʻihi paʻakikī, a laila pono e noʻonoʻo e hiki iā ʻoe ke helu i kekahi ʻano unuhi ma mua a kākau iā ia i kahi kolamu ʻokoʻa.

No nā URL, no ka laʻana, hiki iā ʻoe ke mālama kaʻawale i ka waihona. A inā makemake ʻoe i kahi kikowaena, a laila e hoʻohana wale i kēia kolamu, a e waiho ʻia nā URL ma laila, ʻaʻole ʻoe e hoʻopā iā lākou.

E ʻike kākou i ka ʻokoʻa. Loaʻa iā ClickHouse kahi hana kūikawā e helu ana i ka domain. He wikiwiki loa, ua hoʻonui mākou. A ʻo ka ʻoiaʻiʻo, ʻaʻole ia e hoʻokō me ka RFC, akā naʻe e noʻonoʻo ia i nā mea āpau a mākou e pono ai.

A i kekahi hihia, e kiʻi wale mākou i nā URL a helu i ka domain. Hoʻohana ia i 166 milliseconds. A inā ʻoe e lawe i kahi kikowaena i mākaukau, a laila ʻike ʻia he 67 milliseconds wale nō, ʻo ia hoʻi, kokoke ʻekolu manawa ʻoi aku ka wikiwiki. A ʻoi aku ka wikiwiki ʻaʻole no ka mea pono mākou e hana i kekahi mau helu, akā no ka heluhelu ʻana i nā ʻikepili liʻiliʻi.

ʻO ia ke kumu o ka noi hoʻokahi, ʻoi aku ka lohi, ʻoi aku ka wikiwiki o nā gigabytes i kekona. No ka mea, heluhelu ʻo ia i nā gigabytes. He ʻikepili pono ʻole kēia. Me he mea lā e holo wikiwiki ana ka noi, akā ʻoi aku ka lōʻihi o ka hoʻopau ʻana.

A inā ʻoe e nānā i ka nui o ka ʻikepili ma ka disk, ʻike ʻia ʻo ka URL he 126 megabytes, a ʻo ka domain he 5 megabytes wale nō. Ua emi iho he 25 manawa. Akā naʻe, hoʻokō ʻia ka noi i 4 mau manawa wikiwiki. Akā, no ka mea wela ka ʻikepili. A inā he anu, he 25 manawa ʻoi aku ka wikiwiki ma muli o ka disk I/O.

Ma ke ala, inā ʻoe e manaʻo i ka liʻiliʻi o kahi kikowaena ma mua o kahi URL, ua ʻike ʻia ma kahi o 4 mau manawa liʻiliʻi. No ke aha mai? Ma muli o ke kaomi ʻana. A hoʻopaʻa ʻia ka URL, a hoʻopaʻa ʻia ka domain. Akā pinepine ka URL i ka ʻōpala.

Hoʻohana pono i ka ClickHouse. Alexey Milovidov (Yandex)

A, ʻoiaʻiʻo, uku ia e hoʻohana i nā ʻano ʻikepili kūpono i hoʻolālā ʻia no nā waiwai i makemake ʻia a i kūpono paha. Inā ʻoe ma IPv4, a laila e mālama iā UInt32*. Inā ʻo IPv6, a laila FixedString(16), no ka mea he 6 bits ka helu IPv128, ʻo ia hoʻi, mālama pono ʻia i ka ʻano binary.

Akā pehea inā loaʻa iā ʻoe nā helu IPv4 i kekahi manawa a i kekahi manawa IPv6? ʻAe, hiki iā ʻoe ke mālama i nā mea ʻelua. Hoʻokahi kolamu no IPv4, ʻo kekahi no IPv6. ʻOiaʻiʻo, aia kahi koho e hōʻike i ka IPv4 ma IPv6. E hana pū kēia, akā inā makemake pinepine ʻoe i kahi leka uila IPv4 i nā noi, a laila maikaʻi e waiho i kahi kolamu ʻokoʻa.

* Loaʻa iā ClickHouse i kēia manawa he IPv4, IPv6 ʻano ʻikepili e mālama pono i ka ʻikepili e like me nā helu, akā e hōʻike ana iā lākou e like me nā kaula.

Hoʻohana pono i ka ClickHouse. Alexey Milovidov (Yandex)

He mea nui nō hoʻi e hoʻomaopopo he mea pono e hoʻomaʻamaʻa i ka ʻikepili ma mua. No ka laʻana, loaʻa iā ʻoe kekahi mau log maka. A ʻaʻole paha ʻoe e hoʻokomo wale iā lākou i ClickHouse i kēia manawa, ʻoiai he mea hoʻowalewale loa ia e hana ʻole a holo nā mea a pau. Akā, he mea pono ke hoʻokō i nā helu i hiki.

No ka laʻana, ka polokalamu kele pūnaewele. Ma kekahi keʻena kokoke, ʻaʻole wau makemake e kuhikuhi i kahi manamana lima, mālama ʻia ka polokalamu kele pūnaewele e like me kēia, ʻo ia hoʻi, he kaula: 12.3. A laila, no ka hana ʻana i kahi hōʻike, lawe lākou i kēia kaula a hoʻokaʻawale iā ia i kahi array, a laila i ka mea mua o ka array. Ma keʻano maʻamau, lohi nā mea a pau. Ua nīnau au no ke aha lākou e hana ai i kēia. Ua haʻi mai lākou iaʻu ʻaʻole lākou makemake i ka optimization premature. A ʻaʻole wau makemake i ka pessimization premature.

No laila, ʻoi aku ka pololei o ka māhele ʻana i 4 kolamu. Mai makaʻu ma ʻaneʻi, no ka mea ʻo ClickHouse kēia. ʻO ClickHouse kahi waihona kolamu. A ʻoi aku ka maikaʻi o nā kolamu liʻiliʻi. Aia he 5 BrowserVersions, hana i 5 kolamu. Maikaʻi kēia.

Hoʻohana pono i ka ClickHouse. Alexey Milovidov (Yandex)

I kēia manawa, e nānā kāua i ka mea e hana ai inā he nui kāu mau kaula lōʻihi loa, lōʻihi loa. ʻAʻole pono lākou e mālama ʻia ma ClickHouse. Akā, hiki iā ʻoe ke mālama i kahi mea ʻike ma ClickHouse. A hoʻokomo i kēia mau laina lōʻihi i kekahi ʻōnaehana ʻē aʻe.

No ka laʻana, loaʻa i kekahi o kā mākou lawelawe loiloi kekahi mau ʻāpana hanana. A inā he nui nā ʻāpana no nā hanana, mālama wale mākou i ka 512 mua i loaʻa. No ka mea, ʻaʻole minamina ka 512.

Hoʻohana pono i ka ClickHouse. Alexey Milovidov (Yandex)

A inā ʻaʻole hiki iā ʻoe ke hoʻoholo i kāu ʻano ʻikepili, a laila hiki iā ʻoe ke hoʻopaʻa i ka ʻikepili ma ClickHouse, akā i loko o kahi papa ʻaina o ke ʻano Log, kūikawā no ka ʻikepili pōkole. Ma hope o kēia, hiki iā ʻoe ke nānā i ka hāʻawi ʻana o nā waiwai i loaʻa iā ʻoe ma laila, he aha ka mea maʻamau, a hana i nā ʻano kūpono.

* He ʻano ʻikepili ko ClickHouse i kēia manawa Cardinality Haʻahaʻa hiki iā ʻoe ke mālama pono i nā kaula me ka hoʻoikaika liʻiliʻi.

Hoʻohana pono i ka ClickHouse. Alexey Milovidov (Yandex)

I kēia manawa, e nānā kākou i kekahi hihia hoihoi. I kekahi manawa, hana ʻē nā mea no nā kānaka. Hele mai au a ʻike i kēia. A ʻike koke ʻia ua hana ʻia kēia e kekahi poʻe loea akamai a akamai i ka ʻike nui i ka hoʻonohonoho ʻana i ka mana MySQL 3.23.

Maʻaneʻi mākou eʻike ai i hoʻokahi kaukani papa, e hoʻopaʻa ana kēlā me kēia mea i ke koena o ka puʻunaueʻana i ka mea iʻike i ka mea i hoʻokahi tausani.

Ma ke kumu, mahalo wau i ka ʻike o nā poʻe ʻē aʻe, me ka hoʻomaopopo ʻana i ka ʻeha e hiki ke loaʻa ma o kēia ʻike.

Hoʻohana pono i ka ClickHouse. Alexey Milovidov (Yandex)

A ʻoi aʻe a maopopo ʻole nā ​​kumu. He mau stereotypes kahiko kēia i hōʻiliʻili ʻia i ka wā e hana ana me nā ʻōnaehana ʻē aʻe. No ka laʻana, ʻaʻohe kī nui i hui pū ʻia nā papa MyISAM. A ʻo kēia ala o ka hoʻokaʻawale ʻana i ka ʻikepili he hoʻāʻo nui paha e loaʻa ka hana like.

ʻO kekahi kumu he paʻakikī ke hana i nā hana hoʻololi ma nā papa nui. E ālai ʻia nā mea a pau. ʻOiai i nā mana hou o MySQL ʻaʻole koʻikoʻi kēia pilikia.

A i ʻole, no ka laʻana, microsharding, akā ʻoi aku ka nui ma hope.

Hoʻohana pono i ka ClickHouse. Alexey Milovidov (Yandex)

ʻAʻohe pono e hana i kēia ma ClickHouse, no ka mea, ʻo ka mea mua, ua hui ʻia ke kī nui, kauoha ʻia ka ʻikepili e ke kī nui.

A i kekahi manawa e nīnau mai ka poʻe iaʻu: "Pehea ka ʻokoʻa o ka hana o nā nīnau ma ClickHouse ma muli o ka nui o ka papaʻaina?" ʻŌlelo wau ʻaʻole loli iki. No ka laʻana, loaʻa iā ʻoe kahi pākaukau me kahi piliona lālani a heluhelu ʻoe i ka laulā o hoʻokahi miliona mau lālani. Ua maikaʻi nā mea a pau. Inā he trillion lālani ma ka papaʻaina a heluhelu ʻoe i hoʻokahi miliona lālani, ʻaneʻane like ia.

A, ʻo ka lua, ʻaʻole koi ʻia nā ʻano mea like ʻole e like me ka manual partitions. Inā ʻoe e komo i loko a nānā i ka mea ma ka ʻōnaehana faila, e ʻike ʻoe he mea nui ka papaʻaina. A aia kekahi mea e like me nā ʻāpana i loko. ʻO ia, hana ʻo ClickHouse i nā mea āpau no ʻoe a ʻaʻole pono ʻoe e ʻeha.

Hoʻohana pono i ka ClickHouse. Alexey Milovidov (Yandex)

ʻAʻole manuahi ka hoʻololi ʻana ma ClickHouse inā hoʻololi i ke kolamu hoʻohui.

A ʻaʻole pono ʻoe e hana i nā papa liʻiliʻi, no ka mea, inā he 10 mau lālani a i ʻole 10 mau lālani i ka papaʻaina, a laila ʻaʻole ia he mea nui. ʻO ClickHouse kahi ʻōnaehana e hoʻomaikaʻi ana i ka throughput, ʻaʻole latency, no laila ʻaʻole kūpono ke hana i nā laina 000.

Hoʻohana pono i ka ClickHouse. Alexey Milovidov (Yandex)

Pono ka hoʻohana ʻana i hoʻokahi pākaukau nui. E hoʻopau i nā stereotypes kahiko, e maikaʻi nā mea a pau.

A ma ke ʻano he bonus, i ka mana hou loa ua hiki iā mākou ke hana i kahi kī hoʻokaʻawale ʻokoʻa i mea e hana ai i nā ʻano hana mālama āpau ma nā ʻāpana pākahi.

No ka laʻana, pono ʻoe i nā papa liʻiliʻi he nui, no ka laʻana, i ka wā e pono ai e hoʻoponopono i kekahi mau ʻikepili waena, loaʻa iā ʻoe nā chunks a pono ʻoe e hoʻololi iā lākou ma mua o ke kākau ʻana i ka papaʻaina hope. No kēia hihia, aia kahi mīkini papaʻaina nani - StripeLog. Ua like ia me TinyLog, ʻoi aku ka maikaʻi.

* i kēia manawa ua loaʻa iā ClickHouse hookomo hana papa.

Hoʻohana pono i ka ClickHouse. Alexey Milovidov (Yandex)

ʻO kekahi antipattern he microsharding. No ka laʻana, pono ʻoe e hoʻokaʻawale i ka ʻikepili a loaʻa iā ʻoe 5 mau kikowaena, a ʻapōpō he 6 mau kikowaena. A noʻonoʻo ʻoe pehea e hoʻoponopono hou ai i kēia ʻikepili. A ʻaʻole ʻoe e haki i 5 shards, akā i 1 shards. A laila palapala ʻoe i kēlā me kēia microshards i kahi kikowaena kaʻawale. A e loaʻa iā ʻoe, no ka laʻana, 000 ClickHouses ma hoʻokahi kikowaena, no ka laʻana. E hoʻokaʻawale i nā manawa ma nā awa ʻokoʻa a i ʻole nā ​​ʻikepili ʻokoʻa.

Hoʻohana pono i ka ClickHouse. Alexey Milovidov (Yandex)

Akā ʻaʻole maikaʻi loa kēia ma ClickHouse. No ka mea hoʻokahi wale nō ClickHouse e ho'āʻo e hoʻohana i nā kumuwaiwai āpau i loaʻa e hoʻokō i hoʻokahi noi. ʻO ia hoʻi, loaʻa iā ʻoe kekahi ʻano kikowaena a loaʻa iā ia, no ka laʻana, 56 cores processor. Ke holo nei ʻoe i kahi nīnau i hoʻokahi kekona a e hoʻohana ʻo ia i 56 cores. A inā ʻoe i hoʻonoho i 200 ClickHouses ma laila ma kahi kikowaena, a laila e hoʻomaka ana ka 10 threads. Ma keʻano laulā, e pōʻino loa nā mea a pau.

ʻO ke kumu ʻē aʻe, ʻaʻole like ka māhele ʻana o ka hana ma kēia mau hihia. Hoʻopau mua kekahi, hoʻopau kekahi ma hope. Inā hana kēia mau mea i hoʻokahi manawa, a laila ʻo ClickHouse ponoʻī e noʻonoʻo pehea e hoʻohele pololei i ka ʻikepili i waena o nā kaula.

A ʻo kekahi kumu e loaʻa iā ʻoe ke kamaʻilio interprocessor ma o TCP. Pono e hoʻopili ʻia ka ʻikepili, deserialized, a he nui kēia o nā microshards. ʻAʻole ia e hana maikaʻi.

Hoʻohana pono i ka ClickHouse. Alexey Milovidov (Yandex)

ʻO kekahi antipattern, ʻoiai hiki ʻole ke kapa ʻia he antipattern. ʻO kēia ka nui o ka pre-aggregation.

Ma keʻano laulā, maikaʻi ka pre-aggregation. He piliona lālani kāu, ua hōʻuluʻulu ʻoe a lilo i 1 lālani, a i kēia manawa ua hoʻokō koke ʻia ka nīnau. Nui nā mea a pau. Hiki iā ʻoe ke hana i kēia. A no kēia, ʻo ClickHouse kekahi ʻano papaʻaina kūikawā, AggregatingMergeTree, e hana ana i ka hōʻuluʻulu ʻana i ka wā i hoʻokomo ʻia ai ka ʻikepili.

Akā aia kekahi mau manawa ke manaʻo ʻoe e hōʻuluʻulu mākou i ka ʻikepili e like me kēia a e hōʻuluʻulu i ka ʻikepili e like me kēia. A ma kekahi ʻoihana pili, ʻaʻole au makemake e haʻi i ka mea, hoʻohana lākou i nā papa SummingMergeTree e hōʻuluʻulu e ke kī mua, a ma kahi o 20 kolamu i hoʻohana ʻia ma ke kī mua. ʻO ka hihia wale nō, ua hoʻololi au i nā inoa o kekahi mau kolamu no ka hūnā, akā ʻo ia ka mea.

Hoʻohana pono i ka ClickHouse. Alexey Milovidov (Yandex)

A ke ala nei ia mau pilikia. ʻO ka mea mua, ʻaʻole e emi nui ka nui o kāu ʻikepili. No ka laʻana, emi ʻekolu manawa. ʻEkolu manawa he kumu kūʻai maikaʻi no ka hāʻawi ʻana i nā mana loiloi palena ʻole e kū mai inā ʻaʻole i hōʻuluʻulu ʻia kāu ʻikepili. Inā hōʻuluʻulu ʻia ka ʻikepili, a laila ma kahi o ka analytics e loaʻa wale ʻoe i nā helu ʻino.

A he aha ka mea kūikawā o ia mea? ʻO ka mea ʻoiaʻiʻo, hele kēia poʻe mai ke keʻena pili i kekahi manawa a noi e hoʻohui i kahi kolamu i ke kī mua. ʻO ia hoʻi, ua hōʻuluʻulu mākou i ka ʻikepili e like me kēia, akā i kēia manawa makemake mākou i kahi mea hou aʻe. Akā ʻaʻole ʻo ClickHouse kahi kī nui hoʻololi. No laila, pono mākou e kākau i kekahi mau palapala ma C++. A ʻaʻole wau makemake i nā palapala, ʻoiai inā aia lākou ma C ++.

A inā ʻoe e nānā i ka mea i hana ʻia ai ʻo ClickHouse, a laila ʻo ka ʻikepili non-aggregated ʻo ia ke ʻano i hānau ʻia ai. Inā ʻoe e hoʻohana nei i ka ClickHouse no ka ʻikepili hui ʻole, a laila ke hana pololei nei ʻoe. Inā ʻoe e hōʻuluʻulu, hiki ke kala ʻia kēia i kekahi manawa.

Hoʻohana pono i ka ClickHouse. Alexey Milovidov (Yandex)

ʻO kekahi hihia hoihoi ʻo nā nīnau i loko o kahi loop palena ʻole. I kekahi manawa hele au i kahi kikowaena hana a nānā i ka papa inoa papa hana ma laila. A i kēlā me kēia manawa aʻu e ʻike ai he mea weliweli ke hana nei.

No ka laʻana, e like me kēia. Ua maopopo koke e hiki ke hana i nā mea a pau i hoʻokahi noi. E kākau wale i ka URL a me ka papa inoa ma laila.

Hoʻohana pono i ka ClickHouse. Alexey Milovidov (Yandex)

No ke aha i hewa ʻole ai ka nui o ia mau nīnau ma kahi loop pau ʻole? Inā ʻaʻole hoʻohana ʻia kahi index, a laila e loaʻa iā ʻoe nā ala he nui ma luna o ka ʻikepili like. Akā inā hoʻohana ʻia ka index, no ka laʻana, loaʻa iā ʻoe kahi kī nui no ru a kākau ʻoe i ka url = kekahi mea ma laila. A manaʻo ʻoe inā heluhelu ʻia hoʻokahi URL mai ka papaʻaina, e maikaʻi nā mea a pau. Akā ʻaʻole maoli. No ka mea, hana ʻo ClickHouse i nā mea āpau i nā pūʻulu.

Ke pono ʻo ia e heluhelu i kekahi ʻano o ka ʻikepili, heluhelu ʻo ia i kahi mea liʻiliʻi, no ka mea he liʻiliʻi ka index ma ClickHouse. ʻAʻole ʻae kēia papa kuhikuhi iā ʻoe e ʻimi i hoʻokahi lālani pākahi i ka papaʻaina, he ʻano like wale nō. A hoʻopili ʻia ka ʻikepili i nā poloka. No ka heluhelu ʻana i hoʻokahi laina, pono ʻoe e lawe i ka poloka holoʻokoʻa a wehe iā ia. A inā e hana ana ʻoe i nā nīnau he nui, nui nā mea e hoʻopili ai, a he nui kāu hana e hana pinepine ai.

Hoʻohana pono i ka ClickHouse. Alexey Milovidov (Yandex)

A ma ke ʻano he bonus, hiki iā ʻoe ke hoʻomaopopo i ka ClickHouse ʻaʻole ʻoe e makaʻu e hoʻololi i nā megabytes a hiki i nā haneli megabytes i ka ʻāpana IN. Hoʻomanaʻo wau mai kā mākou hana inā ma MySQL mākou e hoʻololi i kahi pūʻulu o nā waiwai i ka ʻāpana IN, no ka laʻana, hoʻololi mākou i 100 megabytes o kekahi mau helu ma laila, a laila ʻai ʻo MySQL i 10 gigabytes o ka hoʻomanaʻo a ʻaʻohe mea ʻē aʻe i loaʻa iā ia, nā mea āpau. hana maikaʻi ʻole.

A ʻo ka lua, ʻo ia ma ClickHouse, inā hoʻohana kāu mau nīnau i kahi index, a laila ʻaʻole ʻoi aku ka lohi ma mua o ka scan piha, ʻo ia hoʻi inā pono ʻoe e heluhelu kokoke i ka papaʻaina holoʻokoʻa, e hele maʻamau a heluhelu i ka papaʻaina holoʻokoʻa. Ma keʻano laulā, e noʻonoʻo ʻo ia iā ia iho.

Akā naʻe, aia kekahi mau pilikia. No ka laʻana, ʻaʻole hoʻohana ʻo IN me kahi subquery i ka index. Akā ʻo kēia kā mākou pilikia a pono mākou e hoʻoponopono. ʻAʻohe mea kumu ma ʻaneʻi. E hooponopono kakou*.

A ʻo kekahi mea hoihoi, inā he noi lōʻihi loa kāu a ke holo nei ka hoʻoili noi ʻana, a laila e hoʻouna ʻia kēia noi lōʻihi loa i kēlā me kēia kikowaena me ka ʻole o ke kaomi ʻana. No ka laʻana, 100 megabytes a me 500 mau kikowaena. A no laila, e loaʻa iā ʻoe he 50 gigabytes i hoʻoili ʻia ma luna o ka pūnaewele. E hoʻouna ʻia a laila hoʻopau pono nā mea a pau.

* ke hoʻohana nei; Ua hoʻopaʻa ʻia nā mea a pau e like me ka mea i hoʻohiki ʻia.

Hoʻohana pono i ka ClickHouse. Alexey Milovidov (Yandex)

A ʻo kahi hihia maʻamau ke hele mai nā noi mai ka API. No ka laʻana, ua hana ʻoe i kekahi ʻano o kāu lawelawe ponoʻī. A inā makemake kekahi i kāu lawelawe, a laila wehe ʻoe i ka API a ʻelua mau lā ma hope mai ʻike ʻoe i kahi mea hiki ʻole ke hoʻomaopopo ʻia. Ua piha nā mea a pau a ke hele mai nei kekahi mau noi weliweli ʻaʻole pono e hiki.

A hoʻokahi wale nō hoʻonā. Inā ua wehe ʻoe i ka API, pono ʻoe e ʻoki. No ka laʻana, e hoʻolauna i kekahi ʻano quota. ʻAʻohe koho maʻamau ʻē aʻe. A i ʻole, e kākau koke lākou i kahi palapala a loaʻa nā pilikia.

A he hiʻohiʻona kūikawā ko ClickHouse - ka helu quota. Eia kekahi, hiki iā ʻoe ke hoʻololi i kāu kī quota. ʻO kēia, no ka laʻana, ka ID mea hoʻohana kūloko. A e helu kaʻawale ʻia nā quota no kēlā me kēia o lākou.

Hoʻohana pono i ka ClickHouse. Alexey Milovidov (Yandex)

I kēia manawa kekahi mea hoihoi. ʻO kēia ka hoʻopili lima.

ʻIke wau i nā hihia he nui kahi, ʻoiai ʻo ClickHouse i kūkulu ʻia i ke kākoʻo hoʻopiʻi hou ʻana, hana hou nā kānaka iā ClickHouse me ka lima.

He aha ke kumu? Loaʻa iā ʻoe kahi paipu hoʻoili ʻikepili. A hana kūʻokoʻa, no ka laʻana, ma nā kikowaena data like ʻole. Kākau ʻoe i ka ʻikepili like ma ke ala like ma ClickHouse. ʻOiaʻiʻo, hōʻike ka hoʻomaʻamaʻa e ʻokoʻa ana ka ʻikepili ma muli o kekahi mau hiʻohiʻona i kāu code. Manaʻo wau aia ia i kāu.

A i kēlā me kēia manawa pono ʻoe e hoʻolima lima. No ka laʻana, hoʻokahi manawa i ka mahina e hana nā admin i rsync.

ʻOiaʻiʻo, ʻoi aku ka maʻalahi o ka hoʻohana ʻana i ka replication i kūkulu ʻia i ClickHouse. Akā aia kekahi mau contraindications, no kēia mea pono ʻoe e hoʻohana iā ZooKeeper. ʻAʻole wau e ʻōlelo i kekahi mea maikaʻi ʻole e pili ana iā ZooKeeper, ma ke kumu, hana ka ʻōnaehana, akā hiki i ka poʻe ke hoʻohana ʻole ia no ka java-phobia, no ka mea he ʻōnaehana maikaʻi ʻo ClickHouse, i kākau ʻia ma C ++, hiki iā ʻoe ke hoʻohana a e maikaʻi nā mea a pau. A aia ʻo ZooKeeper ma java. A ʻaʻole makemake ʻoe e nānā, akā hiki iā ʻoe ke hoʻohana i ka replication manual.

Hoʻohana pono i ka ClickHouse. Alexey Milovidov (Yandex)

ʻO ClickHouse kahi ʻōnaehana kūpono. Mālama ʻo ia i kāu mau pono. Inā loaʻa iā ʻoe ka replication manual, a laila hiki iā ʻoe ke hana i kahi pākaukau Distributed e nānā i kāu replicas manual a hana i kahi failover ma waena o lākou. A aia kekahi koho kūikawā e hiki ai iā ʻoe ke pale i nā flops, ʻoiai inā e hoʻokaʻawale ʻia kāu mau laina.

Hoʻohana pono i ka ClickHouse. Alexey Milovidov (Yandex)

Hiki mai nā pilikia hou aʻe inā hoʻohana ʻoe i nā ʻenekini papaʻaina primitive. ʻO ClickHouse kahi mea hana i loaʻa i nā ʻenekini papaʻaina like ʻole. No nā hihia koʻikoʻi a pau, e like me ka mea i kākau ʻia ma ka palapala, e hoʻohana i nā papa mai ka ʻohana MergeTree. A ʻo nā mea ʻē aʻe - pēlā nō, no nā hihia pākahi a no nā hoʻokolohua.

Ma ka papa ʻaina MergeTree, ʻaʻole pono ʻoe i ka lā a me ka manawa. Hiki iā ʻoe ke hoʻohana. Inā ʻaʻohe lā a me ka manawa, e kākau i ka 2000 paʻamau. E hana kēia a ʻaʻole e koi i nā kumuwaiwai.

A i ka mana hou o ke kikowaena, hiki iā ʻoe ke kuhikuhi i ka hoʻokaʻawale maʻamau me ka ʻole o kahi kī partition. E like nō ia.

Hoʻohana pono i ka ClickHouse. Alexey Milovidov (Yandex)

Ma ka ʻaoʻao ʻē aʻe, hiki iā ʻoe ke hoʻohana i nā mīkini papaʻaina primitive. No ka laʻana, hoʻopiha i ka ʻikepili i hoʻokahi manawa a nānā, wili a holoi. Hiki iā ʻoe ke hoʻohana iā Log.

A i ʻole ka mālama ʻana i nā puke liʻiliʻi no ka hoʻoponopono waena ʻo StripeLog a i ʻole TinyLog.

Hiki ke hoʻohana ʻia ka hoʻomanaʻo inā liʻiliʻi ka nui o ka ʻikepili a hiki iā ʻoe ke hoʻololi wale i kekahi mea ma ka RAM.

Hoʻohana pono i ka ClickHouse. Alexey Milovidov (Yandex)

ʻAʻole makemake ʻo ClickHouse i ka ʻikepili i hoʻoponopono hou ʻia.

Eia kekahi laʻana maʻamau. He helu nui kēia o nā URL. Hoʻokomo ʻoe iā lākou i ka papaʻaina aʻe. A laila ua hoʻoholo lākou e hui pū me lākou, akā ʻaʻole e hana kēia, ma ke ʻano he kānāwai, no ka mea, kākoʻo wale ʻo ClickHouse iā Hash JOIN. Inā ʻaʻole lawa ka RAM no ka nui o nā ʻikepili e pono e hoʻopili ʻia, a laila ʻaʻole e hana ʻo JOIN *.

Inā he cardinality kiʻekiʻe ka ʻikepili, a laila mai hopohopo, e mālama iā ia i kahi ʻano denormalized, aia nā URL ma kahi o ka papa nui.

* a i kēia manawa he hui hui pū ʻo ClickHouse, a hana ia i nā kūlana i kūpono ʻole ka ʻikepili waena i ka RAM. Akā ʻaʻole pono kēia a hoʻomau ka manaʻo.

Hoʻohana pono i ka ClickHouse. Alexey Milovidov (Yandex)

ʻElua mau hiʻohiʻona hou aʻe, akā ke kānalua nei au inā he anti-pattern a ʻaʻole paha.

Loaʻa i ka ClickHouse kahi hemahema i ʻike ʻia. ʻAʻole maopopo iā ia pehea e hoʻonui ai *. Ma kekahi mau ʻano, maikaʻi kēia. Inā loaʻa iā ʻoe kekahi mau ʻikepili koʻikoʻi, no ka laʻana, ka helu helu, a laila ʻaʻohe mea e hiki ke hoʻouna aku, no ka mea, ʻaʻohe mea hou.

* Ua hoʻohui ʻia ke kākoʻo no ka hoʻonui ʻana a me ka holoi ʻana i ka mode batch i kahi manawa lōʻihi.

Akā aia kekahi mau ala kūikawā e ʻae ai i nā mea hou e like me ke ʻano o ke kua. No ka laʻana, nā papa e like me ReplaceMergeTree. Hana lākou i nā mea hou i ka wā o ka hui ʻana i hope. Hiki iā ʻoe ke hoʻoikaika i kēia me ka hoʻohana ʻana i ka papa optimize. Mai hana pinepine i keia, no ka mea, e hoopau loa ia i ka paku.

Hoʻopili maikaʻi ʻia nā JOIN i ka ClickHouse e ka mea hoʻolālā nīnau.

He ʻino, akā i kekahi manawa Ok.

Ke hoʻohana nei i ClickHouse wale nō e heluhelu i ka ʻikepili me ka hoʻohana ʻana i ke koho *.

ʻAʻole wau makemake e hoʻohana i ka ClickHouse no nā helu paʻakikī. Akā ʻaʻole ʻoiaʻiʻo loa kēia, no ka mea ke neʻe nei mākou mai kēia ʻōlelo aʻoaʻo. A ua hoʻohui hou mākou i ka hiki ke hoʻopili i nā hiʻohiʻona aʻo mīkini ma ClickHouse - Catboost. A pilikia iaʻu no ka mea, manaʻo wau, "He mea weliweli. ʻO kēia ka nui o nā pōʻai i kēlā me kēia byte! Hoʻowahāwahā loa au i ka hoʻopau ʻana i nā uaki ma nā bytes.

Hoʻohana pono i ka ClickHouse. Alexey Milovidov (Yandex)

Akā, mai makaʻu, e hoʻokomo i ka ClickHouse, e maikaʻi nā mea a pau. Inā he mea, he kaiāulu ko mākou. Ma ke ala, ʻo ʻoe ke kaiāulu. A inā he pilikia kāu, hiki iā ʻoe ke hele i kā mākou kamaʻilio, a manaʻolana lākou e kōkua iā ʻoe.

ʻO kāu mau nīnau

Mahalo no ka hōʻike! Ma hea e hiki ai iaʻu ke hoʻopiʻi e pili ana i ka hāʻule ʻana o ClickHouse?

Hiki iā ʻoe ke hoʻopiʻi iho iaʻu i kēia manawa.

Ua hoʻomaka wau e hoʻohana i ka ClickHouse. Ua hoʻokuʻu koke wau i ka cli interface.

He aha ka helu.

A liʻiliʻi ma hope, ua hāʻule au i ke kikowaena me kahi koho liʻiliʻi.

He kālena kāu.

Ua wehe au i kahi pahu GitHub, akā ʻaʻole i mālama ʻia.

E ʻike kāua.

Ua hoʻopunipuni ʻo Alexey iaʻu e hele i ka hōʻike, me ka hoʻohiki ʻana e haʻi iaʻu pehea ʻoe e komo ai i ka ʻikepili i loko.

Maʻalahi loa.

Ua hoʻomaopopo au i kēia i nehinei. Nā kikoʻī hou aku.

ʻAʻohe mea hoʻopunipuni weliweli ma laila. Aia wale nō ka hoʻopaʻa paʻa ʻia. ʻO LZ4 ka mea paʻamau, hiki iā ʻoe ke hoʻohana iā ZSTD*. Nā poloka mai 64 kilobytes a i 1 megabyte.

* Aia pū kekahi kākoʻo no nā codecs compression kūikawā hiki ke hoʻohana ʻia i ke kaulahao me nā algorithms ʻē aʻe.

He ʻikepili maka wale anei nā poloka?

ʻAʻole maka loa. Aia nā papa kuhikuhi. Inā loaʻa iā ʻoe kahi kolamu helu, a laila hoʻokomo ʻia nā helu ma ka lālani ma kahi ʻano.

Maopopo.

ʻO Alexey, kahi laʻana me ka uniqExact ma luna o nā IP, ʻo ia hoʻi ka lōʻihi o ka uniqExact i ka helu ʻana ma nā laina ma mua o nā helu, a pēlā aku. He aha inā mākou e hoʻohana i ka feint me ko mākou mau pepeiao a hoʻolei i ka manawa o ka proofreading? ʻO ia hoʻi, ua ʻōlelo ʻoe ma kā mākou disk ʻaʻole ʻokoʻa loa. Inā heluhelu mākou i nā laina mai ka disk a me ka hoʻolei ʻana, ʻoi aku ka wikiwiki o kā mākou hui a ʻaʻole paha? A i ʻole e loaʻa iki iā mākou ma ʻaneʻi? Me he mea lā iaʻu ua hoʻāʻo ʻoe i kēia, akā no kekahi kumu ʻaʻole ia i hōʻike i ka benchmark.

Manaʻo wau e ʻoi aku ka lohi ma mua o ka hoʻolei ʻole ʻana. I kēia hihia, pono e hoʻokaʻawale ʻia ka helu IP mai ke kaula. ʻOiaʻiʻo, ma ClickHouse, ʻoi aku ka maikaʻi o kā mākou IP address parsing. Ua hoʻoikaika nui mākou, akā aia nā helu i kākau ʻia ma ke ʻano he ʻumi tausani. ʻAʻole ʻoluʻolu loa. Ma kekahiʻaoʻao, eʻoi aku ka lohi o ka hana uniqExact ma nā kaula,ʻaʻole wale no ka mea he mau kaula kēia, akā, no ka mea ua kohoʻia kekahiʻano kūikawā o ka algorithm. ʻOkoʻa ka hana ʻana o nā kaula.

He aha inā e lawe mākou i kahi ʻano ʻikepili mua? No ka laʻana, kākau mākou i ka mea hoʻohana id, i loaʻa iā mākou i loko, kākau iā ia ma ke ʻano he laina, a laila scrambled ia, e ʻoi aku ka leʻaleʻa a ʻaʻole paha?

Ke kānalua nei au. Manaʻo wau e ʻoi aku ke kaumaha, no ka mea ma hope o nā mea a pau, he pilikia koʻikoʻi ka parsing helu. Me he mea lā ua hāʻawi mai kēia hoa hana i kahi hōʻike e pili ana i ka paʻakikī o ka hoʻokaʻawale ʻana i nā helu ma ke ʻano he ʻumi tausani, akā ʻaʻole paha.

Alexey, mahalo nui iā ʻoe no ka hōʻike! A mahalo nui iā ClickHouse! He nīnau kaʻu e pili ana i nā hoʻolālā. Aia kekahi manaʻo no kahi hiʻohiʻona e hōʻano hou i nā puke wehewehe ʻōlelo?

ʻO ia hoʻi, kahi reboot hapa?

Ae 'ae. E like me ka hiki ke hoʻonohonoho i kahi kahua MySQL ma laila, ʻo ia hoʻi ka hoʻopou ma hope o ka hoʻouka ʻia ʻana o kēia ʻikepili inā nui loa ka puke wehewehe.

He hiʻohiʻona hoihoi loa. A manaʻo wau ua manaʻo kekahi i kā mākou kamaʻilio. ʻO ʻoe nō paha ia.

ʻaʻole naʻe wau e manaʻo.

Nui, i kēia manawa ua ʻike ʻia ʻelua mau noi. A hiki iā ʻoe ke hoʻomaka mālie e hana. Akā makemake wau e aʻo koke iā ʻoe he maʻalahi kēia hiʻohiʻona e hoʻokō. ʻO ia hoʻi, ma ke kumumanaʻo, pono ʻoe e kākau i ka helu helu ma ka papaʻaina a laila kākau: ʻoi aku ka liʻiliʻi ma mua o kēlā a me kēia. ʻO ke ʻano kēia, ʻoi aku paha, e hāʻawi mākou i kēia i nā mea hoihoi. He kanaka hoihoi paha ʻoe?

ʻAe, akā, pōʻino, ʻaʻole ma C++.

ʻIke paha kāu mau hoa hana i ke kākau ʻana ma C++?

E loaʻa iaʻu kekahi.

Nui*.

* ua hoʻohui ʻia ka hiʻona i ʻelua mahina ma hope o ka hōʻike - ua hoʻomohala ka mea kākau o ka nīnau a hoʻouna i kāna noi noi.

Alakaʻi!

Aloha! Mahalo no ka hōʻike! Ua ʻōlelo ʻoe he maikaʻi loa ʻo ClickHouse i ka hoʻohana ʻana i nā kumuwaiwai āpau i loaʻa iā ia. A kamaʻilio ka mea haʻiʻōlelo ma hope o Luxoft e pili ana i kāna hopena no ka Russian Post. Ua ʻōlelo ʻo ia ua makemake nui lākou iā ClickHouse, akā ʻaʻole lākou i hoʻohana ia mea ma mua o kā lākou mea hoʻokūkū nui no ka mea e ʻai ana ia i ka CPU āpau. A ʻaʻole hiki iā lākou ke hoʻopili iā ia i kā lākou papa hana, i kā lākou ZooKeeper me nā dockers. Hiki paha ke kaupalena i ka ClickHouse i ʻole e hoʻopau i nā mea āpau i loaʻa iā ia?

ʻAe, hiki a maʻalahi loa. Inā makemake ʻoe e hoʻopau i nā cores liʻiliʻi, a laila e kākau wale set max_threads = 1. A ʻo ia, e hoʻokō ʻo ia i ka noi i hoʻokahi kumu. Eia kekahi, hiki iā ʻoe ke kuhikuhi i nā hoʻonohonoho like ʻole no nā mea hoʻohana like ʻole. No laila ʻaʻohe pilikia. A e haʻi aku i kāu mau hoa hana mai Luxoft ʻaʻole maikaʻi ka loaʻa ʻole o kēia hoʻonohonoho i ka palapala.

Alexey, aloha! Makemake au e nīnau e pili ana i kēia nīnau. ʻAʻole kēia ka manawa mua aʻu i lohe ai e hoʻomaka ana nā poʻe he nui e hoʻohana i ka ClickHouse ma ke ʻano he waihona no nā lāʻau. Ma ka hōʻike āu i ʻōlelo ai ʻaʻole e hana i kēia, ʻo ia hoʻi, ʻaʻole pono ʻoe e mālama i nā kaula lōʻihi. Pehea kou manao no ia mea?

ʻO ka mea mua, ʻo nā lāʻau, ma ke ʻano he lula, ʻaʻole nā ​​kaula lōʻihi. Aia nō, ʻoiaʻiʻo, ʻokoʻa. No ka laʻana, ʻo kekahi lawelawe i kākau ʻia ma java e hoʻolei i kahi ʻokoʻa, ua hoʻopaʻa ʻia. A pela aku ma ka loop pau ole, a pau ka hakahaka o ka paakiki. He maʻalahi loa ka hoʻonā. Inā lōʻihi loa nā laina, e ʻoki. He aha ke ʻano o ka lōʻihi? He ʻumi kilobytes ʻino*.

* i nā mana hou loa o ClickHouse, hiki ke "adaptive index granularity", e hoʻopau i ka pilikia o ka mālama ʻana i nā lālani lōʻihi no ka hapa nui.

He kilobyte maʻamau?

He mea maʻamau.

Aloha! Mahalo no ka hōʻike! Ua nīnau mua wau e pili ana i kēia ma ke kamaʻilio, akā ʻaʻole wau e hoʻomanaʻo inā loaʻa iaʻu kahi pane. Aia nā hoʻolālā e hoʻonui i ka ʻāpana WITH ma ke ʻano o CTE?

Koe aku. ʻO kā mākou ʻāpana WITH he mea haʻahaʻa loa. He mea ʻano liʻiliʻi ia no mākou.

Maopopo iaʻu. Mahalo iā ʻoe!

Mahalo no ka hōʻike! Hoihoi loa! Nīnau honua. Aia kekahi manaʻo e hoʻololi i ka holoi ʻana i ka ʻikepili, ma ke ʻano paha o kekahi ʻano stubs?

Pono. ʻO kēia kā mākou hana mua ma kā mākou pila. Ke noʻonoʻo nei mākou i kēia manawa pehea e hana pono ai i nā mea āpau. A pono ʻoe e hoʻomaka i ke kaomi ʻana i ka keyboard*.

* kaomi i nā pihi ma ka papa keyboard a hana i nā mea āpau.

E pili ana paha kēia i ka hana ʻōnaehana a i ʻole? E wikiwiki paha ka hoʻokomo ʻana e like me kēia manawa?

Malia paha e koʻikoʻi loa ka holoi ʻana iā lākou iho a me ka hoʻonui ʻana iā lākou iho, akā ʻaʻole pili kēia i ka hana o nā koho a i ʻole ka hana o nā mea hoʻokomo.

A hoʻokahi nīnau liʻiliʻi hou. Ma ka hōʻike ʻana ua kamaʻilio ʻoe e pili ana i ke kī mua. No laila, loaʻa iā mākou ka partitioning, ʻo ia ka mahina ma ka paʻamau, pololei? A i ka wā e hoʻonoho ai mākou i kahi lā i kūpono i hoʻokahi mahina, a laila heluhelu ʻia kēia ʻāpana, ʻeā?

ʻAe.

He ninau. Inā ʻaʻole hiki iā mākou ke koho i kekahi kī nui, a laila pololei anei ke hana ʻia e like me ke kahua "La" no laila i ke kua i ka liʻiliʻi o ka hoʻonohonoho hou ʻana o kēia ʻikepili i kūpono i ke ʻano hoʻonohonoho? Inā ʻaʻohe āu nīnau a ʻaʻole hiki iā ʻoe ke koho i kekahi kī nui, pono anei ke kau ʻana i kahi lā ma ke kī mua?

ʻAe.

Maikaʻi paha ke kau ʻana i kahi kahua ma ke kī mua e hoʻomāmā i ka ʻikepili inā e hoʻokaʻawale ʻia e kēia kahua. No ka laʻana, ID mea hoʻohana. ʻO ka mea hoʻohana, no ka laʻana, hele i ka pūnaewele hoʻokahi. I kēia hihia, e kau i ka mea hoʻohana id a me ka manawa. A laila e ʻoi aku ka maikaʻi o kāu ʻikepili. No ka lā, inā ʻaʻole ʻoe i loaʻa a ʻaʻole loaʻa nā nīnau kikoʻī i nā lā, a laila ʻaʻole pono ʻoe e kau i ka lā ma ke kī mua.

OK mahalo nui loa!

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka