рдбреЗрдЯрд╛ рдЗрдВрдЬреАрдирд┐рдпрд░ рдХреЛрд░реНрд╕ рдХреЗ рдЫрд╛рддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд▓реЗрдЦ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
ClickHouse рдПрдХ рдУрдкрди рд╕реЛрд░реНрд╕ рдХреЙрд▓рдо рдбреЗрдЯрд╛рдмреЗрд╕ рд╣реИред рдпрд╣ рдПрдХ рдорд╣рд╛рди рд╡рд╛рддрд╛рд╡рд░рдг рд╣реИ рдЬрд╣рд╛рдВ рд╕реИрдХрдбрд╝реЛрдВ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдкреНрд░рддрд┐рджрд┐рди рд╡рд┐рд╕реНрддреГрдд рдбреЗрдЯрд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддрдм рднреА рдЬрдм рдкреНрд░рддрд┐ рджрд┐рди рджрд╕рд┐рдпреЛрдВ рдЕрд░рдмреЛрдВ рдирдИ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдБ рдкреЗрд╢ рдХреА рдЬрд╛ рд░рд╣реА рд╣реЛрдВред рдЗрд╕ рддрд░рд╣ рдХреА рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреА рд▓рд╛рдЧрдд рдкреНрд░рддрд┐ рд╡рд░реНрд╖ 100 рд╣рдЬрд╛рд░ рдЕрдореЗрд░рд┐рдХреА рдбреЙрд▓рд░ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреА рд╣реИ, рдФрд░ рд╕рдВрднрд╡рддрдГ рдЖрдзреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реИред рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░, Yandex.Metrica ClickHouse рд╕реНрдерд╛рдкрдирд╛ рдореЗрдВ 10 рдЯреНрд░рд┐рд▓рд┐рдпрди рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдБ рдереАрдВред рдпреИрдВрдбреЗрдХреНрд╕ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреНрд▓рд┐рдХрд╣рд╛рдЙрд╕ рдиреЗ рдмреНрд▓реВрдордмрд░реНрдЧ рдФрд░ рдХреНрд▓рд╛рдЙрдбрдлреНрд▓реЗрдпрд░ рдХреЗ рд╕рд╛рде рднреА рд╕рдлрд▓рддрд╛ рдкреНрд░рд╛рдкреНрдд рдХреАред
рджреЛ рд╕рд╛рд▓ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рдПрдХрд▓ рдорд╢реАрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛
рддреБрд▓рдирд╛рддреНрдордХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рдпрд╛ рдерд╛, рдФрд░ рдпрд╣
рд╕рдмрд╕реЗ рддреЗрдЬ рдореБрдХреНрдд рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдмрди рдЧрдпрд╛ рд╣реИ
рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдХрднреА рджреЗрдЦрд╛ рд╣реИред рддрдм рд╕реЗ, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдмрдВрдж рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдХрд╛рдлреНрдХрд╛, рдПрдЪрдбреАрдПрдлрдПрд╕ рдФрд░ рдЬреЗрдбрд╕реНрдЯреНрд░реАрдо рдХрдореНрдкреНрд░реЗрд╢рди рдХрд╛ рд╕рдорд░реНрдерди рд╢рд╛рдорд┐рд▓ рд╣реИред рдкрд┐рдЫрд▓реЗ рд╕рд╛рд▓, рдЙрдиреНрд╣реЛрдВрдиреЗ рдХреИрд╕реНрдХреЗрдбрд┐рдВрдЧ рд╕рдВрдкреАрдбрд╝рди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рд╛, рдФрд░
рдбреЗрд▓реНрдЯрд╛-рдбреЗрд▓реНрдЯрд╛ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рд╕рдВрднрд╡ рд╣реЛ рдЧрдпрд╛ред рд╕рдордп рд╢реНрд░реГрдВрдЦрд▓рд╛ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд░рддреЗ рд╕рдордп, рдЧреЗрдЬ рдорд╛рди рдбреЗрд▓реНрдЯрд╛ рдХреЛрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд╛рдЙрдВрдЯрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдбреЗрд▓реНрдЯрд╛-рдбреЗрд▓реНрдЯрд╛ рдХреЛрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ред рдЕрдЪреНрдЫрд╛ рд╕рдВрдкреАрдбрд╝рди ClickHouse рдкреНрд░рджрд░реНрд╢рди рдХреА рдХреБрдВрдЬреА рдмрди рдЧрдпрд╛ рд╣реИред
ClickHouse рдореЗрдВ C ++ рдХреЛрдб рдХреА 170 рд╣рдЬрд╛рд░ рд▓рд╛рдЗрдиреЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде, рдФрд░ рд╡рд┐рддрд░рд┐рдд рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЫреЛрдЯреЗ рдХреЛрдб рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП, SQLite рд╡рд┐рддрд░рдг рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕реА рднрд╛рд╖рд╛ рдореЗрдВ рдХреЛрдб рдХреА 235 рд╣рдЬрд╛рд░ рд▓рд╛рдЗрдиреЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдЗрд╕ рд▓реЗрдЦрди рдХреЗ рд╕рдордп, 207 рдЗрдВрдЬреАрдирд┐рдпрд░реЛрдВ рдиреЗ рдХреНрд▓рд┐рдХрд╣рд╛рдЙрд╕ рдореЗрдВ рдпреЛрдЧрджрд╛рди рджрд┐рдпрд╛ рд╣реИ, рдФрд░ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЖрд╡рд╛рдЧрдорди рдХреА рддреАрд╡реНрд░рддрд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рд╣реБрдИ рд╣реИред
рдорд╛рд░реНрдЪ 2017 рдореЗрдВ, ClickHouse рдиреЗ рд╡рд┐рдХрд╛рд╕ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ
рдкрд░рд┐рд╡рд░реНрддрди рд▓реЙрдЧ рд╢реБрд░реВ рдХрд┐рдпрд╛ред рд╡реЗ рдПрдХ рдорд╛рд░реНрдХреЛрдбрд╛рдЙрди-рдЖрдзрд╛рд░рд┐рдд рдлрд╝рд╛рдЗрд▓ рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рдЕрдЦрдВрдб рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдлрд╝рд╛рдЗрд▓ рдХреЛ рднреА рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд╕рдорд╕реНрдпрд╛рдУрдВ рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдЧрд┐рдЯрд╣рдм рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЯреНрд░реИрдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░ рдпрд╣ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдкрд┐рдЫрд▓реЗ рдХреБрдЫ рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕реБрд▓рдн рд╣реЛ рдЧрдпрд╛ рд╣реИред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ 36-рдХреЛрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рдФрд░ рдПрдХ NVM рдбреНрд░рд╛рдЗрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ AWS EC2 рдкрд░ ClickHouse рдХреНрд▓рд╕реНрдЯрд░ рдкреНрд░рджрд░реНрд╢рди рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред
рдЕрджреНрдпрддрди: рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкреНрд░рдХрд╛рд╢рди рдХреЗ рдПрдХ рд╕рдкреНрддрд╛рд╣ рдмрд╛рдж, рдореИрдВрдиреЗ рдПрдХ рдмреЗрд╣рддрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдпрд╛ рдФрд░ рдмрд╣реБрдд рдмреЗрд╣рддрд░ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд┐рдПред рдЗрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
AWS EC2 рдХреНрд▓рд╕реНрдЯрд░ рд╢реБрд░реВ рдХрд░рдирд╛
рдореИрдВ рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЗ рд▓рд┐рдП c5d.9xlarge EC2 рдХреЗ рддреАрди рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ 36 рд╡рд░реНрдЪреБрдЕрд▓ рд╕реАрдкреАрдпреВ, 72 рдЬреАрдмреА рд░реИрдо, 900 рдЬреАрдмреА рдХрд╛ рдПрдирд╡реАрдПрдордИ рдПрд╕рдПрд╕рдбреА рдФрд░ 10-рдЧреАрдЧрд╛рдмрд┐рдЯ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛ рд╕рдорд░реНрдерди рд╣реИред рдЬрдм рдорд╛рдВрдЧ рдкрд░ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╡реЗ рдпреВрд░реЛрдк-рдкрд╢реНрдЪрд┐рдо -1 рдХреНрд╖реЗрддреНрд░ рдореЗрдВ $ 1,962 / рдШрдВрдЯрд╛ рдЦрд░реНрдЪ рдХрд░рддреЗ рд╣реИрдВред рдореИрдВ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд░реВрдк рдореЗрдВ Ubuntu рд╕рд░реНрд╡рд░ 16.04 LTS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред
рдлрд╝рд╛рдпрд░рд╡реЙрд▓ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рддрд╛рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдорд╢реАрди рдкреНрд░рддрд┐рдмрдВрдз рдХреЗ рдмрд┐рдирд╛ рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░ рд╕рдХреЗ, рдФрд░ рдХреЗрд╡рд▓ рдореЗрд░реЗ рдЖрдИрдкреАрд╡реА 4 рдкрддреЗ рдХреЛ рдПрд╕рдПрд╕рдПрдЪ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рд╢реНрд╡реЗрддрд╕реВрдЪреАрдмрджреНрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд░реЗрдбреА-рдЯреВ-рдпреВрдЬрд╝ NVMe
рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ClickHouse рдХреЗ рд▓рд┐рдП, рдореИрдВ NVMe рдбреНрд░рд╛рдЗрд╡ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╕рд░реНрд╡рд░ рдкрд░ рдПрдХ EXT4 рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдмрдирд╛рдКрдВрдЧрд╛ред
$ sudo mkfs -t ext4 /dev/nvme1n1 $ sudo mkdir /ch $ sudo mount /dev/nvme1n1 /ch
рд╕рдм рдХреБрдЫ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдорд╛рдЙрдВрдЯ рдкреЙрдЗрдВрдЯ рдФрд░ 783 рдЬреАрдмреА рд╕реНрдкреЗрд╕ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT loop0 7:0 0 87.9M 1 loop /snap/core/5742 loop1 7:1 0 16.5M 1 loop /snap/amazon-ssm-agent/784 nvme0n1 259:1 0 8G 0 disk тФФтФАnvme0n1p1 259:2 0 8G 0 part / nvme1n1 259:0 0 838.2G 0 disk /ch
$ df -h
Filesystem Size Used Avail Use% Mounted on udev 35G 0 35G 0% /dev tmpfs 6.9G 8.8M 6.9G 1% /run /dev/nvme0n1p1 7.7G 967M 6.8G 13% / tmpfs 35G 0 35G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 35G 0 35G 0% /sys/fs/cgroup /dev/loop0 88M 88M 0 100% /snap/core/5742 /dev/loop1 17M 17M 0 100% /snap/amazon-ssm-agent/784 tmpfs 6.9G 0 6.9G 0% /run/user/1000 /dev/nvme1n1 825G 73M 783G 1% /ch
рдЗрд╕ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдореИрдВ рдЬрд┐рд╕ рдбреЗрдЯрд╛рд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ рд╡рд╣ рдЫрд╣ рд╕рд╛рд▓ рдореЗрдВ рдиреНрдпреВрдпреЙрд░реНрдХ рдореЗрдВ рдмрдиреА 1.1 рдмрд┐рд▓рд┐рдпрди рдЯреИрдХреНрд╕реА рдХреА рд╕рд╡рд╛рд░реА рд╕реЗ рдЙрддреНрдкрдиреНрди рдбреЗрдЯрд╛ рдбрдВрдк рд╣реИред рдж
рдмрд┐рд▓рд┐рдпрди рдЯреИрдХреНрд╕реА рдмреНрд▓реЙрдЧ
рдСрди рдж
рд░реЗрдбрд╢рд┐рдлреНрдЯ рдбрд┐рдЯреЗрд▓реНрд╕ рдореЗрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдореИрдВрдиреЗ рдЗрд╕ рдбреЗрдЯрд╛ рд╕реЗрдЯ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ред рд╡реЗ рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рдПрд╕ 3 рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЕрдкрдиреА рдкрд╣реБрдВрдЪ рдФрд░ рдирд┐рдЬреА рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реВрдВрдЧрд╛ред
$ sudo apt update $ sudo apt install awscli $ aws configure
рдореИрдВ рдПрдХ рд╕рд╛рде рдХреНрд▓рд╛рдЗрдВрдЯ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рд╕реАрдорд╛ рдХреЛ 100 рдкрд░ рд╕реЗрдЯ рдХрд░ рджреВрдВрдЧрд╛ рддрд╛рдХрд┐ рдлрд╛рдЗрд▓реЗрдВ рдорд╛рдирдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬреА рд╕реЗ рд▓реЛрдб рд╣реЛ рд╕рдХреЗрдВред
$ aws configure set \ default.s3.max_concurrent_requests \ 100
рдореИрдВ AWS S3 рд╕реЗ рдЯреИрдХреНрд╕реА рд░рд╛рдЗрдб рдбреЗрдЯрд╛рд╕реЗрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реВрдВрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╕рд░реНрд╡рд░ рдкрд░ NVMe рдбреНрд░рд╛рдЗрд╡ рдкрд░ рд╕реЗрд╡ рдХрд░реВрдВрдЧрд╛ред рдпрд╣ рдбреЗрдЯрд╛рд╕реЗрдЯ GZIP-рд╕рдВрдХреБрдЪрд┐рдд CSV рдкреНрд░рд╛рд░реВрдк рдореЗрдВ ~ 104 GB рд╣реИред
$ sudo mkdir -p /ch/csv $ sudo chown -R ubuntu /ch/csv $ aws s3 sync s3://<bucket>/csv /ch/csv
рдХреНрд▓рд┐рдХрд╣рд╛рдЙрд╕ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
рдореИрдВ рдЬрд╛рд╡рд╛ 8 рдХреЗ рд▓рд┐рдП OpenJDK рд╡рд┐рддрд░рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд░реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдкрд╛рдЪреЗ рдЬрд╝реВрдХреЗрдкрд░ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЬреЛ рддреАрдиреЛрдВ рдорд╢реАрдиреЛрдВ рдкрд░ ClickHouse рдХреА рд╡рд┐рддрд░рд┐рдд рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред
$ sudo apt update $ sudo apt install \ openjdk-8-jre \ openjdk-8-jdk-headless
рдлрд┐рд░ рдореИрдВрдиреЗ
JAVA_HOME
рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ред
$ sudo vi /etc/profile export JAVA_HOME=/usr $ source /etc/profile
рдлрд┐рд░ рдореИрдВ рдЙрдмрдВрдЯреВ рдореЗрдВ 18.16.1, рддреАрдиреЛрдВ рдорд╢реАрдиреЛрдВ рдкрд░ рдЧреНрд▓реВрдХрд╕ рдФрд░ рдЬрд╝реВрдХреАрдкрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреИрдХреЗрдЬ рдкреНрд░рдмрдВрдзрди рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред
$ sudo apt-key adv \
$ sudo apt install \ clickhouse-client \ clickhouse-server \ glances \ zookeeperd
рдореИрдВ ClickHouse рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдКрдВрдЧрд╛ рдФрд░ рддреАрдиреЛрдВ рд╕рд░реНрд╡рд░реЛрдВ рдкрд░ рдХреБрдЫ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдУрд╡рд░рд░рд╛рдЗрдб рднреА рдХрд░реВрдВрдЧрд╛ред
$ sudo mkdir /ch/clickhouse $ sudo chown -R clickhouse /ch/clickhouse $ sudo mkdir -p /etc/clickhouse-server/conf.d $ sudo vi /etc/clickhouse-server/conf.d/taxis.conf
рдпреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдУрд╡рд░рд░рд╛рдЗрдб рд╣реИрдВ рдЬреЛ рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред
<?xml version="1.0"?> <yandex> <listen_host>0.0.0.0</listen_host> <path>/ch/clickhouse/</path>
<remote_servers> <perftest_3shards> <shard> <replica> <host>172.30.2.192</host> <port>9000</port> </replica> </shard> <shard> <replica> <host>172.30.2.162</host> <port>9000</port> </replica> </shard> <shard> <replica> <host>172.30.2.36</host> <port>9000</port> </replica> </shard> </perftest_3shards> </remote_servers>
<zookeeper-servers> <node> <host>172.30.2.192</host> <port>2181</port> </node> <node> <host>172.30.2.162</host> <port>2181</port> </node> <node> <host>172.30.2.36</host> <port>2181</port> </node> </zookeeper-servers>
<macros> <shard>03</shard> <replica>01</replica> </macros> </yandex>
рдлрд┐рд░ рдореИрдВ рддреАрдиреЛрдВ рдорд╢реАрдиреЛрдВ рдкрд░ ZooKeeper рдФрд░ ClickHouse рд╕рд░реНрд╡рд░ рдЪрд▓рд╛рдКрдВрдЧрд╛ред
$ sudo /etc/init.d/zookeeper start $ sudo service clickhouse-server start
ClickHouse рдореЗрдВ рдбреЗрдЯрд╛ рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИ
рдкрд╣рд▓реЗ рд╕рд░реНрд╡рд░ рдкрд░, рдореИрдВ рдПрдХ рдпрд╛рддреНрд░рд╛ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдКрдВрдЧрд╛, рдЬреЛ рд▓реЙрдЧ рдЗрдВрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреИрдХреНрд╕реА рдХреА рд╕рд╡рд╛рд░реА рдХреЗ рдбреЗрдЯрд╛ рд╕реЗрдЯ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдЧрд╛ред
$ clickhouse-client
рддрдм рдореИрдВ CSV рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рдПрдХ рдЯреНрд░рд┐рдк рдЯреЗрдмрд▓ рдореЗрдВ рдЕрдирдкреИрдХ рдФрд░ рд▓реЛрдб рдХрд░рддрд╛ рд╣реВрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд 55 рдорд┐рдирдЯ рдФрд░ 10 рд╕реЗрдХрдВрдб рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдСрдкрд░реЗрд╢рди рдХреЗ рдмрд╛рдж, рдбреЗрдЯрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХрд╛ рдЖрдХрд╛рд░ 134 рдЬреАрдмреА рдерд╛ред
$ time (for FILENAME in /ch/csv/trips_x*.csv.gz; do echo $FILENAME gunzip -c $FILENAME | \ clickhouse-client \
рдЖрдпрд╛рдд рдЧрддрд┐ 155 рдПрдордмреА рдЕрд╕рдореНрдкреАрдбрд┐рдд CSV рд╕рд╛рдордЧреНрд░реА рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдереАред рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдпрд╣ GZIP рд╡рд┐рдШрдЯрди рдореЗрдВ рдПрдХ рдЕрдбрд╝рдЪрди рдХреЗ рдХрд╛рд░рдг рдерд╛ред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ xzgs рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рд╕рднреА gzip рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЕрдирдЬрд╝рд┐рдк рдХрд░рдирд╛ рдФрд░ рдлрд┐рд░ рдЕрдирдЬрд╝рд┐рдк рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЛ рд▓реЛрдб рдХрд░рдирд╛ рд╣реЛред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд CSV рдЖрдпрд╛рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди рд░рд┐рдкреЛрд░реНрдЯ рдХреА рдЧрдИ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рд╡рд┐рд╡рд░рдг рд╣реИред
$ sudo glances
ip-172-30-2-200 (Ubuntu 16.04 64bit / Linux 4.4.0-1072-aws) Uptime: 0:11:42 CPU 8.2% nice: 0.0% LOAD 36-core MEM 9.8% active: 5.20G SWAP 0.0% user: 6.0% irq: 0.0% 1 min: 2.24 total: 68.7G inactive: 61.0G total: 0 system: 0.9% iowait: 1.3% 5 min: 1.83 used: 6.71G buffers: 66.4M used: 0 idle: 91.8% steal: 0.0% 15 min: 1.01 free: 62.0G cached: 61.6G free: 0 NETWORK Rx/s Tx/s TASKS 370 (507 thr), 2 run, 368 slp, 0 oth sorted automatically by cpu_percent, flat view ens5 136b 2Kb lo 343Mb 343Mb CPU% MEM% VIRT RES PID USER NI S TIME+ IOR/s IOW/s Command 100.4 1.5 1.65G 1.06G 9909 ubuntu 0 S 1:01.33 0 0 clickhouse-client
рдореИрдВ рдЬрд╛рд░реА рд░рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕реНрд░реЛрдд CSV рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╣рдЯрд╛рдХрд░ NVMe рдбреНрд░рд╛рдЗрд╡ рдкрд░ рд╕реНрдерд╛рди рдЦрд╛рд▓реА рдХрд░ рджреВрдВрдЧрд╛ред
$ sudo rm -fr /ch/csv
рдХреЙрд▓рдо рдлреЙрд░реНрдо рдореЗрдВ рдмрджрд▓реЗрдВ
рд▓реЙрдЧ рдХреНрд▓рд┐рдХрд╣рд╛рдЙрд╕ рдЗрдВрдЬрди рдПрдХ рдкрдВрдХреНрддрд┐-рдЙрдиреНрдореБрдЦ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдЧрд╛ред рддреЗрдЬреА рд╕реЗ рдбреЗрдЯрд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЗрд╕реЗ рдорд░реНрдЬрдЯреНрд░реА рдЗрдВрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЙрд▓рдо рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реВрдВред
$ clickhouse-client
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд 34 рдорд┐рдирдЯ рдФрд░ 50 рд╕реЗрдХрдВрдб рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдСрдкрд░реЗрд╢рди рдХреЗ рдмрд╛рдж, рдбреЗрдЯрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХрд╛ рдЖрдХрд╛рд░ 237 рдЬреАрдмреА рдерд╛ред
CREATE TABLE trips_mergetree ENGINE = MergeTree(pickup_date, pickup_datetime, 8192) AS SELECT trip_id, CAST(vendor_id AS Enum8('1' = 1, '2' = 2, 'CMT' = 3, 'VTS' = 4, 'DDS' = 5, 'B02512' = 10, 'B02598' = 11, 'B02617' = 12, 'B02682' = 13, 'B02764' = 14)) AS vendor_id, toDate(pickup_datetime) AS pickup_date, ifNull(pickup_datetime, toDateTime(0)) AS pickup_datetime, toDate(dropoff_datetime) AS dropoff_date, ifNull(dropoff_datetime, toDateTime(0)) AS dropoff_datetime, assumeNotNull(store_and_fwd_flag) AS store_and_fwd_flag, assumeNotNull(rate_code_id) AS rate_code_id, assumeNotNull(pickup_longitude) AS pickup_longitude, assumeNotNull(pickup_latitude) AS pickup_latitude, assumeNotNull(dropoff_longitude) AS dropoff_longitude, assumeNotNull(dropoff_latitude) AS dropoff_latitude, assumeNotNull(passenger_count) AS passenger_count, assumeNotNull(trip_distance) AS trip_distance, assumeNotNull(fare_amount) AS fare_amount, assumeNotNull(extra) AS extra, assumeNotNull(mta_tax) AS mta_tax, assumeNotNull(tip_amount) AS tip_amount, assumeNotNull(tolls_amount) AS tolls_amount, assumeNotNull(ehail_fee) AS ehail_fee, assumeNotNull(improvement_surcharge) AS improvement_surcharge, assumeNotNull(total_amount) AS total_amount, assumeNotNull(payment_type) AS payment_type_, assumeNotNull(trip_type) AS trip_type, pickup AS pickup, pickup AS dropoff, CAST(assumeNotNull(cab_type) AS Enum8('yellow' = 1, 'green' = 2)) AS cab_type, precipitation AS precipitation, snow_depth AS snow_depth, snowfall AS snowfall, max_temperature AS max_temperature, min_temperature AS min_temperature, average_wind_speed AS average_wind_speed, pickup_nyct2010_gid AS pickup_nyct2010_gid, pickup_ctlabel AS pickup_ctlabel, pickup_borocode AS pickup_borocode, pickup_boroname AS pickup_boroname, pickup_ct2010 AS pickup_ct2010, pickup_boroct2010 AS pickup_boroct2010, pickup_cdeligibil AS pickup_cdeligibil, pickup_ntacode AS pickup_ntacode, pickup_ntaname AS pickup_ntaname, pickup_puma AS pickup_puma, dropoff_nyct2010_gid AS dropoff_nyct2010_gid, dropoff_ctlabel AS dropoff_ctlabel, dropoff_borocode AS dropoff_borocode, dropoff_boroname AS dropoff_boroname, dropoff_ct2010 AS dropoff_ct2010, dropoff_boroct2010 AS dropoff_boroct2010, dropoff_cdeligibil AS dropoff_cdeligibil, dropoff_ntacode AS dropoff_ntacode, dropoff_ntaname AS dropoff_ntaname, dropoff_puma AS dropoff_puma FROM trips;
рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рд▓реБрдХрдЕрдк рдЖрдЙрдЯрдкреБрдЯ рдСрдкрд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рджрд┐рдЦрддрд╛ рдерд╛:
ip-172-30-2-200 (Ubuntu 16.04 64bit / Linux 4.4.0-1072-aws) Uptime: 1:06:09 CPU 10.3% nice: 0.0% LOAD 36-core MEM 16.1% active: 13.3G SWAP 0.0% user: 7.9% irq: 0.0% 1 min: 1.87 total: 68.7G inactive: 52.8G total: 0 system: 1.6% iowait: 0.8% 5 min: 1.76 used: 11.1G buffers: 71.8M used: 0 idle: 89.7% steal: 0.0% 15 min: 1.95 free: 57.6G cached: 57.2G free: 0 NETWORK Rx/s Tx/s TASKS 367 (523 thr), 1 run, 366 slp, 0 oth sorted automatically by cpu_percent, flat view ens5 1Kb 8Kb lo 2Kb 2Kb CPU% MEM% VIRT RES PID USER NI S TIME+ IOR/s IOW/s Command 241.9 12.8 20.7G 8.78G 8091 clickhous 0 S 30:36.73 34M 125M /usr/bin/clickhouse-server
рдЕрдВрддрд┐рдо рдкрд░реАрдХреНрд╖рдг рдореЗрдВ, рдХрдИ рд╕реНрддрдВрднреЛрдВ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдЗрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдЗрд╕ рдбреЗрдЯрд╛рд╕реЗрдЯ рдореЗрдВ рдареАрдХ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЕрдиреБрдЪрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдФрд░ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рдмрд┐рдирд╛ рдбреЗрдЯрд╛ рдХреЛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ред
рдХреНрд▓рд╕реНрдЯрд░ рдбреЗрдЯрд╛ рд╡рд┐рддрд░рдг
рдореИрдВ рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рд╕рднреА рддреАрди рдиреЛрдбреНрд╕ рдореЗрдВ рдбреЗрдЯрд╛ рд╡рд┐рддрд░рд┐рдд рдХрд░реВрдВрдЧрд╛ред рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╕рднреА рддреАрди рдорд╢реАрдиреЛрдВ рдкрд░ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдКрдВрдЧрд╛ред
$ clickhouse-client
CREATE TABLE trips_mergetree_third ( trip_id UInt32, vendor_id String, pickup_date Date, pickup_datetime DateTime, dropoff_date Date, dropoff_datetime Nullable(DateTime), store_and_fwd_flag Nullable(FixedString(1)), rate_code_id Nullable(UInt8), pickup_longitude Nullable(Float64), pickup_latitude Nullable(Float64), dropoff_longitude Nullable(Float64), dropoff_latitude Nullable(Float64), passenger_count Nullable(UInt8), trip_distance Nullable(Float64), fare_amount Nullable(Float32), extra Nullable(Float32), mta_tax Nullable(Float32), tip_amount Nullable(Float32), tolls_amount Nullable(Float32), ehail_fee Nullable(Float32), improvement_surcharge Nullable(Float32), total_amount Nullable(Float32), payment_type Nullable(String), trip_type Nullable(UInt8), pickup Nullable(String), dropoff Nullable(String), cab_type Nullable(String), precipitation Nullable(Int8), snow_depth Nullable(Int8), snowfall Nullable(Int8), max_temperature Nullable(Int8), min_temperature Nullable(Int8), average_wind_speed Nullable(Int8), pickup_nyct2010_gid Nullable(Int8), pickup_ctlabel Nullable(String), pickup_borocode Nullable(Int8), pickup_boroname Nullable(String), pickup_ct2010 Nullable(String), pickup_boroct2010 Nullable(String), pickup_cdeligibil Nullable(FixedString(1)), pickup_ntacode Nullable(String), pickup_ntaname Nullable(String), pickup_puma Nullable(String), dropoff_nyct2010_gid Nullable(UInt8), dropoff_ctlabel Nullable(String), dropoff_borocode Nullable(UInt8), dropoff_boroname Nullable(String), dropoff_ct2010 Nullable(String), dropoff_boroct2010 Nullable(String), dropoff_cdeligibil Nullable(String), dropoff_ntacode Nullable(String), dropoff_ntaname Nullable(String), dropoff_puma Nullable(String) ) ENGINE = MergeTree(pickup_date, pickup_datetime, 8192);
рдлрд┐рд░ рдореИрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реВрдБрдЧрд╛ рдХрд┐ рдкрд╣рд▓рд╛ рд╕рд░реНрд╡рд░ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рд╕рднреА рддреАрди рдиреЛрдбреНрд╕ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИред
SELECT * FROM system.clusters WHERE cluster = 'perftest_3shards' FORMAT Vertical;
Row 1: тФАтФАтФАтФАтФАтФА cluster: perftest_3shards shard_num: 1 shard_weight: 1 replica_num: 1 host_name: 172.30.2.192 host_address: 172.30.2.192 port: 9000 is_local: 1 user: default default_database:
Row 2: тФАтФАтФАтФАтФАтФА cluster: perftest_3shards shard_num: 2 shard_weight: 1 replica_num: 1 host_name: 172.30.2.162 host_address: 172.30.2.162 port: 9000 is_local: 0 user: default default_database:
Row 3: тФАтФАтФАтФАтФАтФА cluster: perftest_3shards shard_num: 3 shard_weight: 1 replica_num: 1 host_name: 172.30.2.36 host_address: 172.30.2.36 port: 9000 is_local: 0 user: default default_database:
рдлрд┐рд░ рдореИрдВ рдкрд╣рд▓реЗ рд╕рд░реНрд╡рд░ рдкрд░ рдПрдХ рдирдИ рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реВрдВрдЧрд╛, рдЬреЛ
trips_mergetree_third
рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ рдФрд░ рдбрд┐рд╕реНрдЯреНрд░реАрдмреНрдпреВрдЯ рдЗрдВрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
CREATE TABLE trips_mergetree_x3 AS trips_mergetree_third ENGINE = Distributed(perftest_3shards, default, trips_mergetree_third, rand());
рдлрд┐рд░ рдореИрдВ рдорд░реНрдЬрдЯреНрд░реА рдкрд░ рдЖрдзрд╛рд░рд┐рдд рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рдбреЗрдЯрд╛ рдХреЛ рддреАрдиреЛрдВ рд╕рд░реНрд╡рд░реЛрдВ рдкрд░ рдХреЙрдкреА рдХрд░реВрдВрдЧрд╛ред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд 34 рдорд┐рдирдЯ рдФрд░ 44 рд╕реЗрдХрдВрдб рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
INSERT INTO trips_mergetree_x3 SELECT * FROM trips_mergetree;
рдЙрдкрд░реЛрдХреНрдд рдСрдкрд░реЗрд╢рди рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдЕрдзрд┐рдХрддрдо рднрдВрдбрд╛рд░рдг рд╕реНрддрд░ рдХреЗ рдирд┐рд╢рд╛рди рд╕реЗ рджреВрд░ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд┐рдХрд╣рд╛рдЙрд╕ рдХреЛ 15 рдорд┐рдирдЯ рдХрд╛ рд╕рдордп рджрд┐рдпрд╛ред рдбреЗрдЯрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рддреАрди рд╕рд░реНрд╡рд░реЛрдВ рдкрд░ рдХреНрд░рдорд╢рдГ 264 рдЬреАрдмреА, 34 рдЬреАрдмреА рдФрд░ 33 рдЬреАрдмреА рддрдХ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдИред
ClickHouse рдХреНрд▓рд╕реНрдЯрд░ рдкреНрд░рджрд░реНрд╢рди рдЖрдХрд▓рди
рдЕрдЧрд▓реА рдмрд╛рд░ рдЬреЛ рдореИрдВрдиреЗ рджреЗрдЦрд╛, рд╡рд╣ рд╕рдмрд╕реЗ рддреЗрдЬ рд╕рдордп рдерд╛ рдЬреЛ рдореИрдВрдиреЗ рдкреНрд░рддреНрдпреЗрдХ рдХреНрд╡реЗрд░реА рдХреЛ
trips_mergetree_x3
рдЯреЗрдмрд▓ рдореЗрдВ рдХрдИ рдмрд╛рд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╕рдордп рджреЗрдЦрд╛ рдерд╛ред
$ clickhouse-client
2.449 рд╕реЗрдХрдВрдб рдореЗрдВ рдкреВрд░рд╛ рд╣реБрдЖред
SELECT cab_type, count(*) FROM trips_mergetree_x3 GROUP BY cab_type;
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд 0.691 рд╕реЗрдХрдВрдб рдореЗрдВ рдкреВрд░рд╛ рд╣реБрдЖред
SELECT passenger_count, avg(total_amount) FROM trips_mergetree_x3 GROUP BY passenger_count;
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд 0. 582 рд╕реЗрдХрдВрдб рдореЗрдВ рдкреВрд░рд╛ рд╣реБрдЖред
SELECT passenger_count, toYear(pickup_date) AS year, count(*) FROM trips_mergetree_x3 GROUP BY passenger_count, year;
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд 0.983 рд╕реЗрдХрдВрдб рдореЗрдВ рдкреВрд░рд╛ рд╣реБрдЖред
SELECT passenger_count, toYear(pickup_date) AS year, round(trip_distance) AS distance, count(*) FROM trips_mergetree_x3 GROUP BY passenger_count, year, distance ORDER BY year, count(*) DESC;
рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдорд░реНрдЬрдЯреНрд░реА рдкрд░ рдЖрдзрд╛рд░рд┐рдд рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╕рдорд╛рди рдХреНрд╡реЗрд░реА рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛, рдЬреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкрд╣рд▓реЗ рд╕рд░реНрд╡рд░ рдкрд░ рд╕реНрдерд┐рдд рд╣реИред
рдПрдХ ClickHouse рдиреЛрдб рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдореВрд▓реНрдпрд╛рдВрдХрди
рдЕрдЧрд▓реА рдмрд╛рд░ рдЬреЛ рдореИрдВрдиреЗ рджреЗрдЦрд╛, рд╡рд╣ рд╕рдмрд╕реЗ рддреЗрдЬ рд╕рдордп рдерд╛ рдЬреЛ рдореИрдВрдиреЗ рдкреНрд░рддреНрдпреЗрдХ рдХреНрд╡реЗрд░реА рдХреЛ
trips_mergetree_x3
рдЯреЗрдмрд▓ рдореЗрдВ рдХрдИ рдмрд╛рд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╕рдордп рджреЗрдЦрд╛ рдерд╛ред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд 0.241 рд╕реЗрдХрдВрдб рдореЗрдВ рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИред
SELECT cab_type, count(*) FROM trips_mergetree GROUP BY cab_type;
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд 0.826 рд╕реЗрдХрдВрдб рдореЗрдВ рдкреВрд░рд╛ рд╣реБрдЖред
SELECT passenger_count, avg(total_amount) FROM trips_mergetree GROUP BY passenger_count;
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд 1.209 рд╕реЗрдХрдВрдб рдореЗрдВ рдкреВрд░рд╛ рд╣реЛрддрд╛ рд╣реИред
SELECT passenger_count, toYear(pickup_date) AS year, count(*) FROM trips_mergetree GROUP BY passenger_count, year;
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд 1.781 рд╕реЗрдХрдВрдб рдореЗрдВ рдкреВрд░рд╛ рд╣реБрдЖред
SELECT passenger_count, toYear(pickup_date) AS year, round(trip_distance) AS distance, count(*) FROM trips_mergetree GROUP BY passenger_count, year, distance ORDER BY year, count(*) DESC;
рдкрд░рд┐рдгрд╛рдореЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░
рдпрд╣ рдкрд╣рд▓реА рдмрд╛рд░ рд╣реИ рдЬрдм рдХреЛрдИ рдореБрдлреНрдд рдкреНрд░реЛрд╕реЗрд╕рд░-рдЖрдзрд╛рд░рд┐рдд рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрд░реЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ GPU рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реБрдЖ рд╣реИред рдЙрд╕ GPU рдЖрдзрд╛рд░рд┐рдд рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рддрдм рд╕реЗ рджреЛ рд╕рдВрд╢реЛрдзрди рд╣реБрдП рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, ClickHouse рдиреЗ рдПрдХ рдиреЛрдб рдкрд░ рдЬреЛ рдкреНрд░рджрд░реНрд╢рди рджрд┐рдЦрд╛рдпрд╛ рд╣реИ, рд╡рд╣ рдмрд╣реБрдд рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рд╣реИред
рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рдПрдХ рд╡рд┐рддрд░рд┐рдд рдЗрдВрдЬрди рдкрд░ рдХреНрд╡реЗрд░реА 1 рдЪрд▓рд╛рддреЗ рд╕рдордп, рдУрд╡рд░рд╣реЗрдб рдЙрдЪреНрдЪ рдкрд░рд┐рдорд╛рдг рдХрд╛ рдПрдХ рдЖрджреЗрд╢ рд╣реЛрддрд╛ рд╣реИред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕ рдкрдж рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╢реЛрдз рдореЗрдВ рдХреБрдЫ рдЪреВрдХ рдЧрдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рджреЗрдЦрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЬрдм рдореИрдВ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдЕрдзрд┐рдХ рдиреЛрдб рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ рддреЛ рдХреНрд╡реЗрд░реА рд╕рдордп рдХреИрд╕реЗ рдШрдЯрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╣реИ рдХрд┐ рдЕрдиреНрдп рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдХрд░рддреЗ рд╕рдордп рдЙрддреНрдкрд╛рджрдХрддрд╛ рд▓рдЧрднрдЧ 2 рдЧреБрдирд╛ рдмрдврд╝ рдЬрд╛рддреА рд╣реИред
рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ ClickHouse рд╡рд┐рдХрд╕рд┐рдд рд╣реЛ рддрд╛рдХрд┐ рднрдВрдбрд╛рд░рдг рдФрд░ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдХреЛ рдЕрд▓рдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХреЗ рддрд╛рдХрд┐ рд╡реЗ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рд╕реНрдХреЗрд▓ рдХрд░ рд╕рдХреЗрдВред HDFS рд╕рдорд░реНрдерди, рдЬреЛ рдкрд┐рдЫрд▓реЗ рд╕рд╛рд▓ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕ рджрд┐рд╢рд╛ рдореЗрдВ рдПрдХ рдХрджрдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдЕрдзрд┐рдХ рдиреЛрдбреНрд╕ рдЬреЛрдбрд╝рдХрд░ рдПрдХ рдПрдХрд▓ рдЕрдиреБрд░реЛрдз рдХреЛ рддреЗрдЬ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдЗрд╕ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХрд╛ рднрд╡рд┐рд╖реНрдп рдмрд╣реБрдд рдЙрдЬреНрдЬреНрд╡рд▓ рд╣реЛрдЧрд╛ред
рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ рдЙрддреНрддрд░реА рдЕрдореЗрд░рд┐рдХрд╛ рдФрд░ рдпреВрд░реЛрдк рдореЗрдВ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░рд╛рдорд░реНрд╢, рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдФрд░ рд╣рд╛рдереЛрдВ рдХреА рд╡рд┐рдХрд╛рд╕ рд╕реЗрд╡рд╛рдУрдВ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рддрд╛ рд╣реВрдВред рдпрджрд┐ рдЖрдк рдЗрд╕ рдмрд╛рдд рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдореЗрд░реЗ рд╕реБрдЭрд╛рд╡ рдЖрдкрдХреЗ рд╡реНрдпрд╡рд╕рд╛рдп рдХреЛ рдХреИрд╕реЗ рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ
рд▓рд┐рдВрдХреНрдбрдЗрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░реЗрдВред