ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° Ρ€Π΅Π΄ΠΎΠ²Π΅Ρ‚Π΅ Π² ClickHouse. Π”ΠΎΠΊΠ»Π°Π΄ Π½Π° ЯндСкс

Аналитичната Π‘Π£Π‘Π” ClickHouse ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π° мноТСство Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ стринговС, ΠΊΠΎΠ΅Ρ‚ΠΎ консумира рСсурси. Π—Π° Π΄Π° сС ускори Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° систСмата, постоянно сС добавят Π½ΠΎΠ²ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡŠΡ‚ Π½Π° ClickHouse, Николай ΠšΠΎΡ‡Π΅Ρ‚ΠΎΠ², Ρ€Π°Π·ΠΊΠ°Π·Π²Π° Π·Π° стринговия Ρ‚ΠΈΠΏ Π΄Π°Π½Π½ΠΈ, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΈ Π·Π° новия Ρ‚ΠΈΠΏ LowCardinality, ΠΈ обяснява ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ускорим Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° със стринговСтС.

Π’ΡŠΠ·ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄ΠΈ Π²ΠΈΠ΄Π΅ΠΎ

β€” ΠŸΡŠΡ€Π²ΠΎ Π½Π΅ΠΊΠ° Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°ΠΌΠ΅ стринговС.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° Ρ€Π΅Π΄ΠΎΠ²Π΅Ρ‚Π΅ Π² ClickHouse. Π”ΠΎΠΊΠ»Π°Π΄ Π½Π° ЯндСкс

ИмамС стрингови Ρ‚ΠΈΠΏΠΎΠ²Π΅ Π΄Π°Π½Π½ΠΈ. String Π΅ подходящ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ ΠΈ трябва Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΠΎΡ‡Ρ‚ΠΈ Π²ΠΈΠ½Π°Π³ΠΈ. Π’ΠΎΠΉ ΠΈΠΌΠ° малък Overhead β€” 9 Π±Π°ΠΉΡ‚Π° Π½Π° Π΅Π΄ΠΈΠ½ стринг. Ако искамС Ρ€Π°Π·ΠΌΠ΅Ρ€ΡŠΡ‚ Π½Π° стринговСтС Π΄Π° Π΅ фиксиран ΠΈ извСстСн Π½Π°ΠΏΡ€Π΅Π΄, ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π΅ Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ FixedString. Π’ Π½Π΅Π³ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π·Π°Π΄Π°Π΄Π΅ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ число Π±Π°ΠΉΡ‚Π°, ΡƒΠ΄ΠΎΠ±Π΅Π½ Π΅ Π·Π° Π΄Π°Π½Π½ΠΈ ΠΊΠ°Ρ‚ΠΎ IP-адрСси ΠΈΠ»ΠΈ Ρ…Π΅Ρˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° Ρ€Π΅Π΄ΠΎΠ²Π΅Ρ‚Π΅ Π² ClickHouse. Π”ΠΎΠΊΠ»Π°Π΄ Π½Π° ЯндСкс

Π Π°Π·Π±ΠΈΡ€Π° сС, понякога Π½Π΅Ρ‰ΠΎ забавя. Π”Π° ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Π΅ ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ заявка към Ρ‚Π°Π±Π»ΠΈΡ†Π°. ClickHouse Ρ‡Π΅Ρ‚Π΅ доста голямо количСство Π΄Π°Π½Π½ΠΈ, Π΄Π° ΠΊΠ°ΠΆΠ΅ΠΌ с скорост 100 Π“Π‘/с, ΠΊΠ°Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π° ΠΌΠ°Π»ΠΊΠΎ стринговС. ИмамС Π΄Π²Π΅ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚ ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΈ Π΄Π°Π½Π½ΠΈ. ΠžΡ‚ Π²Ρ‚ΠΎΡ€Π°Ρ‚Π° Ρ‚Π°Π±Π»ΠΈΡ†Π° ClickHouse Ρ‡Π΅Ρ‚Π΅ Π΄Π°Π½Π½ΠΈ с ΠΏΠΎ-голяма скорост, Π½ΠΎ стринговСтС Π½Π° сСкунда сС Ρ‡Π΅Ρ‚Π°Ρ‚ Ρ‚Ρ€ΠΈ ΠΏΡŠΡ‚ΠΈ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° Ρ€Π΅Π΄ΠΎΠ²Π΅Ρ‚Π΅ Π² ClickHouse. Π”ΠΎΠΊΠ»Π°Π΄ Π½Π° ЯндСкс

Ако ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π½Π° компрСсиранитС Π΄Π°Π½Π½ΠΈ, Ρ‚ΠΎΠΉ Ρ‰Π΅ Π΅ ΠΏΠΎΡ‡Ρ‚ΠΈ Ρ€Π°Π²Π΅Π½. Π’ΡΡŠΡ‰Π½ΠΎΡΡ‚ Π² Ρ‚Π°Π±Π»ΠΈΡ†ΠΈΡ‚Π΅ са записани ΡΡŠΡ‰ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ β€” ΠΏΡŠΡ€Π²ΠΈΡΡ‚ ΠΌΠΈΠ»ΠΈΠ°Ρ€Π΄ числа β€” само Ρ‡Π΅ Π² ΠΏΡŠΡ€Π²Π°Ρ‚Π° ΠΊΠΎΠ»ΠΎΠ½Π° са записани ΠΊΠ°Ρ‚ΠΎ UInt64, Π° във Π²Ρ‚ΠΎΡ€Π°Ρ‚Π° β€” ΠΊΠ°Ρ‚ΠΎ String. ΠŸΠΎΡ€Π°Π΄ΠΈ Ρ‚ΠΎΠ²Π° вторият Π·Π°ΠΏΠΈΡ‚Π²Π° ΠΏΠΎ-дълго Ρ‡Π΅Ρ‚Π΅ Π΄Π°Π½Π½ΠΈΡ‚Π΅ ΠΎΡ‚ диска ΠΈ Π³ΠΈ дСкомпрСсира.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° Ρ€Π΅Π΄ΠΎΠ²Π΅Ρ‚Π΅ Π² ClickHouse. Π”ΠΎΠΊΠ»Π°Π΄ Π½Π° ЯндСкс

Π•Ρ‚ΠΎ ΠΎΡ‰Π΅ Π΅Π΄ΠΈΠ½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€. НСка ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Π΅ ΠΈΠΌΠ° ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎ извСстно мноТСство стринговС, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΎ Π΄ΠΎ константа 1000 ΠΈΠ»ΠΈ 10 000 ΠΈ практичСски Π½ΠΈΠΊΠΎΠ³Π° Π½Π΅ сС промСня. Π’ Ρ‚ΠΎΠ·ΠΈ случай Π½ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠΆΠ΄Π° Ρ‚ΠΈΠΏ Π΄Π°Π½Π½ΠΈ Enum, Π° Π² ClickHouse ΠΈΠΌΠ° Π΄Π²Π° β€” Enum8 ΠΈ Enum16. Π‘Π»Π°Π³ΠΎΠ΄Π°Ρ€Π΅Π½ΠΈΠ΅ Π½Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π² Enum, Π½ΠΈΠ΅ Π±ΡŠΡ€Π·ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π°ΠΌΠ΅ заявкитС.

Π’ ClickHouse ΠΈΠΌΠ° ускорСния Π·Π° GROUP BY, IN, DISTINCT ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π·Π° някои Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° сравнСниС с константСн стринг. Π Π°Π·Π±ΠΈΡ€Π° сС, числата Π² стринга Π½Π΅ сС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Ρ‚, Π° ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ, константният стринг сС ΠΏΡ€ΠΈΠ²Π΅ΠΆΠ΄Π° към стойността Π½Π° Enum. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° всичко Π±ΡŠΡ€Π·ΠΎ сС сравнява.

Но ΠΈΠΌΠ° ΠΈ минуси. Π”ΠΎΡ€ΠΈ Π°ΠΊΠΎ Π·Π½Π°Π΅ΠΌ Ρ‚ΠΎΡ‡Π½ΠΎΡ‚ΠΎ мноТСство ΠΎΡ‚ стринговС, понякога Ρ‚ΠΎ трябва Π΄Π° сС допълва. Появила сС Π΅ Π½ΠΎΠ²Π° стринг β€” трябва Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ ALTER.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° Ρ€Π΅Π΄ΠΎΠ²Π΅Ρ‚Π΅ Π² ClickHouse. Π”ΠΎΠΊΠ»Π°Π΄ Π½Π° ЯндСкс

ALTER Π·Π° Enum Π² ClickHouse Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»Π½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½. НиС Π½Π΅ прСзаписвамС Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π½Π° диска, Π½ΠΎ ALTER ΠΌΠΎΠΆΠ΅ Π΄Π° забавя, ΠΏΠΎΡ€Π°Π΄ΠΈ Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ структурата Enum сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° Π² схСмата Π½Π° самата Ρ‚Π°Π±Π»ΠΈΡ†Π°. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»Π½ΠΎ, трябва Π΄Π° ΠΈΠ·Ρ‡Π°ΠΊΠ°ΠΌΠ΅ заявкитС Π·Π° ΠΏΡ€ΠΎΡ‡ΠΈΡ‚ ΠΎΡ‚ Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

Π’ΡŠΠ·Π½ΠΈΠΊΠ²Π° Π²ΡŠΠΏΡ€ΠΎΡΡŠΡ‚, Π΄Π°Π»ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π΅? ВСроятно Π΄Π°. МоТС Π΄Π° сС Π·Π°ΠΏΠ°Π·ΠΈ структурата Π½Π° Enum Π½Π΅ Π² схСмата Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π°, Π° Π² ZooKeeper. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π° ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π²ΡŠΠ·Π½ΠΈΠΊΠ½Π°Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ със синхронизацията. НапримСр, Π΅Π΄Π½Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ° Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»Π° Π΄Π°Π½Π½ΠΈ, Π΄Ρ€ΡƒΠ³Π° β€” Π½Π΅, ΠΈ Π°ΠΊΠΎ ΠΏΡ€ΠΈ нСя Π΅ старият Enum, Π½Π΅Ρ‰ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС счупи. (Π’ ClickHouse ΠΏΠΎΡ‡Ρ‚ΠΈ Π·Π°Π²ΡŠΡ€ΡˆΠΈΡ…ΠΌΠ΅ Π½Π΅Π±Π»ΠΎΠΊΠΈΡ€Π°Ρ‰ΠΈΡ‚Π΅ ALTER-заявки. ΠšΠΎΠ³Π°Ρ‚ΠΎ Π³ΠΈ Π·Π°Π²ΡŠΡ€ΡˆΠΈΠΌ изцяло, няма Π΄Π° Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° Ρ‡Π°ΠΊΠ°ΠΌΠ΅ заявкитС Π·Π° ΠΏΡ€ΠΎΡ‡ΠΈΡ‚.)

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° Ρ€Π΅Π΄ΠΎΠ²Π΅Ρ‚Π΅ Π² ClickHouse. Π”ΠΎΠΊΠ»Π°Π΄ Π½Π° ЯндСкс

Π—Π° Π΄Π° Π½Π΅ си Π³ΡƒΠ±ΠΈΠΌ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ с ALTER Enum, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ външни Ρ€Π΅Ρ‡Π½ΠΈΡ†ΠΈ ClickHouse. Напомням, Ρ‡Π΅ Ρ‚ΠΎΠ²Π° Π΅ структура ΠΎΡ‚ Ρ‚ΠΈΠΏ ΠΊΠ»ΡŽΡ‡-стойност Π² ClickHouse, с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° която ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ външни ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΡ†ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΡ‚ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ MySQL.

Π’ Ρ€Π΅Ρ‡Π½ΠΈΠΊΠ° ClickHouse ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°ΠΌΠ΅ мноТСство Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ€Π΅Π΄ΠΎΠ²Π΅, Π° Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ‚Π° β€” Ρ‚Π΅Ρ…Π½ΠΈΡ‚Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΈ ΠΏΠΎΠ΄ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π½Π° числа. Ако Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Ρ€Π΅Π΄, ΠΈΠ·Π²ΠΈΠΊΠ²Π°ΠΌΠ΅ функцията dictGet ΠΈ Ρ€Π°Π±ΠΎΡ‚ΠΈΠΌ с нСя. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° Π½Π΅ трябва Π΄Π° ΠΏΡ€Π°Π²ΠΈΠΌ ALTER. Π—Π° Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π½Π΅Ρ‰ΠΎ Π² Enum, Π³ΠΎ вмъквамС Π² ΡΡŠΡ‰Π°Ρ‚Π° Ρ‚Π°Π±Π»ΠΈΡ†Π° MySQL.

Но Ρ‚ΡƒΠΊ Π²ΡŠΠ·Π½ΠΈΠΊΠ²Π°Ρ‚ Π΄Ρ€ΡƒΠ³ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ. ΠŸΡŠΡ€Π²ΠΎ, Π½Π΅ΡƒΠ΄ΠΎΠ±Π΅Π½ синтаксис. Ако искамС Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Ρ€Π΅Π΄, трябва Π΄Π° ΠΈΠ·Π²ΠΈΠΊΠ°ΠΌΠ΅ dictGet. На Π²Ρ‚ΠΎΡ€ΠΎ място, липсата Π½Π° някои ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ. Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ с константния Ρ€Π΅Π΄ Π·Π° Ρ€Π΅Ρ‡Π½ΠΈΡ†ΠΈΡ‚Π΅ Π½Π΅ Π΅ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° Π±ΡŠΡ€Π·ΠΎ.

МоТС ΡΡŠΡ‰ΠΎ Π΄Π° ΠΈΠΌΠ° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ с Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Π΅ смС изискали Ρ€Π΅Π΄ Π² кСш-Ρ€Π΅Ρ‡Π½ΠΈΠΊΠ°, Π° Ρ‚ΠΎΠΉ Π½Π΅ Π΅ ΠΏΠΎΠΏΠ°Π΄Π½Π°Π» Π² кСша. Π’ΠΎΠ³Π°Π²Π° трябва Π΄Π° ΠΈΠ·Ρ‡Π°ΠΊΠ°ΠΌΠ΅, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ Π΄Π°Π½Π½ΠΈΡ‚Π΅ сС зарСдят ΠΎΡ‚ външния ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° Ρ€Π΅Π΄ΠΎΠ²Π΅Ρ‚Π΅ Π² ClickHouse. Π”ΠΎΠΊΠ»Π°Π΄ Π½Π° ЯндСкс

ΠžΠ±Ρ‰ Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΠΊ Π½Π° Π΄Π²Π°Ρ‚Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π΅, Ρ‡Π΅ ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°ΠΌΠ΅ всички ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π΅ Π½Π° Π΅Π΄Π½ΠΎ място ΠΈ Π³ΠΈ синхронизирамС. Π—Π°Ρ‰ΠΎ Π½Π΅ ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°ΠΌΠ΅ Ρ€Π΅Ρ‡Π½ΠΈΡ†ΠΈΡ‚Π΅ Π»ΠΎΠΊΠ°Π»Π½ΠΎ? Π‘Π΅Π· синхронизация β€” Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ. МоТС Π΄Π° сС ΡΡŠΡ…Ρ€Π°Π½ΠΈ Ρ€Π΅Ρ‡Π½ΠΈΠΊ Π»ΠΎΠΊΠ°Π»Π½ΠΎ Π² ΠΏΠ°Ρ€Ρ‡Π΅ Π½Π° диска. ВоСст, Π½Π°ΠΏΡ€Π°Π²ΠΈΡ…ΠΌΠ΅ Insert, записахмС Ρ€Π΅Ρ‡Π½ΠΈΠΊΠ°. Ако Ρ€Π°Π±ΠΎΡ‚ΠΈΠΌ с Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π² ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° запишСм Ρ€Π΅Ρ‡Π½ΠΈΠΊΠ° ΠΈΠ»ΠΈ Π² Π±Π»ΠΎΠΊ ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ, ΠΈΠ»ΠΈ Π² ΠΏΠ°Ρ€Ρ‡Π΅ ΠΊΠΎΠ»ΠΎΠ½Π°, ΠΈΠ»ΠΈ Π² някакъв кСш, Π·Π° Π΄Π° ускорим изчислСнията.

Π Π΅Ρ‡Π½ΠΈΠΊΠΎΠ²ΠΎ ΠΊΠΎΠ΄ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ€Π΅Π΄ΠΎΠ²Π΅

Π’Π°ΠΊΠ° стигнахмС Π΄ΠΎ ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π½ΠΎΠ² Ρ‚ΠΈΠΏ Π΄Π°Π½Π½ΠΈ Π² ClickHouse β€” LowCardinality. Π’ΠΎΠ²Π° Π΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π·Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π½Π° Π΄Π°Π½Π½ΠΈ: ΠΊΠ°ΠΊ Ρ‚Π΅ сС записват Π½Π° диска ΠΈ ΠΊΠ°ΠΊ сС Ρ‡Π΅Ρ‚Π°Ρ‚, ΠΊΠ°ΠΊ са прСдставСни Π² ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° ΠΈ схСмата Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° ΠΈΠΌ.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° Ρ€Π΅Π΄ΠΎΠ²Π΅Ρ‚Π΅ Π² ClickHouse. Π”ΠΎΠΊΠ»Π°Π΄ Π½Π° ЯндСкс

На слайда ΠΈΠΌΠ° Π΄Π²Π΅ ΠΊΠΎΠ»ΠΎΠ½ΠΈ. ΠžΡ‚Π΄ΡΡΠ½ΠΎ Ρ€Π΅Π΄ΠΎΠ²Π΅Ρ‚Π΅ сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚ стандартно, Π² Ρ‚ΠΈΠΏ String. Ясно Π΅, Ρ‡Π΅ Ρ‚ΠΎΠ²Π° са някакви ΠΌΠΎΠ΄Π΅Π»ΠΈ Π½Π° ΠΌΠΎΠ±ΠΈΠ»Π½ΠΈ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ΠΈ. ΠžΡ‚Π»ΡΠ²ΠΎ ΠΈΠΌΠ° Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠ°Π²Π° ΠΊΠΎΠ»ΠΎΠ½Π°, Π½ΠΎ Π² Ρ‚ΠΈΠΏ LowCardinality. Вя сС ΡΡŠΡΡ‚ΠΎΠΈ ΠΎΡ‚ Ρ€Π΅Ρ‡Π½ΠΈΠΊ с мноТСство Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ€Π΅Π΄ΠΎΠ²Π΅ (Ρ€Π΅Π΄ΠΎΠ²Π΅ ΠΎΡ‚ ΠΊΠΎΠ»ΠΎΠ½Π°Ρ‚Π° вдясно) ΠΈ списък с ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ (Π½ΠΎΠΌΠ΅Ρ€Π° Π½Π° Ρ€Π΅Π΄ΠΎΠ²Π΅Ρ‚Π΅).

Π‘ ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Ρ‚Π΅Π·ΠΈ Π΄Π²Π΅ структури ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π²ΡŠΠ·ΡΡ‚Π°Π½ΠΎΠ²ΠΈΠΌ ΠΈΠ·Ρ…ΠΎΠ΄Π½Π°Ρ‚Π° ΠΊΠΎΠ»ΠΎΠ½Π°. Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° ΠΈΠΌΠ° обратния индСкс β€” Ρ…Π΅Ρˆ-Ρ‚Π°Π±Π»ΠΈΡ†Π°, която ΠΏΠΎΠΌΠ°Π³Π° Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΠΌ позиция Π² Ρ€Π΅Ρ‡Π½ΠΈΠΊΠ° ΠΏΠΎ Ρ€Π΅Π΄Π°. Вя Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° Π·Π° ускоряванС Π½Π° някои запитвания. НапримСр, Π°ΠΊΠΎ искамС Π΄Π° сравним, Π΄Π° ΠΏΠΎΡ‚ΡŠΡ€ΡΠΈΠΌ Ρ€Π΅Π΄ Π² Π½Π°ΡˆΠ°Ρ‚Π° ΠΊΠΎΠ»ΠΎΠ½Π° ΠΈΠ»ΠΈ Π΄Π° Π³ΠΈ слССм.

LowCardinality Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΡ‡Π΅Π½ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½ΠΈ. Π’ΠΎΠΉ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΈΠ»ΠΈ число, ΠΈΠ»ΠΈ Π½Π΅Ρ‰ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° ΠΊΠ°Ρ‚ΠΎ число, ΠΈΠ»ΠΈ Π½ΠΈΠ·, ΠΈΠ»ΠΈ Nullable ΠΎΡ‚ тях.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° Ρ€Π΅Π΄ΠΎΠ²Π΅Ρ‚Π΅ Π² ClickHouse. Π”ΠΎΠΊΠ»Π°Π΄ Π½Π° ЯндСкс

ΠžΡΠΎΠ±Π΅Π½ΠΎΡΡ‚Ρ‚Π° Π½Π° LowCardinality Π΅, Ρ‡Π΅ Ρ‚ΠΎΠΉ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π·Π°ΠΏΠ°Π·Π²Π° Π·Π° някои Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. На слайда сС Π²ΠΈΠΆΠ΄Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° Π·Π°ΠΏΠΈΡ‚Π²Π°Π½Π΅. Π’ ΠΏΡŠΡ€Π²ΠΈΡ Ρ€Π΅Π΄ ΡΡŠΠ·Π΄Π°Π΄ΠΎΡ… ΠΊΠΎΠ»ΠΎΠ½Π° ΠΎΡ‚ Ρ‚ΠΈΠΏ LowCardinality ΠΎΡ‚ String, Π½Π°Ρ€Π΅ΠΊΠΎΡ… я S. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° ΠΏΠΎΠΏΠΈΡ‚Π°Ρ… Π·Π° ΠΈΠΌΠ΅Ρ‚ΠΎ ΠΉ β€” ClickHouse ΠΊΠ°Π·Π°, Ρ‡Π΅ Ρ‚ΠΎΠ²Π° Π΅ LowCardinality ΠΎΡ‚ String. Всичко Π΅ Π²Π΅Ρ€Π½ΠΎ.

ВрСтият Ρ€Π΅Π΄ Π΅ ΠΏΠΎΡ‡Ρ‚ΠΈ ΡΡŠΡ‰ΠΈΡΡ‚, само Ρ‡Π΅ ΠΈΠ·Π²ΠΈΠΊΠ°Ρ…ΠΌΠ΅ функцията length. Π’ ClickHouse функцията length Π²Ρ€ΡŠΡ‰Π° Ρ‚ΠΈΠΏ Π΄Π°Π½Π½ΠΈ UInt64. Но сСга ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ…ΠΌΠ΅ LowCardinality ΠΎΡ‚ UInt64. Какъв Π΅ ΡΠΌΠΈΡΡŠΠ»ΡŠΡ‚?

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° Ρ€Π΅Π΄ΠΎΠ²Π΅Ρ‚Π΅ Π² ClickHouse. Π”ΠΎΠΊΠ»Π°Π΄ Π½Π° ЯндСкс

Π’ Ρ€Π΅Ρ‡Π½ΠΈΠΊΠ° бяха ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈ ΠΈΠΌΠ΅Π½Π°Ρ‚Π° Π½Π° ΠΌΠΎΠ±ΠΈΠ»Π½ΠΈ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ΠΈ, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈΡ…ΠΌΠ΅ функцията length. Π‘Π΅Π³Π° ΠΈΠΌΠ°ΠΌΠ΅ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π΅Π½ Ρ€Π΅Ρ‡Π½ΠΈΠΊ, ΡΡŠΡΡ‚ΠΎΡΡ‰ сС само ΠΎΡ‚ числа β€” Ρ‚ΠΎΠ²Π° са Π΄ΡŠΠ»ΠΆΠΈΠ½ΠΈΡ‚Π΅ Π½Π° Ρ€Π΅Π΄ΠΎΠ²Π΅Ρ‚Π΅. Π‘Ρ‚ΡŠΠ»Π±Π΅Ρ†ΡŠΡ‚ с ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈΡ‚Π΅ Π½Π΅ сС ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ. Π’ ΠΊΡ€Π°ΠΉΠ½Π° смСтка ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΈΡ…ΠΌΠ΅ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ Π΄Π°Π½Π½ΠΈ, спСстихмС Π²Ρ€Π΅ΠΌΠ΅ ΠΏΡ€ΠΈ Π·Π°ΠΏΠΈΡ‚Π²Π°Π½Π΅Ρ‚ΠΎ.

ΠœΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ добавянСто Π½Π° прост кСш. ΠŸΡ€ΠΈ изчисляванСто Π½Π° стойността Π½Π° функция ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° я Π·Π°ΠΏΠΎΠΌΠ½ΠΈΠΌ ΠΈ Π΄Π° ΡΡŠΡΡ‚Π°Π²ΠΈΠΌ ΡΡŠΡ‰Π°Ρ‚Π°, Π±Π΅Π· Π΄Π° я изчислявамС ΠΎΡ‚Π½ΠΎΠ²ΠΎ.

Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π½Π°ΠΏΡ€Π°Π²Π΅Π½Π° оптимизация Π½Π° GROUP BY, Π·Π°Ρ‰ΠΎΡ‚ΠΎ Π½Π°ΡˆΠ°Ρ‚Π° ΠΊΠΎΠ»ΠΎΠ½Π° с Ρ€Π΅Ρ‡Π½ΠΈΠΊΠ° Π²Π΅Ρ‡Π΅ Π΅ частично Π°Π³Ρ€Π΅Π³ΠΈΡ€Π°Π½Π° β€” ΠΌΠΎΠΆΠ΅ ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΎ Π΄Π° сС изчисляват стойноститС Π½Π° Ρ…Π΅Ρˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅ ΠΈ ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»Π½ΠΎ Π΄Π° сС Π½Π°ΠΌΠΈΡ€Π° bucket, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ Π΄Π° сС постави новия Ρ€Π΅Π΄. ОсвСн Ρ‚ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° спСциализиратС някои Π°Π³Ρ€Π΅Π³Π°Ρ‚Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ uniq, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π² нСя ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈ само Ρ€Π΅Ρ‡Π½ΠΈΠΊ, Π° ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈΡ‚Π΅ Π΄Π° останат нСдокоснати β€” Ρ‚Π°ΠΊΠ° всичко Ρ‰Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΎ. ΠŸΡŠΡ€Π²ΠΈΡ‚Π΅ Π΄Π²Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π²Π΅Ρ‡Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ…ΠΌΠ΅ Π² ClickHouse.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° Ρ€Π΅Π΄ΠΎΠ²Π΅Ρ‚Π΅ Π² ClickHouse. Π”ΠΎΠΊΠ»Π°Π΄ Π½Π° ЯндСкс

Ами, ΠΊΠ°ΠΊΠ²ΠΎ Ρ‰Π΅ станС, Π°ΠΊΠΎ създадСм ΠΊΠΎΠ»ΠΎΠ½Π° с нашия Ρ‚ΠΈΠΏ Π΄Π°Π½Π½ΠΈ ΠΈ вмъкнСм Π² нСя ΠΌΠ½ΠΎΠ³ΠΎ лоши Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ€Π΅Π΄ΠΎΠ²Π΅? Няма Π»ΠΈ Π΄Π° прСнасити ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° Π½ΠΈ? НС, Π·Π° Ρ‚ΠΎΠ²Π° Π² ClickHouse ΠΈΠΌΠ° Π΄Π²Π΅ спСциални настройки. ΠŸΡŠΡ€Π²Π°Ρ‚Π° Π΅ low_cardinality_max_dictionary_size. Π’ΠΎΠ²Π° Π΅ максималният Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π° Ρ€Π΅Ρ‡Π½ΠΈΠΊΠ°, ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС записан Π½Π° диска. Π’ΠΌΡŠΠΊΠ²Π°Π½Π΅Ρ‚ΠΎ ΠΏΡ€ΠΎΡ‚ΠΈΡ‡Π° ΠΏΠΎ слСдния Π½Π°Ρ‡ΠΈΠ½: ΠΊΠΎΠ³Π°Ρ‚ΠΎ вмъквамС Π΄Π°Π½Π½ΠΈ, ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΌΠ΅ ΠΏΠΎΡ‚ΠΎΠΊ ΠΎΡ‚ Ρ€Π΅Π΄ΠΎΠ²Π΅, ΠΎΡ‚ ΠΊΠΎΠΈΡ‚ΠΎ Ρ„ΠΎΡ€ΠΌΠΈΡ€Π°ΠΌΠ΅ голям ΠΎΠ±Ρ‰ Ρ€Π΅Ρ‡Π½ΠΈΠΊ. Ако Ρ€Π΅Ρ‡Π½ΠΈΠΊΡŠΡ‚ станС ΠΏΠΎ-голям ΠΎΡ‚ стойността Π½Π° настройката, записвамС тСкущия Ρ€Π΅Ρ‡Π½ΠΈΠΊ Π½Π° диска, Π° останалитС Ρ€Π΅Π΄ΠΎΠ²Π΅ – някъдС β€žΠΎΡ‚ΡΡ‚Ρ€Π°Π½ΠΈβ€œ, Π΄ΠΎ индСкситС. Π’ ΠΊΡ€Π°ΠΉΠ½Π° смСтка Π½ΠΈΠΊΠΎΠ³Π° Π½Π΅ Ρ‰Π΅ прСизчислим голям Ρ€Π΅Ρ‡Π½ΠΈΠΊ ΠΈ няма Π΄Π° срСщнСм ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ с ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°.

Π’Ρ‚ΠΎΡ€Π°Ρ‚Π° настройка сС Π½Π°Ρ€ΠΈΡ‡Π° low_cardinality_use_single_dictionary_for_part. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π΅Ρ‚Π΅ си, Ρ‡Π΅ Π² ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½Π°Ρ‚Π° схСма, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π²ΠΌΡŠΠΊΠ²Π°Ρ…ΠΌΠ΅ Π΄Π°Π½Π½ΠΈ, Π½Π°ΡˆΠΈΡΡ‚ Ρ€Π΅Ρ‡Π½ΠΈΠΊ Π΅ прСнаситСн ΠΈ смС Π³ΠΎ записали Π½Π° диска. Π’ΡŠΠΏΡ€ΠΎΡΡŠΡ‚ Π΅, Π·Π°Ρ‰ΠΎ сСга Π΄Π° Π½Π΅ Ρ„ΠΎΡ€ΠΌΠΈΡ€Π°ΠΌΠ΅ ΠΎΡ‰Π΅ Π΅Π΄ΠΈΠ½ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΡŠΠ² Ρ€Π΅Ρ‡Π½ΠΈΠΊ?

ΠšΠΎΠ³Π°Ρ‚ΠΎ Ρ‚ΠΎΠΉ сС прСнасити, ΠΎΡ‚Π½ΠΎΠ²ΠΎ Ρ‰Π΅ Π³ΠΎ запишСм Π½Π° диска ΠΈ Ρ‰Π΅ Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌ Π΄Π° Ρ„ΠΎΡ€ΠΌΠΈΡ€Π°ΠΌΠ΅ Ρ‚Ρ€Π΅Ρ‚ΠΈ. Π’Π°Π·ΠΈ настройка ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π²Π° Ρ‚Π°ΠΊΠ°Π²Π° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅.

Π’ΡΡŠΡ‰Π½ΠΎΡΡ‚ ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π΅Ρ‡Π½ΠΈΡ†ΠΈ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½ΠΈ, Π°ΠΊΠΎ искамС Π΄Π° вмъкнСм ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ мноТСство Ρ€Π΅Π΄ΠΎΠ²Π΅, Π½ΠΎ случайно смС вмъкнали β€žΠ±ΠΎΠΊΠ»ΡƒΠΊβ€œ. Π”Π° ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Π΅ ΠΏΡŠΡ€Π²ΠΎ Π²ΠΌΡŠΠΊΠ½Π°Ρ…ΠΌΠ΅ лоши Ρ€Π΅Π΄ΠΎΠ²Π΅, Π° послС Π΄ΠΎΠ±Ρ€ΠΈ. Π’ΠΎΠ³Π°Π²Π° Ρ€Π΅Ρ‡Π½ΠΈΠΊΡŠΡ‚ Ρ‰Π΅ сС Ρ€Π°Π·Π΄Π΅Π»ΠΈ Π½Π° ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ°Π»ΠΊΠΈ Ρ€Π΅Ρ‡Π½ΠΈΡ†ΠΈ. Част ΠΎΡ‚ тях Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ с β€žΠ±ΠΎΠΊΠ»ΡƒΠΊβ€œ, Π½ΠΎ послСднитС Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ с Π΄ΠΎΠ±Ρ€ΠΈ Ρ€Π΅Π΄ΠΎΠ²Π΅. И Π°ΠΊΠΎ ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅ΠΌ, Π΄Π° ΠΊΠ°ΠΆΠ΅ΠΌ, само послСдното Π·ΡŠΡ€Π½ΠΎ, всичко ΠΏΠ°ΠΊ Ρ‰Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈ Π±ΡŠΡ€Π·ΠΎ.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° Ρ€Π΅Π΄ΠΎΠ²Π΅Ρ‚Π΅ Π² ClickHouse. Π”ΠΎΠΊΠ»Π°Π΄ Π½Π° ЯндСкс

ΠŸΡ€Π΅Π΄ΠΈ Π΄Π° обсъдим прСдимствата Π½Π° LowCardinality, Π²Π΅Π΄Π½Π°Π³Π° Ρ‰Π΅ ΠΊΠ°ΠΆΠ°, Ρ‡Π΅ вряд Π»ΠΈ Ρ‰Π΅ постигнСм намаляванС Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π½Π° диска (Π²ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ Ρ‚ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° сС случи), Π·Π°Ρ‰ΠΎΡ‚ΠΎ ClickHouse компрСсира Π΄Π°Π½Π½ΠΈΡ‚Π΅. Има стандартСн Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ – LZ4. МоТС ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ компрСсия с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ZSTD. Но ΠΈ Π΄Π²Π°Ρ‚Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌΠ° Π²Π΅Ρ‡Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Ρ‚ Ρ€Π΅Ρ‡Π½ΠΈΠΊΠΎΠ²Π° компрСсия, Π·Π°Ρ‚ΠΎΠ²Π° Π½Π°ΡˆΠΈΡΡ‚ външСн Ρ€Π΅Ρ‡Π½ΠΈΠΊ ClickHouse Π½Π΅ Π±ΠΈ Π±ΠΈΠ» ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Π΅Π·Π΅Π½.

Π—Π° Π΄Π° Π½Π΅ бъда голословСн, Π²Π·Π΅Ρ… някои Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠ°Ρ‚Π° β€” String, LowCardinality(String) ΠΈ Enum β€” ΠΈ Π³ΠΈ записах Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ‚ΠΈΠΏΠΎΠ²Π΅ Π΄Π°Π½Π½ΠΈ. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ…Π° сС Ρ‚Ρ€ΠΈ ΠΊΠΎΠ»ΠΎΠ½ΠΈ, Π² ΠΊΠΎΠΈΡ‚ΠΎ са записани Π΅Π΄ΠΈΠ½ ΠΌΠΈΠ»ΠΈΠ°Ρ€Π΄ Ρ€Π΅Π΄Π°. Π’ ΠΏΡŠΡ€Π²Π°Ρ‚Π° ΠΊΠΎΠ»ΠΎΠ½Π°, CodePage, ΠΈΠΌΠ° само 62 стойности. И Π΅ Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Π΅ Π² LowCardinality(String) компрСсията Π΅ ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π°. String Π΅ ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-Π·Π»Π΅, Π½ΠΎ Ρ‚ΠΎΠ²Π° вСроятно Π΅ Π·Π°Ρ€Π°Π΄ΠΈ Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ Π½ΠΈΠ·ΠΎΠ²Π΅Ρ‚Π΅ са ΠΊΡ€Π°Ρ‚ΠΊΠΈ, Π½ΠΈΠ΅ Π·Π°ΠΏΠ°Π·Π²Π°ΠΌΠ΅ Ρ‚Π΅Ρ…Π½ΠΈΡ‚Π΅ дълТини, Π° Ρ‚Π΅ Π·Π°Π΅ΠΌΠ°Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ място ΠΈ Π½Π΅ сС компрСсират Π΄ΠΎΠ±Ρ€Π΅.

Ако Π²Π·Π΅ΠΌΠ΅ΠΌ PhoneModel, Ρ‚Π΅ са 48 хиляди β€” Π²Π΅Ρ‡Π΅ ΠΏΠΎΠ²Π΅Ρ‡Π΅, ΠΈ Ρ€Π°Π·Π»ΠΈΠΊΠ°Ρ‚Π° ΠΌΠ΅ΠΆΠ΄Ρƒ String ΠΈ LowCardinality(String) ΠΏΠΎΡ‡Ρ‚ΠΈ Π½Π΅ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°. Π—Π° URL ΡΡŠΡ‰ΠΎ спСстихмС само 2 GB β€” мисля, Π½Π΅ си струва Π΄Π° сС Ρ€Π°Π·Ρ‡ΠΈΡ‚Π° Π½Π° Ρ‚ΠΎΠ²Π°.

ΠžΡ†Π΅Π½ΠΊΠ° Π½Π° скоростта Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° Ρ€Π΅Π΄ΠΎΠ²Π΅Ρ‚Π΅ Π² ClickHouse. Π”ΠΎΠΊΠ»Π°Π΄ Π½Π° ЯндСкс
Π›ΠΈΠ½ΠΊ ΠΎΡ‚ слайда

Π‘Π΅Π³Π° Ρ‰Π΅ ΠΎΡ†Π΅Π½ΠΈΠΌ скоростта Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°. Π—Π° Π΄Π° я оцСня, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ… датасСт с описаниС Π½Π° таксимСтрови ΠΏΡŠΡ‚ΡƒΠ²Π°Π½ΠΈΡ Π² Ню Π™ΠΎΡ€ΠΊ. Π’ΠΎΠΉ Π΅ Π½Π°Π»ΠΈΡ‡Π΅Π½ Π΅ Π½Π° GitHub. Π’ Π½Π΅Π³ΠΎ ΠΈΠΌΠ° ΠΌΠ°Π»ΠΊΠΎ Π½Π°Π΄ Π΅Π΄ΠΈΠ½ ΠΌΠΈΠ»ΠΈΠ°Ρ€Π΄ ΠΏΡŠΡ‚ΡƒΠ²Π°Π½ΠΈΡ. ΠžΡ‚Ρ€Π°Π·Π΅Π½ΠΈ са мСстополоТСниСто, Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π½Π° Π½Π°Ρ‡Π°Π»ΠΎ ΠΈ ΠΊΡ€Π°ΠΉ Π½Π° ΠΏΡŠΡ‚ΡƒΠ²Π°Π½Π΅Ρ‚ΠΎ, Π½Π°Ρ‡ΠΈΠ½ Π½Π° ΠΏΠ»Π°Ρ‰Π°Π½Π΅, Π±Ρ€ΠΎΠΉ ΠΏΡŠΡ‚Π½ΠΈΡ†ΠΈ ΠΈ Π΄ΠΎΡ€ΠΈ Π²ΠΈΠ΄ΡŠΡ‚ такси β€” Π·Π΅Π»Π΅Π½ΠΎ, ΠΆΡŠΠ»Ρ‚ΠΎ ΠΈ Uber.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° Ρ€Π΅Π΄ΠΎΠ²Π΅Ρ‚Π΅ Π² ClickHouse. Π”ΠΎΠΊΠ»Π°Π΄ Π½Π° ЯндСкс

ΠŸΡŠΡ€Π²ΠΈΡΡ‚ Π·Π°ΠΏΠΈΡ‚Π²Π°Ρ… Π½Π°ΠΏΡ€Π°Π²ΠΈΡ… доста прост β€” ΠΏΠΎΠΏΠΈΡ‚Π°Ρ… къдС Π½Π°ΠΉ-чСсто ΠΏΠΎΡ€ΡŠΡ‡Π²Π°Ρ‚ такси. Π—Π° Ρ‚ΠΎΠ²Π° трябва Π΄Π° Π²Π·Π΅ΠΌΠ° мСстополоТСниСто, ΠΎΡ‚ ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ ΠΏΡ€Π°Π²Π΅Π½Π° ΠΏΠΎΡ€ΡŠΡ‡ΠΊΠ°Ρ‚Π°, Π΄Π° направя ΠΏΠΎ Π½Π΅Π³ΠΎ GROUP BY ΠΈ Π΄Π° изчисля функцията count. Π•Ρ‚ΠΎ ΠΊΠ°ΠΊΠ²ΠΎ Π΄Π°Π²Π° ClickHouse.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° Ρ€Π΅Π΄ΠΎΠ²Π΅Ρ‚Π΅ Π² ClickHouse. Π”ΠΎΠΊΠ»Π°Π΄ Π½Π° ЯндСкс

Π—Π° Π΄Π° измСря скоростта Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π·Π°ΠΏΠΈΡ‚Π²Π°Π½Π΅Ρ‚ΠΎ, ΡΡŠΠ·Π΄Π°Π΄ΠΎΡ… Ρ‚Ρ€ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†ΠΈ с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΈ Π΄Π°Π½Π½ΠΈ, Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ… Ρ‚Ρ€ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½ΠΈ Π·Π° Π½Π°ΡˆΠ΅Ρ‚ΠΎ стартово мСстополоТСниС β€” String, LowCardinality ΠΈ Enum. LowCardinality ΠΈ Enum сС ΠΎΠΊΠ°Π·Π°Ρ…Π° ΠΏΠ΅Ρ‚ ΠΏΡŠΡ‚ΠΈ ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΈ ΠΎΡ‚ String. Enum Π΅ ΠΏΠΎ-Π±ΡŠΡ€Π·, Π·Π°Ρ‰ΠΎΡ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈ с числа. LowCardinality β€” Π·Π°Ρ‰ΠΎΡ‚ΠΎ Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π° оптимизация Π·Π° GROUP BY.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° Ρ€Π΅Π΄ΠΎΠ²Π΅Ρ‚Π΅ Π² ClickHouse. Π”ΠΎΠΊΠ»Π°Π΄ Π½Π° ЯндСкс

НСка услоТним Π·Π°ΠΏΠΈΡ‚Π²Π°Π½Π΅Ρ‚ΠΎ β€” Ρ‰Π΅ ΠΏΠΎΠΏΠΈΡ‚Π°ΠΌΠ΅ къдС сС Π½Π°ΠΌΠΈΡ€Π° Π½Π°ΠΉ-популярният ΠΏΠ°Ρ€ΠΊ Π² Ню Π™ΠΎΡ€ΠΊ. ΠžΡ‚Π½ΠΎΠ²ΠΎ Ρ‰Π΅ ΠΈΠ·ΠΌΠ΅Ρ€Π²Π°ΠΌΠ΅ ΠΏΠΎ Ρ‚ΠΎΠ²Π°, къдС Π½Π°ΠΉ-чСсто ΠΏΠΎΡ€ΡŠΡ‡Π²Π°Ρ‚ такси, Π½ΠΎ Ρ‰Π΅ Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π°ΠΌΠ΅ само Ρ‚Π΅Π·ΠΈ мСстополоТСния, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ ΠΈΠΌΠ° Π΄ΡƒΠΌΠ°Ρ‚Π° β€žΠΏΠ°Ρ€ΠΊβ€œ. Π©Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΈ функцията like.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° Ρ€Π΅Π΄ΠΎΠ²Π΅Ρ‚Π΅ Π² ClickHouse. Π”ΠΎΠΊΠ»Π°Π΄ Π½Π° ЯндСкс

Π“Π»Π΅Π΄Π°ΠΌΠ΅ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ β€” Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅, Ρ‡Π΅ Enum извСднъТ Π·Π°ΠΏΠΎΡ‡Π½Π° Π΄Π° забавя. Вярно, Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΎΡ‰Π΅ ΠΏΠΎ-Π±Π°Π²Π½ΠΎ ΠΎΡ‚ стандартния Ρ‚ΠΈΠΏ Π΄Π°Π½Π½ΠΈ String. Π’ΠΎΠ²Π° сС случва, Π·Π°Ρ‰ΠΎΡ‚ΠΎ функцията like съвсСм Π½Π΅ Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Π½Π° Π·Π° Enum. Врябва Π΄Π° ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°ΠΌΠ΅ Π½Π°ΡˆΠΈΡ‚Π΅ Π½ΠΈΠ·ΠΎΠ²Π΅ ΠΎΡ‚ Enum Π² ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈ Π½ΠΈΠ·ΠΎΠ²Π΅ β€” ΠΏΡ€Π°Π²ΠΈΠΌ ΠΏΠΎΠ²Π΅Ρ‡Π΅ Ρ€Π°Π±ΠΎΡ‚Π°. LowCardinality(String) ΡΡŠΡ‰ΠΎ Π½Π΅ Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Π½ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅, Π½ΠΎ ΠΏΡ€ΠΈ Π½Π΅Π³ΠΎ like Ρ€Π°Π±ΠΎΡ‚ΠΈ Π²ΡŠΡ€Ρ…Ρƒ Ρ€Π΅Ρ‡Π½ΠΈΠΊΠ°, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π·Π°ΠΏΠΈΡ‚Π²Π°Π½Π΅Ρ‚ΠΎ сС ускорява Π² сравнСниС с String.

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° с Enum ΠΈΠΌΠ° ΠΏΠΎ-Π³Π»ΠΎΠ±Π°Π»Π΅Π½ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. Ако искамС Π΄Π° Π³ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅, трябва Π΄Π° Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ Π½Π° всяко място Π² ΠΊΠΎΠ΄Π°. Π”Π° ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Π΅ смС написали Π½ΠΎΠ²Π° функция β€” Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎ трябва Π΄Π° измислим оптимизация Π·Π° Enum. А ΠΏΡ€ΠΈ LowCardinality всичко Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Π½ΠΎ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° Ρ€Π΅Π΄ΠΎΠ²Π΅Ρ‚Π΅ Π² ClickHouse. Π”ΠΎΠΊΠ»Π°Π΄ Π½Π° ЯндСкс

НСка ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌ послСдното Π·Π°ΠΏΠΈΡ‚Π²Π°Π½Π΅, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ ΠΏΠΎ-изкуствСно. ΠŸΡ€ΠΎΡΡ‚ΠΎ Ρ‰Π΅ изчислим Ρ…Π΅Ρˆ-функцията Π½Π° Π½Π°ΡˆΠ΅Ρ‚ΠΎ мСстополоТСниС. Π₯Сш-функцията Π΅ доста Π±Π°Π²Π΅Π½ Π·Π°ΠΏΠΈΡ‚Π²Π°Π½Π΅, ΠΎΡ‚Π½Π΅ΠΌΠ° Π²Ρ€Π΅ΠΌΠ΅, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ всичко Ρ‰Π΅ сС Π·Π°Π±Π°Π²ΠΈ Ρ‚Ρ€ΠΈ ΠΏΡŠΡ‚ΠΈ.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° Ρ€Π΅Π΄ΠΎΠ²Π΅Ρ‚Π΅ Π² ClickHouse. Π”ΠΎΠΊΠ»Π°Π΄ Π½Π° ЯндСкс

LowCardinality всС ΠΎΡ‰Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΎ, Π²ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ Ρ‚ΡƒΠΊ няма Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈΡ€Π°Π½Π΅. Π’ΠΎΠ²Π° сС дълТи Π½Π° Ρ„Π°ΠΊΡ‚Π°, Ρ‡Π΅ Π½Π°ΡˆΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ работят само със справочника. Ѐункцията Π·Π° изчисляванС Π½Π° Ρ…Π΅Ρˆ ΠΈΠΌΠ° Π΅Π΄ΠΈΠ½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ β€” ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π° ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ Π΄Π°Π½Π½ΠΈ ΠΈ ΡΡŠΡ‰ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π²ΡŠΡ€Π½Π΅ LowCardinality.

ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ Π½Π° Ρ€Π΅Π΄ΠΎΠ²Π΅Ρ‚Π΅ Π² ClickHouse. Π”ΠΎΠΊΠ»Π°Π΄ Π½Π° ЯндСкс

ΠΠ°ΡˆΠΈΡΡ‚ Π³Π»ΠΎΠ±Π°Π»Π΅Π½ ΠΏΠ»Π°Π½ Π΅ Π΄Π° постигнСм скорост Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° Π½Π΅ ΠΏΠΎ-ниска ΠΎΡ‚ String ΠΏΡ€ΠΈ всички случаи ΠΈ Π΄Π° Π·Π°ΠΏΠ°Π·ΠΈΠΌ ускорСнията. И, ΠΌΠΎΠΆΠ΅ Π±ΠΈ, някога Ρ‰Π΅ Π·Π°ΠΌΠ΅Π½ΠΈΠΌ String с LowCardinality, Π²ΠΈΠ΅ Ρ‰Π΅ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚Π΅ ClickHouse ΠΈ всичко Ρ‰Π΅ Π·Π°Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΎ.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster