
ãããªãµãŒãã¹ã§ãããããŒãã§ãããã¹ããŒãªãŒã§ããèšäºã§ãããã©ããªè£œåã§ãéçºããŠããŠãŒã¶ãŒã®æ¡ä»¶ä»ãã®ã幞çŠãã枬å®ã§ããããã«ãããã ç§ãã¡ãå€åãè¯ããããæªãããããç解ããçŽèŠ³ãç§ãã¡èªèº«ã®ææ ã§ã¯ãªããããªããä¿¡ããããšãã§ããææšãšæ°å€ã«äŸåããŠã補åéçºã®æ¹åã調æŽããŸãã
ãã®èšäºã§ã¯ãéåžžã«é«ãããã©ãŒãã³ã¹ã®åæã¯ãšãªãååŸããªãããæé9,700äžäººã®ãªãŒãã£ãšã³ã¹ãæ±ãããµãŒãã¹ã§è£œåçµ±èšãšåæãéå§ããæ¹æ³ã«ã€ããŠèª¬æããŸãã ClickHouseã䜿çšããããšã³ãžã³ãã¯ãšãªã®æ©èœã«ã€ããŠèª¬æããŸãã ããŒã¿éçŽã®ã¢ãããŒãã説æããŸããããã«ãããè€éãªã¡ããªãã¯ãäžç¬ã§ååŸããããŒã¿ã®å€æãšãã¹ãã«ã€ããŠè©±ãããšãã§ããŸãã
çŸåšã1æ¥ãããçŽ60åã®è£œåã€ãã³ãããããè¿ãå°æ¥ã200ã250åã«éããäºå®ã§ãã ãããŠããã®ãããªéãããŒã¹ã§ã¯ãªããç§ãã¡ãé¢å¿ã®ãããã¹ãŠã®é£ç©ã€ãã³ãã説æãã幎æ«ãŸã§ã«ã400ã500åã«äžæããŸãã
ã»ããå ã®1è¡ã çµéæéïŒ0.287ç§ åŠçããã598.5åè¡ã59.85 GBïŒ208.16åè¡/ç§ã208.16 GB /ç§ïŒ
ã«ããã®äžã®è©³çŽ°ã
ãŸããã
åæããŒã«ã¯ä»¥åã¯VKontakteã§ããã äžæã®ãŠãŒã¶ãŒãèæ ®ããããããã¹ã©ã€ã¹ããšã«ã€ãã³ãã¹ã±ãžã¥ãŒã«ãäœæãããµãŒãã¹ã®æ·±å±€ã«åé¡ããããšãã§ããŸããã ãããã圌ãã¯äºåã«åºå®ã¹ã©ã€ã¹ã«ã€ããŠãéèšããŒã¿ã«ã€ããŠããŠããŒã¯ãªãã®ã«ã€ããŠã¯HLLã«ã€ããŠãããããïŒããããããè€éãªè³ªåã«çŽ æ©ãçããããšãã§ããªã硬ãã«ã€ããŠèª¬æããŸããã
ãã¡ãããHadoopããããããã§ããããŸãããã§ããããµãŒãã¹ã®äœ¿çšã«é¢ããå€ãã®ãã°ãæžã蟌ãŸããæžã蟌ãŸããæžã蟌ãŸããŸãã æ®å¿µãªãããhdfsã¯äžéšã®ããŒã ãç¬èªã®ã¿ã¹ã¯ãå®è£ ããããã«ã®ã¿äœ¿çšãããŠããŸããã ããã«æ²ããããšã«ãhdfsã¯è¿ éãªåæã¯ãšãªã«é¢ãããã®ã§ã¯ãããŸãããå€ãã®åéãžã®è³ªåãããããã®çãã¯ã³ãŒãã«ããã誰ããã¢ã¯ã»ã¹ã§ããããã¥ã¡ã³ãã«ã¯ãããŸããã§ããã
ç§ãã¡ã¯ããã®ããã«çããããšã¯ãã¯ãäžå¯èœã§ãããšããçµè«ã«éããŸããã åããŒã ã«ã¯ããŒã¿ãå¿ èŠã§ããããããã«å¯Ÿããã¯ãšãªã¯é«éã§ãããããŒã¿èªäœã¯æ£ç¢ºã§æçšãªãã©ã¡ãŒã¿ãŒãè±å¯ã§ããå¿ èŠããããŸãã
ãã®ãããæ°ããçµ±èš/åæã·ã¹ãã ã®æ確ãªèŠä»¶ãçå®ããŸããã
- åæã¯ãšãªã¯é«éã§ãªããã°ãªããŸããã
- ããŒã¿ã¯éåžžã«æ£ç¢ºã§ããçæ³çã«ã¯ããããã¯ãµãŒãã¹ãšã®çã®ãŠãŒã¶ãŒã€ã³ã¿ã©ã¯ã·ã§ã³ã€ãã³ãã§ãã
- ã€ãã³ãã®æ§é ã説æããç解ããã¢ã¯ã»ã¹å¯èœã«ããå¿ èŠããããŸãã
- ä¿¡é Œã§ããããŒã¿ã¹ãã¬ãŒãžã1åéãã®é ä¿¡ä¿èšŒã
- ãŠããŒã¯ããªãŒãã£ãšã³ã¹ïŒæ¯æ¥ãæ¯é±ãæ¯æïŒãä¿æã¡ããªãã¯ããŠãŒã¶ãŒããµãŒãã¹ã«è²»ãããæéããŠããŒã¯ã»ããã«å¯Ÿããå®éåãããã¢ã¯ã·ã§ã³ãããã³ã¹ã©ã€ã¹ã®ã»ããããšã®ãã®ä»ã®ã¡ããªãã¯ãã«ãŠã³ãã§ããŸãã
- ãã¹ããããŒã¿å€æãèŠèŠåãé²è¡äžã§ãã
ãããã³ã§
çµéšããã2ã€ã®ããŒã¿ããŒã¹ãå¿ èŠã§ããããšã瀺åãããŸããã1ã€ã¯ããŒã¿ãéçŽããŠåŒ·åããäœéã®ããŒã¿ããŒã¹ããã1ã€ã¯ãã®ããŒã¿ãæäœããŠãã®äžã«ã°ã©ããäœæã§ããé«éã®ããŒã¿ããŒã¹ã§ãã ããã¯æãäžè¬çãªã¢ãããŒãã®1ã€ã§ããããšãã°ãhdfsã®ãããªé ãããŒã¹ã§ã¯ãç¹å®ã®æéã®ã¹ã©ã€ã¹ããšã®ãŠããŒã¯ãªæ圱ãšã€ãã³ãæ°ã«åºã¥ããŠãç°ãªãæ圱ãäœæãããŸãã
æãã9æã®æ¥ã«ãã«ã¶ã³å€§èå ãèŠäžãããããã³ã§ãè¶ã飲ã¿ãªããäŒè©±ãããªãããClickHouseãã¯ã€ãã¯ããŒã¹ãšããŠè©ŠããŠã¿ããšããã¢ã€ãã¢ããããŸãããåœæã¯ãããããã§ã«æè¡ãã°ã®ä¿åã«äœ¿çšããŠããŸããã äž»ã«é床ãšä¿¡é Œæ§ã«é¢é£ããå€ãã®çåããããŸããã宣èšãããããã©ãŒãã³ã¹ãã¹ãã¯éçŸå®çã§ãããæ°ããããŒã¿ããŒã¹ãªãªãŒã¹ã¯å®æçã«æ¢åã®æ©èœãç Žå£ããŸããã ãããã£ãŠãææ¡ã¯ç°¡åã§ãã-è©ŠããŠã¿ãŠãã ããã
æåã®ãµã³ãã«
ãã®æ§æã§2å°ã®ãã·ã³ã®ã¯ã©ã¹ã¿ãŒããããã€ããŸããã
2xE5-2620 v4ïŒåèš32ã³ã¢ïŒã256Gã©ã ã28Tãã¬ãŒã¹ïŒraid10 with ext4ïŒã
æåã¯ã¬ã€ã¢ãŠãã«è¿ããã®ã§ããããããããé ãã«åãæ¿ããŸããã ClickHouseã«ã¯ããŸããŸãªããŒãã«ãšã³ãžã³ããããŸãããäž»ãªãã®ã¯MergeTreeãã¡ããªã®ãã®ã§ãã ãããã次ã®èšå®ã§ReplicatedReplacingMergeTreeãéžæããŸããã
PARTITION BY dt ORDER BY (toStartOfHour(time), cityHash64(user_id), event_microsec, event_id) SAMPLE BY cityHash64(user_id) SETTINGS index_granularity = 8192;
è€è£œ -ããŒãã«ãè€è£œãããããšãæå³ããŸããããã«ãããä¿¡é Œæ§ã®èŠä»¶ã®1ã€ã解決ãããŸãã
眮æ -ããŒãã«ã¯äž»ããŒã«ããéè€æé€ããµããŒãããŸããããã©ã«ãã§ã¯ãäž»ããŒã¯ãœãŒãããŒãšäžèŽãããããORDER BYã»ã¯ã·ã§ã³ã¯äž»ããŒãšã¯äœãã瀺ãã ãã§ãã
SAMPLE BY-ãµã³ããªã³ã°ãè©ŠããŠã¿ããã£ãã®ã§ããsampleã¯äžæ§ã«ç䌌ã©ã³ãã ãªãµã³ãã«ãè¿ããŸãã
index_granularity = 8192ã¯ãã€ã³ããã¯ã¹ã®ã»ãªãéã®ããŒã¿è¡ã®éæ³ã®æ°ã§ãïŒã¯ãããŸã°ãã§ãïŒãããã¯ããã©ã«ãã§äœ¿çšãããŸãã å€æŽããŸããã§ããã
ããŒãã£ã·ã§ã³åå²ã¯æ¥åäœã§è¡ãããŸããïŒãã ããããã©ã«ãã§ã¯æåäœïŒã å€ãã®ããŒã¿èŠæ±ã¯æ¥äžã«ãããšæ³å®ãããŠããŸãããããšãã°ãç¹å®ã®æ¥ã®ãããªãã¥ãŒã®åã°ã©ããäœæããããã§ãã
次ã«ãæè¡ãã°ãååŸããŠãããŒãã«ã«çŽ10åè¡ãå ¥åããŸããã åªããå§çž®ãåã¿ã€ãInt *ã«ããã°ã«ãŒãåãäžæã®å€ã®ã«ãŠã³ã-ãã¹ãŠãéåžžã«é«éã«åäœããŸããïŒ
é床ã«ã€ããŠèšãã°ã1ã€ã®èŠæ±ã500ããªç§ããé·ãæç¶ããããããã®ã»ãšãã©ã50ã100ããªç§ã«åãŸãããšãæå³ããŸãã ãããŠãããã¯2å°ã®ãã·ã³äžã«ãããŸããå®éãèšç®ã«é¢äžããã®ã¯1å°ã ãã§ãã
ãã¹ãŠãèŠãŠãUInt8åã®ä»£ããã«åœã®IDããããInt8åããŠãŒã¶ãŒã®å¹Žéœ¢ãªã©ã®ããŒã¿ã«çœ®ãæããããããšãæ³åããŸããã ãããŠåœŒãã¯ããã¹ãŠãæ£ããè¡ãããŠããã°ãClickHouseãç§ãã¡ã«å®å šã«é©ããŠããããšã«æ°ä»ããŸããã
匷åãªããŒã¿åä»ã
ClickHouseã®å©ç¹ã¯ãæ£ããããŒã¿ã¹ããŒãã圢æããããšãã«æ£ç¢ºã«å§ãŸããŸãã äŸïŒãã©ãããã©ãŒã String-æªãããã©ãããã©ãŒã Int8 +èŸæž-è¯ããLowCardinalityïŒæååïŒ-䟿å©ã§è¯ãïŒLowCardinalityã«ã€ããŠã¯åŸã§èª¬æããŸãïŒã
ç¹å¥ãªãžã§ãã¬ãŒã¿ãŒã¯ã©ã¹ãphpã§äœæããŸãããããã¯ããªã¯ãšã¹ãã«å¿ããŠãClickHouseã®ããŒãã«ã«åºã¥ãã€ãã³ãã®ã©ãããŒã¯ã©ã¹ãšããã®ã³ã°ã®åäžã®ãšã³ããªãã€ã³ããäœæããŸãã å€æããã¹ããŒã ã®äŸã説æããŸãã
- ã¢ããªã¹ã/ããŒã¿ãšã³ãžãã¢/éçºè ãããã¥ã¡ã³ãã«ã€ããŠèª¬æããŸãïŒã©ã®ãã£ãŒã«ããå¯èœãªå€ãã€ãã³ãããã°ã«èšé²ããå¿ èŠããããã
- åã®æ®µèœã®ããŒã¿æ§é ã«åŸã£ãŠãClickHouseã«ããŒãã«ãäœæãããŸãã
- ããŒãã«ã«åºã¥ãã€ãã³ãã®ã©ããã¯ã©ã¹ãçæãããŸãã
- 補åããŒã ã¯ããã®ã¯ã©ã¹ã®ãªããžã§ã¯ãã®ãã£ãŒã«ããžã®å ¥åãéä¿¡ãå®è£ ããŸãã
PHPã®ã¬ãã«ã§ã¹ããŒã ãå€æŽããèšé²ãããããŒã¿ã®ã¿ã€ããå€æŽããã«ã¯ãæåã«ClickHouseã®ããŒãã«ãå€æŽããå¿ èŠããããŸãã ãããŠããã¯ãããŒã ãšã®èª¿æŽãããã¥ã¡ã³ãã®å€æŽãã€ãã³ãã®èª¬æãªãã§ã¯å®è¡ã§ããŸããã
ã€ãã³ãããšã«ãClickHouseãšhadoopã«éä¿¡ãããã€ãã³ãã®å²åãããããå¶åŸ¡ãã2ã€ã®èšå®ãèšå®ã§ããŸãã èšå®ã¯ãäœããããŸããããªãå Žåã«ãã®ã³ã°ãåæžããæ©èœãåãã段éçãªããŒãªã³ã°ã®ããã«äž»ã«å¿ èŠã§ãã hadoopã®åã«ãããŒã¿ã¯Kafkaã䜿çšããŠæšæºçãªæ¹æ³ã§é ä¿¡ãããŸãã ãŸããClickHouseã§ã¯ãæ°žç¶ã¢ãŒãã®KittenHouseã䜿çšããŠãå°ãªããšã1ã€ã®ã€ãã³ãé ä¿¡ãä¿èšŒããã¹ããŒã ã䜿çšããŸãã
ã€ãã³ãã¯ãuser_idããã®ããã·ã¥ãã¯ã©ã¹ã¿ãŒå ã®ã·ã£ãŒãã®æ°ã§å²ã£ãæ®ãã«åºã¥ããŠãç®çã®ã·ã£ãŒãã®ãããã¡ãŒããŒãã«ã«é ä¿¡ãããŸãã 次ã«ããããã¡ããŒãã«ã¯ããŒã¿ãããŒã«ã«ã®ReplicatedReplacingMergeTreeã«ãã©ãã·ã¥ããŸãã ãŸããããŒã«ã«ããŒãã«ã®äžã«ãåæ£ãšã³ãžã³ã§åæ£ããŒãã«ããã«ãããŸããããã«ããããã¹ãŠã®ã·ã£ãŒãã®ããŒã¿ã«ã¢ã¯ã»ã¹ã§ããŸãã
éæ£èŠå
ClickHouseã¯ãã«ã©ã ããŒDBMSã§ãã ããã¯ãéåžžã®åœ¢åŒã«é¢ãããã®ã§ã¯ãããŸãããã€ãŸããåå ããããããã€ãã³ãã§ãã¹ãŠã®æ å ±ãæã£ãŠããæ¹ãè¯ããšããããšã§ãã JoinããããŸãããé©åãªããŒãã«ãã¡ã¢ãªã«åãŸããªãå Žåãçã¿ãå§ãŸããŸãã ãã®ãããç§ãã¡ã¯åŒ·ãææã決å®ããŸãããé¢å¿ã®ãããã¹ãŠã®æ å ±ã¯ã€ãã³ãèªäœã«ä¿åããå¿ èŠããããŸãã ããšãã°ãæ§å¥ããŠãŒã¶ãŒã®å¹Žéœ¢ãåœãéœåžãèªçæ¥-ãããã¯ãã¹ãŠããªãŒãã£ãšã³ã¹åæã«åœ¹ç«ã€å ¬éæ å ±ã§ãããã€ã³ã¿ã©ã¯ã·ã§ã³ãªããžã§ã¯ãã«é¢ãããã¹ãŠã®æçšãªæ å ±ã§ãã ããšãã°ããããªã«ã€ããŠè©±ããŠããå Žåã¯ãvideo_idãvideo_owner_idããããªã®ã¢ããããŒãæ¥ãé·ããã€ãã³ãæã®å質ãæ倧å質ãªã©ã§ãã
åèšã§ãåããŒãã«ã«ã¯50ã200åããããŸããããã¹ãŠã®ããŒãã«ã«ã¯ãµãŒãã¹ãã£ãŒã«ãããããŸãã ããšãã°ããšã©ãŒãã°ã¯error_logã§ããå®éãã¿ã€ãã®ç¯å²å€ã®ãšã©ãŒãåŒã³åºããŸãã å¥åŠãªå€ã幎霢ã®ãã£ãŒã«ãã®åã®ãµã€ãºãè¶ ããå Žåã
ã¿ã€ãLowCardinalityïŒTïŒ
ClickHouseã«ã¯ãå€éšèŸæžã䜿çšããæ©èœããããŸãã ãããã¯ã¡ã¢ãªã«ä¿åãããå®æçã«æŽæ°ãããå€å žçãªåèæžãªã©ãããŸããŸãªã·ããªãªã§å¹æçã«äœ¿çšã§ããŸãã ããšãã°ããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ããã°ã«èšé²ããå Žåã2ã€ã®éžæè¢ããããŸããæååãŸãã¯æ°å+ãã£ã¬ã¯ããªã§ãã ãã¡ããã倧éã®ããŒã¿ã«å¯ŸããŠãããã³é«æ§èœã®åæã¯ãšãªã®å Žåãæ°å€ãèšè¿°ããå¿ èŠã«å¿ããŠèŸæžããæååè¡šçŸãååŸããããšã¯è«ççã§ãã
dictGetString('os', 'os_name', toUInt64(os_id))
ãããããã£ãšäŸ¿å©ãªæ¹æ³ããããŸã-ã¿ã€ãLowCardinalityïŒStringïŒã䜿çšããŠãèŸæžãèªåçã«äœæããŸãã å€ã®ã»ããã®ã«ãŒãã£ããªãã£ãäœããšããæ¡ä»¶äžã§ã®LowCardinalityã®ããã©ãŒãã³ã¹ã¯ãStringã®å Žåãããå€§å¹ ã«é«ããªããŸãã
ããšãã°ãã€ãã³ãã¿ã€ããplayãããpauseãããrewindãã«LowCardinalityïŒStringïŒã䜿çšããŸãã ãŸãã¯ããã©ãããã©ãŒã ã®å ŽåïŒãwebãããandroidãããiphoneãïŒ
SELECT vk_platform, count() FROM t WHERE dt = yesterday() GROUP BY vk_platform Elapsed: 0.145 sec. Processed 1.98 billion rows, 5.96 GB (13.65 billion rows/s., 41.04 GB/s.)
ãã®æ©èœã¯ãŸã å®éšçã§ããããã䜿çšããã«ã¯ä»¥äžãå®è¡ããå¿ èŠããããŸãã
SET allow_experimental_low_cardinality_type = 1;
ãããããã°ãããããšã圌女ã¯ãã¯ãèšå®äžã«çœ®ãããªããšããæãããããŸãã
VKããŒã¿éçŽ
å€ãã®åããããå€ãã®ã€ãã³ããããã®ã§ãèªç¶ãªæ¬²æ±ã¯ãå€ããããŒãã£ã·ã§ã³ãã«ããããããšã§ãããæåã«ãŠããããçµã¿ç«ãŠãããšã§ãã å Žåã«ãã£ãŠã¯ãçã®ã€ãã³ãïŒ1ãæãŸãã¯1幎åïŒãåæããå¿ èŠããããããhdfsã®ããŒã¿ãã«ããããŸãããã¢ããªã¹ãã¯ãåžæããå¯æšçŽ°å·¥ã«ãã€ã§ãé£çµ¡ã§ããŸãã
ååãšããŠãæéééã§éèšããå Žåãåäœæéãããã®è¡æ°ã¯ã«ããé»åã®ç©ã«çãããšããäºå®ã«åžžã«åºã¥ããŠããŸãã ããã¯å¶éã課ããŸãïŒåœã¯ãããã·ã¢ãããã¢ãžã¢ããããšãŒãããããããã®ä»ã®äžçããããã³å¹Žéœ¢ãªã©ã®ã°ã«ãŒãã§åéãéå§ããŸãã
dtãuser_idã«ããéèš
ãããããªã¢ã¯ãã£ãClickHouseããããŸãïŒ æ¥ä»ã§5,000ã1åè¡ã«å éã§ããŸããïŒ
ç°¡åãªãã¹ãã«ããããŠãŒã¶ãŒããã·ã³ã«æ®ããšããç°¡åãªã¢ã€ãã¢ãçãŸããããšãããããŸããã ã€ãŸã-sparkã䜿çšãããæ¥ä»ãã¹ã©ã€ã¹ãã§ã¯ãªããClickHouseã䜿çšãããæ¥ä»ããŠãŒã¶ãŒãã§éèšããããŒã¿ã®ã転眮ããè¡ããŸãã
ãã®ã¢ãããŒãã§ã¯ããŠãŒã¶ãŒãéèšããŒã¿ã«ä¿åããŸããã€ãŸãããŠãŒã¶ãŒã€ã³ãžã±ãŒã¿ãŒãä¿æçãé »åºŠã®ææšãã«ãŠã³ãã§ããŸãã è€æ°ã®ãµãŒãã¹ã®å ±éãªãŒãã£ãšã³ã¹ãVKontakteãªãŒãã£ãšã³ã¹å šäœãŸã§ã«ãŠã³ãããŠããŠããããæ¥ç¶ã§ããŸãã ããã¯ãã¹ãŠãæ¡ä»¶ä»ãã§åæã«ããŒãã«ã«ååšããä»»æã®ã¹ã©ã€ã¹ã«ãã£ãŠå®è¡ã§ããŸãã
äŸã§èª¬æããŸãã

éçŽåŸïŒå³åŽã«ããã«å€ãã®åããããŸãïŒïŒ

ãã®å ŽåãéçŽã¯ïŒdtãuser_idïŒã«ãã£ãŠæ£ç¢ºã«è¡ãããŸãã ãã®ãããªéèšã§ãŠãŒã¶ãŒæ å ±ãæã€ãã£ãŒã«ãã®å Žåãé¢æ°anyãanyHeavyã䜿çšã§ããŸãïŒé »ç¹ã«çºçããå€ãéžæããŸãïŒã ããšãã°ãanyHeavyïŒãã©ãããã©ãŒã ïŒãéçŽã«åéããŠããŠãŒã¶ãŒããããªã€ãã³ãã®å€§éšåã§äœ¿çšããŠãããã©ââãããã©ãŒã ãç¥ãããšãã§ããŸãã å¿ èŠã«å¿ããŠãgroupUniqArrayïŒãã©ãããã©ãŒã ïŒã䜿çšããŠããŠãŒã¶ãŒãã€ãã³ããçºçããããã¹ãŠã®ãã©ãããã©ãŒã ã®é åãæ ŒçŽã§ããŸãã ããã§ååã§ãªãå Žåã¯ããã©ãããã©ãŒã ãšã¹ãã¢ã«åå¥ã®åãäœæã§ããŸããããšãã°ãç¹å®ã®ãã©ãããã©ãŒã ããååã«ã¹ã¯ãªãŒãã³ã°ãããäžæã®ãããªã®æ°ãäœæã§ããŸãã
uniqCombinedIf(cityHash64(video_owner_id, video_id), (platform = 'android') AND (event = '50p')) as uniq_videos_50p_android
ãã®ã¢ãããŒãã§ã¯ãåè¡ãäžæã®ãŠãŒã¶ãŒã§ãããååã«ãŠãŒã¶ãŒãŸãã¯ãµãŒãã¹ãšã®çžäºäœçšã«é¢ããæ å ±ãå«ãŸãããããªãåºãéèšãååŸãããŸãã
ãµãŒãã¹ã®DAUãèšç®ããã«ã¯ããã®ãŠãããäžã§ãã®ãããªãªã¯ãšã¹ããå®è¡ããã ãã§ååã§ããããšãããããŸãã
SELECT dt, count() as DAU FROM agg GROUP BY dt Elapsed: 0.078 sec.
ãŸãã¯ããŠãŒã¶ãŒã1é±éãµãŒãã¹ãå©çšããŠããæ¥æ°ãèšç®ããŸãã
SELECT days_in_service, count() AS uniques FROM ( SELECT uniqUpTo(7)(dt) AS days_in_service FROM agg2 WHERE dt > (yesterday() - 7) GROUP BY user_id ) GROUP BY days_in_service ORDER BY days_in_service ASC 7 rows in set. Elapsed: 2.922 sec.
粟床ãã»ãšãã©æãªãããšãªãããµã³ããªã³ã°ã«ãã£ãŠå éã§ããŸãã
SELECT days_in_service, 10 * count() AS uniques FROM ( SELECT uniqUpTo(7)(dt) AS days_in_service FROM agg2 SAMPLE 1 / 10 WHERE dt > (yesterday() - 7) GROUP BY user_id ) GROUP BY days_in_service ORDER BY days_in_service ASC 7 rows in set. Elapsed: 0.454 sec.
ãµã³ããªã³ã°ã¯ã€ãã³ãã®å²åã§ã¯ãªãããŠãŒã¶ãŒã®å²åã«ãã£ãŠè¡ãããããšã«æ³šæããŠãã ããããã®çµæããµã³ããªã³ã°ã¯éåžžã«åŒ·åãªããŒã«ã«ãªããŸãã
ãŸãã¯ã1/100ãµã³ããªã³ã°ã§4é±éåã-çŽ1ïŒ ç²ŸåºŠã®äœãçµæãåŸãããŸãã
SELECT days_in_service, 100 * count() AS uniques FROM ( SELECT uniqUpTo(7)(dt) AS days_in_service FROM agg2 SAMPLE 1 / 100 WHERE dt > (yesterday() - 28) GROUP BY user_id ) GROUP BY days_in_service ORDER BY days_in_service ASC 28 rows in set. Elapsed: 0.287 sec.
äžæ¹ãéèš
ïŒdtãuser_idïŒã§éèšããå ŽåããŠãŒã¶ãŒã倱ãããããšã¯ãããŸããããµãŒãã¹ãšã®ããåãã«é¢ããæ å ±ãèŠéãããšã¯ãããŸãããããã¡ãããç¹å®ã®ããåããªããžã§ã¯ãã«é¢ããã¡ããªãã¯ã¯å€±ãããŸãã ããããããªããããã倱ãããšã¯ã§ããŸãã-ãŠããããæ§ç¯ããŠã¿ãŸããã
ïŒdtãvideo_owner_idãvideo_idïŒãåãã¢ã€ãã¢ãå æã åç»ã«é¢ããæ å ±ã¯å¯èœãªéãä¿æããåç»ãšãŠãŒã¶ãŒãšã®ããåãã«é¢ããããŒã¿ãèŠéãããšã¯ãããŸãããç¹å®ã®ãŠãŒã¶ãŒã«é¢ããæ å ±ã¯å®å šã«èŠéããŸãã
SELECT starts FROM agg3 WHERE (dt = yesterday()) AND (video_id = ...) AND (video_owner_id = ...) 1 rows in set. Elapsed: 0.030 sec
ãŸãã¯ãæšæ¥ã®ããã10ã®ãããªãã¥ãŒïŒ
SELECT video_id, video_owner_id, watches FROM video_agg_video_d1 WHERE dt = yesterday() ORDER BY watches DESC LIMIT 10 10 rows in set. Elapsed: 0.035 sec.
ãã®çµæã次ã®åœ¢åŒã®éçŽã®ã¹ããŒã ããããŸãã
- 補åå ã®ãæ¥ä»ããŠãŒã¶ãŒãã«ããéèšã
- 補åå ã®ãæ¥ä»ãçžäºäœçšã®ãªããžã§ã¯ããã«ããéèšã
- ä»ã®äºæž¬ãçºçããå ŽåããããŸãã
ã¢ãºã«ãã³ãšTeamCity
æåŸã«ãã€ã³ãã©ã¹ãã©ã¯ãã£ã«ã€ããŠå°ã説æããŸãã éèšã³ã¬ã¯ã·ã§ã³ã¯å€éã«éå§ãããåçããŒã¿ããŒãã«ã®OPTIMIZEããå§ãŸããReplicatedReplacingMergeTreeã§ç°åžžãªããŒã¿ããŒãžãããªã¬ãŒããŸãã æäœã¯ååã«é·ãç¶ãããšãã§ããŸãããéè€ãçºçããå Žåã¯åé€ããå¿ èŠããããŸãã ãããŸã§ã®ãšãããéè€ã«ééããããšã¯ãããŸããããå°æ¥ãããã衚瀺ãããªããšããä¿èšŒã¯ãããŸããã
次ã®ã¹ãããã¯ãéèšã®äœæã§ãã ãããã¯ã以äžãçºçããbashã¹ã¯ãªããã§ãã
- ãŸããã·ã£ãŒãã®æ°ãšã·ã£ãŒãããããã€ãã®ãã¹ããååŸããŸãã
SELECT shard_num, any(host_name) AS host FROM system.clusters GROUP BY shard_num
- 次ã«ãã¹ã¯ãªããã¯åã·ã£ãŒãïŒclickhouse-client -h $ hostïŒã«å¯ŸããŠãã©ãŒã ã®ãªã¯ãšã¹ãïŒãŠãŒã¶ãŒã«ããéèšçšïŒãé çªã«å®è¡ããŸãã
INSERT INTO ... SELECT ... FROM ... SAMPLE 1/$shards_count OFFSET 1/$shard_num
ããã¯å®å šã«æé©ãªãã®ã§ã¯ãªãããã¹ãéã§å€ãã®ãããã¯ãŒã¯çžäºäœçšãåŒãèµ·ããå¯èœæ§ããããŸãã ãã ããæ°ããã·ã£ãŒããè¿œå ãããšãã¯ããã¹ãŠããã®ãŸãŸäœ¿çšã§ãããŠãããã®ããŒã¿ã®å±ææ§ãç¶æããããããããŸãå¿é ããªãããšã«ããŸããã
ã¿ã¹ã¯ã¹ã±ãžã¥ãŒã©ãšããŠAzkabanããããŸãã ããã¯éåžžã«äŸ¿å©ãªããŒã«ãšã¯èšããŸããããããè€éãªãã€ãã©ã€ã³ã®æ§ç¯ãã1ã€ã®ã¹ã¯ãªãããä»ã®ããã€ãã®ã¹ã¯ãªããã®å®äºãåŸ ã€å¿ èŠãããå Žåãªã©ããã®ã¿ã¹ã¯ã«å®å šã«å¯Ÿå¿ããŠããŸãã
çŸåšååšããã€ãã³ããéçŽã«å€æããã®ã«è²»ããããåèšæéã¯15åã§ãã
ãã¹ãäž
æ¯æãèªååããããã¹ããå®è¡ããçããŒã¿ã«é¢ãã質åãããã³éèšã®æºåç¶æ³ãšå質ã«åçããŸããäžé±éåã®åãæ¥ã«æ¯ã¹ãŠãã
æè¡çã«ã¯ããããã¯JUnitã䜿çšããClickHouseã®jdbcãã©ã€ããŒãå®è£ ããéåžžã®åäœãã¹ãã§ãã ãã¹ãŠã®ãã¹ãã®å®è¡ã¯TeamCityã§éå§ããã1ã¹ã¬ããã§å®è¡ããã®ã«çŽ30ç§ããããŸãã倱æããå Žåããã°ãããTeamCityãããããVKontakteéç¥ãåãåããŸãã
ãããã«
ClickHouseã®å®å®ããããŒãžã§ã³ã®ã¿ã䜿çšãããšã髪ãæãããçµ¹ã®ããã«ãªããŸãã ClickHouseã®é床ãäœäžããªãããšãä»ãå ãã䟡å€ããããŸã ã