1.1 āĻŦāĻŋāĻ˛āĻŋāĻ¯āĻŧāĻ¨ āĻŸā§āĻ¯āĻžāĻ•ā§āĻ¸āĻŋ āĻ°āĻžāĻ‡āĻĄ: 108-āĻ•ā§‹āĻ° āĻ•ā§āĻ˛āĻŋāĻ•āĻšāĻžāĻ‰āĻ¸ āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ°

āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻŸāĻŋāĻ° āĻ…āĻ¨ā§āĻŦāĻžāĻĻāĻŸāĻŋ āĻ•ā§‹āĻ°ā§āĻ¸ā§‡āĻ° āĻļāĻŋāĻ•ā§āĻˇāĻžāĻ°ā§āĻĨā§€āĻĻā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻŦāĻŋāĻļā§‡āĻˇāĻ­āĻžāĻŦā§‡ āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛ āĻĄā§‡āĻŸāĻž āĻ‡āĻžā§āĻœāĻŋāĻ¨āĻŋāĻ¯āĻŧāĻžāĻ°.

1.1 āĻŦāĻŋāĻ˛āĻŋāĻ¯āĻŧāĻ¨ āĻŸā§āĻ¯āĻžāĻ•ā§āĻ¸āĻŋ āĻ°āĻžāĻ‡āĻĄ: 108-āĻ•ā§‹āĻ° āĻ•ā§āĻ˛āĻŋāĻ•āĻšāĻžāĻ‰āĻ¸ āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ°

āĻ•ā§āĻ˛āĻŋāĻ•āĻšāĻžāĻ‰āĻ¸ āĻāĻ•āĻŸāĻŋ āĻ“āĻĒā§‡āĻ¨ āĻ¸ā§‹āĻ°ā§āĻ¸ āĻ•āĻ˛āĻžāĻŽāĻžāĻ° āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸āĨ¤ āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻĻā§āĻ°ā§āĻĻāĻžāĻ¨ā§āĻ¤ āĻĒāĻ°āĻŋāĻŦā§‡āĻļ āĻ¯ā§‡āĻ–āĻžāĻ¨ā§‡ āĻļāĻ¤ āĻļāĻ¤ āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻ• āĻĻā§āĻ°ā§āĻ¤ āĻĄā§āĻ°āĻŋāĻ˛ āĻĄāĻžāĻ‰āĻ¨ āĻĄā§‡āĻŸāĻž āĻ…āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡, āĻāĻŽāĻ¨āĻ•āĻŋ āĻ¯āĻ–āĻ¨ āĻĒā§āĻ°āĻ¤āĻŋāĻĻāĻŋāĻ¨ āĻ•āĻ¯āĻŧā§‡āĻ• āĻŦāĻŋāĻ˛āĻŋāĻ¯āĻŧāĻ¨ āĻ¨āĻ¤ā§āĻ¨ āĻ°ā§‡āĻ•āĻ°ā§āĻĄ āĻĒā§āĻ°āĻŦā§‡āĻļ āĻ•āĻ°āĻž āĻšāĻšā§āĻ›ā§‡āĨ¤ āĻāĻ‡ āĻ§āĻ°āĻ¨ā§‡āĻ° āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽāĻ•ā§‡ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ…āĻŦāĻ•āĻžāĻ āĻžāĻŽā§‹ āĻ–āĻ°āĻš āĻĒā§āĻ°āĻ¤āĻŋ āĻŦāĻ›āĻ° $100 āĻšāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡, āĻāĻŦāĻ‚ āĻ¸āĻŽā§āĻ­āĻžāĻŦā§āĻ¯ āĻ…āĻ°ā§āĻ§ā§‡āĻ•, āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°ā§‡āĻ° āĻ‰āĻĒāĻ° āĻ¨āĻŋāĻ°ā§āĻ­āĻ° āĻ•āĻ°ā§‡āĨ¤ āĻ•āĻŋāĻ›ā§ āĻ¸āĻŽāĻ¯āĻŧā§‡, āĻ‡āĻ¯āĻŧāĻžāĻ¨āĻĄā§‡āĻ•ā§āĻ¸ āĻŽā§‡āĻŸā§āĻ°āĻŋāĻ•āĻž āĻĨā§‡āĻ•ā§‡ āĻ•ā§āĻ˛āĻŋāĻ• āĻšāĻžāĻ‰āĻ¸ āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ā§‡āĻļāĻ¨ā§‡ 10 āĻŸā§āĻ°āĻŋāĻ˛āĻŋāĻ¯āĻŧāĻ¨ āĻ°ā§‡āĻ•āĻ°ā§āĻĄ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻ‡āĻ¯āĻŧāĻžāĻ¨āĻĄā§‡āĻ•ā§āĻ¸ āĻ›āĻžāĻĄāĻŧāĻžāĻ“, āĻŦā§āĻ˛ā§āĻŽāĻŦāĻžāĻ°ā§āĻ— āĻāĻŦāĻ‚ āĻ•ā§āĻ˛āĻžāĻ‰āĻĄāĻĢā§āĻ˛ā§‡āĻ¯āĻŧāĻžāĻ°ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ•ā§āĻ˛āĻŋāĻ• āĻšāĻžāĻ‰āĻ¸āĻ“ āĻ¸āĻĢāĻ˛ āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤

āĻĻā§āĻ‡ āĻŦāĻ›āĻ° āĻ†āĻ—ā§‡ āĻ•āĻžāĻŸāĻŋāĻ¯āĻŧā§‡āĻ›āĻŋ āĻ¤ā§āĻ˛āĻ¨āĻžāĻŽā§‚āĻ˛āĻ• āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖ āĻāĻ•āĻŸāĻŋ āĻŽā§‡āĻļāĻŋāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸, āĻāĻŦāĻ‚ āĻāĻŸāĻŋ āĻšāĻ¯āĻŧā§‡ āĻ“āĻ ā§‡ āĻĻā§āĻ°ā§āĻ¤āĻ¤āĻ° āĻĢā§āĻ°āĻŋ āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ āĻ¸āĻĢāĻŸāĻ“āĻ¯āĻŧā§āĻ¯āĻžāĻ° āĻ†āĻŽāĻŋ āĻ•āĻ–āĻ¨ā§‹ āĻĻā§‡āĻ–ā§‡āĻ›āĻŋāĨ¤ āĻ¤āĻžāĻ°āĻĒāĻ° āĻĨā§‡āĻ•ā§‡, āĻŦāĻŋāĻ•āĻžāĻļāĻ•āĻžāĻ°ā§€āĻ°āĻž āĻ•āĻžāĻĢāĻ•āĻž, HDFS āĻāĻŦāĻ‚ ZStandard āĻ•āĻŽā§āĻĒā§āĻ°ā§‡āĻļāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻ¸āĻš āĻŦā§ˆāĻļāĻŋāĻˇā§āĻŸā§āĻ¯āĻ—ā§āĻ˛āĻŋ āĻ¯ā§‹āĻ— āĻ•āĻ°āĻž āĻŦāĻ¨ā§āĻ§ āĻ•āĻ°ā§‡āĻ¨āĻŋāĨ¤ āĻ—āĻ¤ āĻŦāĻ›āĻ° āĻ¤āĻžāĻ°āĻž āĻ•ā§āĻ¯āĻžāĻ¸āĻ•ā§‡āĻĄāĻŋāĻ‚ āĻ•āĻŽā§āĻĒā§āĻ°ā§‡āĻļāĻ¨ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻ¯ā§‹āĻ— āĻ•āĻ°ā§‡āĻ›ā§‡, āĻāĻŦāĻ‚ āĻŦ-āĻĻā§āĻŦā§€āĻĒ āĻĨā§‡āĻ•ā§‡ āĻŦ-āĻĻā§āĻŦā§€āĻĒ āĻ•ā§‹āĻĄāĻŋāĻ‚ āĻ¸āĻŽā§āĻ­āĻŦ āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻ¸āĻŽāĻ¯āĻŧ āĻ¸āĻŋāĻ°āĻŋāĻœā§‡āĻ° āĻĄā§‡āĻŸāĻž āĻ¸āĻ‚āĻ•ā§āĻšāĻŋāĻ¤ āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ, āĻ—ā§‡āĻœ āĻŽāĻžāĻ¨āĻ—ā§āĻ˛āĻŋ āĻĄā§‡āĻ˛ā§āĻŸāĻž āĻāĻ¨āĻ•ā§‹āĻĄāĻŋāĻ‚āĻ¯āĻŧā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ­āĻžāĻ˛āĻ­āĻžāĻŦā§‡ āĻ¸āĻ‚āĻ•ā§āĻšāĻŋāĻ¤ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡, āĻ¤āĻŦā§‡ āĻ•āĻžāĻ‰āĻ¨ā§āĻŸāĻžāĻ°āĻ—ā§āĻ˛āĻŋāĻ° āĻœāĻ¨ā§āĻ¯, āĻĄā§‡āĻ˛ā§āĻŸāĻž-āĻĨā§‡āĻ•ā§‡-āĻĄā§‡āĻ˛ā§āĻŸāĻž āĻāĻ¨āĻ•ā§‹āĻĄāĻŋāĻ‚ āĻ†āĻ°āĻ“ āĻ­āĻžāĻ˛ āĻšāĻŦā§‡āĨ¤ āĻ­āĻžāĻ˛ āĻ•āĻŽā§āĻĒā§āĻ°ā§‡āĻļāĻ¨ āĻ•ā§āĻ˛āĻŋāĻ•āĻšāĻžāĻ‰āĻ¸ āĻ•āĻ°ā§āĻŽāĻ•ā§āĻˇāĻŽāĻ¤āĻž āĻŽā§‚āĻ˛ āĻšāĻ¯āĻŧā§‡ āĻ‰āĻ ā§‡āĻ›ā§‡.

āĻ•ā§āĻ˛āĻŋāĻ•āĻšāĻžāĻ‰āĻ¸ā§‡ āĻĨāĻžāĻ°ā§āĻĄ-āĻĒāĻžāĻ°ā§āĻŸāĻŋ āĻ˛āĻžāĻ‡āĻŦā§āĻ°ā§‡āĻ°āĻŋ āĻŦāĻžāĻĻā§‡ C++ āĻ•ā§‹āĻĄā§‡āĻ° 170k āĻ˛āĻžāĻ‡āĻ¨ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ āĻāĻŦāĻ‚ āĻāĻŸāĻŋ āĻŦāĻŋāĻ¤āĻ°āĻŖ āĻ•āĻ°āĻž āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸āĻŦāĻšā§‡āĻ¯āĻŧā§‡ āĻ›ā§‹āĻŸ āĻ•ā§‹āĻĄāĻŦā§‡āĻ¸āĻ—ā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻāĻ•āĻŸāĻŋāĨ¤ āĻ¤ā§āĻ˛āĻ¨āĻžāĻ¯āĻŧ, SQLite āĻŦāĻŋāĻ¤āĻ°āĻŖ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻ•āĻ°ā§‡ āĻ¨āĻž āĻāĻŦāĻ‚ C āĻ•ā§‹āĻĄā§‡āĻ° 235 āĻ˛āĻžāĻ‡āĻ¨ āĻ¨āĻŋāĻ¯āĻŧā§‡ āĻ—āĻ āĻŋāĻ¤āĨ¤ āĻāĻ‡ āĻ˛ā§‡āĻ–āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ, 207 āĻœāĻ¨ āĻĒā§āĻ°āĻ•ā§ŒāĻļāĻ˛ā§€ ClickHouse-āĻ āĻ…āĻŦāĻĻāĻžāĻ¨ āĻ°ā§‡āĻ–ā§‡āĻ›ā§‡āĻ¨, āĻāĻŦāĻ‚ āĻ•āĻŽāĻŋāĻŸ āĻ°ā§‡āĻŸ āĻ¸āĻŽā§āĻĒā§āĻ°āĻ¤āĻŋ āĻŦā§ƒāĻĻā§āĻ§āĻŋ āĻĒāĻžāĻšā§āĻ›ā§‡āĨ¤

āĻŽāĻžāĻ°ā§āĻš 2017 āĻ¸āĻžāĻ˛ā§‡, āĻ•ā§āĻ˛āĻŋāĻ• āĻšāĻžāĻ‰āĻ¸ āĻĒāĻ°āĻŋāĻšāĻžāĻ˛āĻ¨āĻž āĻļā§āĻ°ā§ āĻ•āĻ°ā§‡ āĻšā§‡āĻžā§āĻœāĻ˛āĻ— āĻ‰āĻ¨ā§āĻ¨āĻ¯āĻŧāĻ¨ āĻŸā§āĻ°ā§āĻ¯āĻžāĻ• āĻ•āĻ°āĻžāĻ° āĻāĻ•āĻŸāĻŋ āĻ¸āĻšāĻœ āĻ‰āĻĒāĻžāĻ¯āĻŧ āĻšāĻŋāĻ¸āĻžāĻŦā§‡āĨ¤ āĻ¤āĻžāĻ°āĻž āĻāĻ•āĻšā§‡āĻŸāĻŋāĻ¯āĻŧāĻž āĻĄāĻ•ā§āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāĻ¨ āĻĢāĻžāĻ‡āĻ˛āĻŸāĻŋāĻ•ā§‡ āĻāĻ•āĻŸāĻŋ āĻŽāĻžāĻ°ā§āĻ•āĻĄāĻžāĻ‰āĻ¨-āĻ­āĻŋāĻ¤ā§āĻ¤āĻŋāĻ• āĻĢāĻžāĻ‡āĻ˛ āĻļā§āĻ°ā§‡āĻŖāĻŋāĻŦāĻŋāĻ¨ā§āĻ¯āĻžāĻ¸ā§‡ āĻ­ā§‡āĻ™ā§‡ āĻĻāĻŋāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻāĻŦāĻ‚ āĻŦā§ˆāĻļāĻŋāĻˇā§āĻŸā§āĻ¯āĻ—ā§āĻ˛āĻŋ āĻ—āĻŋāĻŸāĻšāĻžāĻŦā§‡āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻŸā§āĻ°ā§āĻ¯āĻžāĻ• āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ āĻāĻŦāĻ‚ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ­āĻžāĻŦā§‡ āĻāĻ‡ āĻ¸āĻĢā§āĻŸāĻ“āĻ¯āĻŧā§āĻ¯āĻžāĻ°āĻŸāĻŋ āĻ—āĻ¤ āĻ•āĻ¯āĻŧā§‡āĻ• āĻŦāĻ›āĻ°ā§‡ āĻ…āĻ¨ā§‡āĻ• āĻŦā§‡āĻļāĻŋ āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ¸āĻ¯ā§‹āĻ—ā§āĻ¯ āĻšāĻ¯āĻŧā§‡ āĻ‰āĻ ā§‡āĻ›ā§‡āĨ¤

āĻāĻ‡ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§ā§‡, āĻ†āĻŽāĻŋ 2-āĻ•ā§‹āĻ° āĻĒā§āĻ°āĻ¸ā§‡āĻ¸āĻ° āĻāĻŦāĻ‚ NVMe āĻ¸ā§āĻŸā§‹āĻ°ā§‡āĻœ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ AWS EC36-āĻ āĻāĻ•āĻŸāĻŋ āĻ•ā§āĻ˛āĻŋāĻ•āĻšāĻžāĻ‰āĻ¸ āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ°ā§‡āĻ° āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻžāĻ°āĻŋāĻ¤āĻž āĻĻā§‡āĻ–āĻ¤ā§‡ āĻ¯āĻžāĻšā§āĻ›āĻŋāĨ¤

āĻ†āĻĒāĻĄā§‡āĻŸ: āĻāĻ‡ āĻĒā§‹āĻ¸ā§āĻŸāĻŸāĻŋāĻ° āĻŽā§‚āĻ˛ āĻĒā§āĻ°āĻ•āĻžāĻļā§‡āĻ° āĻāĻ• āĻ¸āĻĒā§āĻ¤āĻžāĻš āĻĒāĻ°ā§‡, āĻ†āĻŽāĻŋ āĻāĻ•āĻŸāĻŋ āĻ‰āĻ¨ā§āĻ¨āĻ¤ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻžāĻŸāĻŋ āĻĒā§āĻ¨āĻ°āĻžāĻ¯āĻŧ āĻšāĻžāĻ˛āĻŋāĻ¯āĻŧā§‡āĻ›āĻŋ āĻāĻŦāĻ‚ āĻ…āĻ¨ā§‡āĻ• āĻ­āĻžāĻ˛ āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻ…āĻ°ā§āĻœāĻ¨ āĻ•āĻ°ā§‡āĻ›āĻŋāĨ¤ āĻāĻ‡ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻ—ā§āĻ˛āĻŋ āĻĒā§āĻ°āĻ¤āĻŋāĻĢāĻ˛āĻŋāĻ¤ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ‡ āĻĒā§‹āĻ¸ā§āĻŸāĻŸāĻŋ āĻ†āĻĒāĻĄā§‡āĻŸ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤

āĻāĻ•āĻŸāĻŋ AWS EC2 āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ° āĻšāĻ˛āĻ›ā§‡

āĻ†āĻŽāĻŋ āĻāĻ‡ āĻĒā§‹āĻ¸ā§āĻŸā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¤āĻŋāĻ¨āĻŸāĻŋ c5d.9xlarge EC2 āĻĻā§ƒāĻˇā§āĻŸāĻžāĻ¨ā§āĻ¤ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻŦāĨ¤ āĻ¤āĻžāĻĻā§‡āĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋāĻ¤ā§‡ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ 36āĻŸāĻŋ vCPU, 72 GB RAM, 900 GB NVMe SSD āĻ¸ā§āĻŸā§‹āĻ°ā§‡āĻœ āĻāĻŦāĻ‚ 10 Gigabit āĻ¨ā§‡āĻŸāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ•āĻŋāĻ‚ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻ•āĻ°ā§‡āĨ¤ āĻšāĻžāĻšāĻŋāĻĻāĻž āĻ…āĻ¨ā§āĻ¯āĻžāĻ¯āĻŧā§€ āĻ˛āĻžā§āĻš āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ eu-west-1,962-āĻ āĻ¤āĻžāĻĻā§‡āĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋāĻ° āĻĻāĻžāĻŽ $1/āĻ˜āĻ¨ā§āĻŸāĻžāĨ¤ āĻ†āĻŽāĻŋ āĻ†āĻŽāĻžāĻ° āĻ…āĻĒāĻžāĻ°ā§‡āĻŸāĻŋāĻ‚ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻ‰āĻŦā§āĻ¨ā§āĻŸā§ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ° 16.04 LTS āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻŦāĨ¤

āĻĢāĻžāĻ¯āĻŧāĻžāĻ°āĻ“āĻ¯āĻŧāĻžāĻ˛ āĻ¸ā§‡āĻŸ āĻ†āĻĒ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ āĻ¯āĻžāĻ¤ā§‡ āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻŽā§‡āĻļāĻŋāĻ¨ āĻ¸ā§€āĻŽāĻžāĻŦāĻĻā§āĻ§āĻ¤āĻž āĻ›āĻžāĻĄāĻŧāĻžāĻ‡ āĻāĻ•ā§‡ āĻ…āĻĒāĻ°ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ¯ā§‹āĻ—āĻžāĻ¯ā§‹āĻ— āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻāĻŦāĻ‚ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ†āĻŽāĻžāĻ° IPv4 āĻ āĻŋāĻ•āĻžāĻ¨āĻžāĻŸāĻŋ āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ°ā§‡ SSH āĻĻā§āĻŦāĻžāĻ°āĻž āĻ¸āĻžāĻĻāĻž āĻ¤āĻžāĻ˛āĻŋāĻ•āĻžāĻ­ā§āĻ•ā§āĻ¤ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧāĨ¤

āĻ•āĻ°ā§āĻŽāĻ•ā§āĻˇāĻŽ āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤āĻŋāĻ¤ā§‡ NVMe āĻĄā§āĻ°āĻžāĻ‡āĻ­

ClickHouse āĻ•āĻžāĻœ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯, āĻ†āĻŽāĻŋ āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°ā§‡ NVMe āĻĄā§āĻ°āĻžāĻ‡āĻ­ā§‡ āĻāĻ•āĻŸāĻŋ EXT4 āĻĢāĻžāĻ‡āĻ˛ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻŦāĨ¤

$ sudo mkfs -t ext4 /dev/nvme1n1
$ sudo mkdir /ch
$ sudo mount /dev/nvme1n1 /ch

āĻ¸āĻŦāĻ•āĻŋāĻ›ā§ āĻ¸ā§‡āĻŸ āĻ†āĻĒ āĻšāĻ¯āĻŧā§‡ āĻ—ā§‡āĻ˛ā§‡, āĻ†āĻĒāĻ¨āĻŋ āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡ āĻŽāĻžāĻ‰āĻ¨ā§āĻŸ āĻĒāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻāĻŦāĻ‚ 783 GB āĻ¸ā§āĻĒā§‡āĻ¸ āĻ‰āĻĒāĻ˛āĻŦā§āĻ§ āĻĻā§‡āĻ–āĻ¤ā§‡ āĻĒāĻžāĻŦā§‡āĻ¨āĨ¤

$ 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 āĻŦāĻŋāĻ˛āĻŋāĻ¯āĻŧāĻ¨ āĻŸā§āĻ¯āĻžāĻ•ā§āĻ¸āĻŋ āĻ°āĻžāĻ‡āĻĄ āĻĨā§‡āĻ•ā§‡ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§‡āĻ›āĻŋāĨ¤ āĻŦā§āĻ˛āĻ— āĻ°ā§‡āĻĄāĻļāĻŋāĻĢāĻŸā§‡ āĻŦāĻŋāĻ˛āĻŋāĻ¯āĻŧāĻ¨ āĻŸā§āĻ¯āĻžāĻ•ā§āĻ¸āĻŋ āĻŸā§āĻ°āĻŋāĻĒ āĻ†āĻŽāĻŋ āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻāĻ‡ āĻĄā§‡āĻŸāĻžāĻ¸ā§‡āĻŸ āĻ¸āĻ‚āĻ—ā§āĻ°āĻš āĻ•āĻ°ā§‡āĻ›āĻŋ āĻ¤āĻžāĻ° āĻŦāĻŋāĻļāĻĻ āĻŦāĻŋāĻŦāĻ°āĻŖāĨ¤ āĻāĻ—ā§āĻ˛āĻŋ AWS S3 āĻ āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŋāĻ¤ āĻ†āĻ›ā§‡, āĻ¤āĻžāĻ‡ āĻ†āĻŽāĻŋ āĻ†āĻŽāĻžāĻ° āĻ…ā§āĻ¯āĻžāĻ•ā§āĻ¸ā§‡āĻ¸ āĻāĻŦāĻ‚ āĻ—ā§‹āĻĒāĻ¨ āĻ•ā§€āĻ—ā§āĻ˛āĻŋāĻ° āĻ¸āĻžāĻĨā§‡ AWS CLI āĻ¸ā§‡āĻŸ āĻ†āĻĒ āĻ•āĻ°āĻŦā§ˇ

$ 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 āĻĄāĻŋāĻ¸ā§āĻŸā§āĻ°āĻŋāĻŦāĻŋāĻ‰āĻļāĻ¨ āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°āĻŦ, āĻ•āĻžāĻ°āĻŖ āĻāĻŸāĻŋ Apache ZooKeeper āĻšāĻžāĻ˛āĻžāĻ¨ā§‹āĻ° āĻœāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨, āĻ¯āĻž āĻ¤āĻŋāĻ¨āĻŸāĻŋ āĻŽā§‡āĻļāĻŋāĻ¨ā§‡ āĻāĻ•āĻŸāĻŋ āĻŦāĻŋāĻ¤āĻ°āĻŖ āĻ•āĻ°āĻž āĻ•ā§āĻ˛āĻŋāĻ•āĻšāĻžāĻ‰āĻ¸ āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ā§‡āĻļāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨āĨ¤

$ 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 
    --keyserver hkp://keyserver.ubuntu.com:80 
    --recv E0C56BD4
$ echo "deb http://repo.yandex.ru/clickhouse/deb/stable/ main/" | 
    sudo tee /etc/apt/sources.list.d/clickhouse.list
$ sudo apt-get update

$ sudo apt install 
    clickhouse-client 
    clickhouse-server 
    glances 
    zookeeperd

āĻ†āĻŽāĻŋ āĻ•ā§āĻ˛āĻŋāĻ•āĻšāĻžāĻ‰āĻ¸ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻĄāĻŋāĻ°ā§‡āĻ•ā§āĻŸāĻ°āĻŋ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻŦ āĻāĻŦāĻ‚ āĻ¤āĻŋāĻ¨āĻŸāĻŋ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°ā§‡ āĻ•āĻŋāĻ›ā§ āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡āĻļāĻ¨ āĻ“āĻ­āĻžāĻ°āĻ°āĻžāĻ‡āĻĄ āĻ•āĻ°āĻŦāĨ¤

$ 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

āĻ•ā§āĻ˛āĻŋāĻ• āĻšāĻžāĻ‰āĻ¸ā§‡ āĻĄā§‡āĻŸāĻž āĻ†āĻĒāĻ˛ā§‹āĻĄ āĻ•āĻ°āĻž āĻšāĻšā§āĻ›ā§‡

āĻĒā§āĻ°āĻĨāĻŽ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°ā§‡, āĻ†āĻŽāĻŋ āĻāĻ•āĻŸāĻŋ āĻŸā§āĻ°āĻŋāĻĒ āĻŸā§‡āĻŦāĻŋāĻ˛ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻŦ (trips) āĻ¯āĻž āĻ˛āĻ— āĻ‡āĻžā§āĻœāĻŋāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻŸā§āĻ¯āĻžāĻ•ā§āĻ¸āĻŋ āĻ°āĻžāĻ‡āĻĄā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻĄā§‡āĻŸāĻžāĻ¸ā§‡āĻŸ āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖ āĻ•āĻ°āĻŦā§‡āĨ¤

$ clickhouse-client --host=0.0.0.0
 
CREATE TABLE trips (
    trip_id                 UInt32,
    vendor_id               String,

    pickup_datetime         DateTime,
    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 = Log;

āĻ¤āĻžāĻ°āĻĒāĻ°ā§‡ āĻ†āĻŽāĻŋ āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ CSV āĻĢāĻžāĻ‡āĻ˛ āĻ†āĻ¨āĻĒā§āĻ¯āĻžāĻ• āĻ•āĻ°ā§‡ āĻāĻ•āĻŸāĻŋ āĻŸā§āĻ°āĻŋāĻĒ āĻŸā§‡āĻŦāĻŋāĻ˛ā§‡ āĻ˛ā§‹āĻĄ āĻ•āĻ°āĻŋ (trips) āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤āĻŸāĻŋ 55 āĻŽāĻŋāĻ¨āĻŋāĻŸ 10 āĻ¸ā§‡āĻ•ā§‡āĻ¨ā§āĻĄā§‡ āĻ¸āĻŽā§āĻĒāĻ¨ā§āĻ¨ āĻšāĻ¯āĻŧāĨ¤ āĻāĻ‡ āĻ…āĻĒāĻžāĻ°ā§‡āĻļāĻ¨ā§‡āĻ° āĻĒāĻ°ā§‡, āĻĄā§‡āĻŸāĻž āĻĄāĻŋāĻ°ā§‡āĻ•ā§āĻŸāĻ°āĻŋāĻ° āĻ†āĻ•āĻžāĻ° āĻ›āĻŋāĻ˛ 134 āĻœāĻŋāĻŦāĻŋāĨ¤

$ time (for FILENAME in /ch/csv/trips_x*.csv.gz; do
            echo $FILENAME
            gunzip -c $FILENAME | 
                clickhouse-client 
                    --host=0.0.0.0 
                    --query="INSERT INTO trips FORMAT CSV"
        done)

āĻ†āĻŽāĻĻāĻžāĻ¨āĻŋ āĻ—āĻ¤āĻŋ āĻĒā§āĻ°āĻ¤āĻŋ āĻ¸ā§‡āĻ•ā§‡āĻ¨ā§āĻĄā§‡ 155 MB āĻ…āĻ¸āĻ™ā§āĻ•ā§‹āĻšāĻŋāĻ¤ CSV āĻ¸āĻžāĻŽāĻ—ā§āĻ°ā§€āĨ¤ āĻ†āĻŽāĻŋ āĻ¸āĻ¨ā§āĻĻā§‡āĻš āĻ•āĻ°āĻŋ āĻāĻŸāĻŋ GZIP āĻĄāĻŋāĻ•āĻŽā§āĻĒā§āĻ°ā§‡āĻļāĻ¨ā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻŦāĻžāĻ§āĻžāĻ° āĻ•āĻžāĻ°āĻŖā§‡ āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛āĨ¤ xargs āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ¸āĻŽāĻžāĻ¨ā§āĻ¤āĻ°āĻžāĻ˛āĻ­āĻžāĻŦā§‡ āĻ¸āĻŽāĻ¸ā§āĻ¤ 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 --host=0.0.0.0 --query=INSERT INTO trips FORMAT CSV
DISK I/O     R/s    W/s     85.1   0.0 4.65M  708K  9908 ubuntu       0 R  0:50.60   32M     0 gzip -d -c /ch/csv/trips_xac.csv.gz
loop0          0      0     54.9   5.1 8.14G 3.49G  8091 clickhous    0 S  1:44.23     0   45M /usr/bin/clickhouse-server --config=/etc/clickhouse-server/config.xml
loop1          0      0      4.5   0.0     0     0   319 root         0 S  0:07.50    1K     0 kworker/u72:2
nvme0n1        0     3K      2.3   0.0 91.1M 28.9M  9912 root         0 R  0:01.56     0     0 /usr/bin/python3 /usr/bin/glances
nvme0n1p1      0     3K      0.3   0.0     0     0   960 root       -20 S  0:00.10     0     0 kworker/28:1H
nvme1n1    32.1M   495M      0.3   0.0     0     0  1058 root       -20 S  0:00.90     0     0 kworker/23:1H

āĻ†āĻŽāĻŋ āĻšāĻžāĻ˛āĻŋāĻ¯āĻŧā§‡ āĻ¯āĻžāĻ“āĻ¯āĻŧāĻžāĻ° āĻ†āĻ—ā§‡ āĻ†āĻ¸āĻ˛ CSV āĻĢāĻžāĻ‡āĻ˛ āĻŽā§āĻ›ā§‡ NVMe āĻĄā§āĻ°āĻžāĻ‡āĻ­ā§‡ āĻœāĻžāĻ¯āĻŧāĻ—āĻž āĻ–āĻžāĻ˛āĻŋ āĻ•āĻ°āĻŦāĨ¤

$ sudo rm -fr /ch/csv

āĻ•āĻ˛āĻžāĻŽ āĻĢāĻ°ā§āĻŽā§‡ āĻ°ā§‚āĻĒāĻžāĻ¨ā§āĻ¤āĻ° āĻ•āĻ°ā§āĻ¨

āĻ˛āĻ— āĻ•ā§āĻ˛āĻŋāĻ•āĻšāĻžāĻ‰āĻ¸ āĻ‡āĻžā§āĻœāĻŋāĻ¨ āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻŸā§āĻ°āĻŋāĻ‚-āĻ­āĻŋāĻ¤ā§āĻ¤āĻŋāĻ• āĻŦāĻŋāĻ¨ā§āĻ¯āĻžāĻ¸ā§‡ āĻĄā§‡āĻŸāĻž āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖ āĻ•āĻ°āĻŦā§‡āĨ¤ āĻĻā§āĻ°ā§āĻ¤ āĻĄā§‡āĻŸāĻž āĻ…āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ āĻ•āĻ°āĻ¤ā§‡, āĻ†āĻŽāĻŋ MergeTree āĻ‡āĻžā§āĻœāĻŋāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻāĻŸāĻŋāĻ•ā§‡ āĻāĻ•āĻŸāĻŋ āĻ•āĻ˛āĻžāĻŽ āĻŦāĻŋāĻ¨ā§āĻ¯āĻžāĻ¸ā§‡ āĻ°ā§‚āĻĒāĻžāĻ¨ā§āĻ¤āĻ° āĻ•āĻ°āĻŋāĨ¤

$ clickhouse-client --host=0.0.0.0

āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤āĻŸāĻŋ 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 --config=/etc/clickhouse-server/config.xml
DISK I/O     R/s    W/s      2.6   0.0 90.4M 28.3M  9948 root         0 R  1:18.53     0     0 /usr/bin/python3 /usr/bin/glances
loop0          0      0      1.3   0.0     0     0   203 root         0 S  0:09.82     0     0 kswapd0
loop1          0      0      0.3   0.1  315M 61.3M 15701 ubuntu       0 S  0:00.40     0     0 clickhouse-client --host=0.0.0.0
nvme0n1        0     3K      0.3   0.0     0     0     7 root         0 S  0:00.83     0     0 rcu_sched
nvme0n1p1      0     3K      0.0   0.0     0     0   142 root         0 S  0:00.22     0     0 migration/27
nvme1n1    25.8M   330M      0.0   0.0 59.7M 1.79M  2764 ubuntu       0 S  0:00.00     0     0 (sd-pam)

āĻļā§‡āĻˇ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻžāĻ¯āĻŧ, āĻŦā§‡āĻļ āĻ•āĻ¯āĻŧā§‡āĻ•āĻŸāĻŋ āĻ•āĻ˛āĻžāĻŽ āĻ°ā§‚āĻĒāĻžāĻ¨ā§āĻ¤āĻ°āĻŋāĻ¤ āĻāĻŦāĻ‚ āĻĒā§āĻ¨āĻ°āĻžāĻ¯āĻŧ āĻ—āĻŖāĻ¨āĻž āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛āĨ¤ āĻ†āĻŽāĻŋ āĻĻā§‡āĻ–ā§‡āĻ›āĻŋ āĻ¯ā§‡ āĻāĻ‡ āĻĢāĻžāĻ‚āĻļāĻ¨āĻ—ā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻ•āĻŋāĻ›ā§ āĻ†āĻ° āĻāĻ‡ āĻĄā§‡āĻŸāĻžāĻ¸ā§‡āĻŸā§‡ āĻ¸āĻ āĻŋāĻ•āĻ­āĻžāĻŦā§‡ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡ āĻ¨āĻžāĨ¤ āĻāĻ‡ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻŸāĻŋ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯, āĻ†āĻŽāĻŋ āĻ…āĻ¨ā§āĻĒāĻ¯ā§āĻ•ā§āĻ¤ āĻĢāĻžāĻ‚āĻļāĻ¨āĻ—ā§āĻ˛āĻŋ āĻ¸āĻ°āĻŋāĻ¯āĻŧā§‡ āĻĻāĻŋāĻ¯āĻŧā§‡āĻ›āĻŋ āĻāĻŦāĻ‚ āĻ†āĻ°āĻ“ āĻ¸ā§‚āĻ•ā§āĻˇā§āĻŽ-āĻĻāĻžāĻ¨āĻžāĻ¯ā§āĻ•ā§āĻ¤ āĻĒā§āĻ°āĻ•āĻžāĻ°ā§‡ āĻ°ā§‚āĻĒāĻžāĻ¨ā§āĻ¤āĻ° āĻ¨āĻž āĻ•āĻ°ā§‡āĻ‡ āĻĄā§‡āĻŸāĻž āĻ˛ā§‹āĻĄ āĻ•āĻ°ā§‡āĻ›āĻŋāĨ¤

āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ° āĻĄā§‡āĻŸāĻž āĻŦāĻŋāĻ¤āĻ°āĻŖ

āĻ†āĻŽāĻŋ āĻ¤āĻŋāĻ¨āĻŸāĻŋ āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ° āĻ¨ā§‹āĻĄ āĻœā§āĻĄāĻŧā§‡ āĻĄā§‡āĻŸāĻž āĻŦāĻŋāĻ¤āĻ°āĻŖ āĻ•āĻ°āĻŦāĨ¤ āĻļā§āĻ°ā§ āĻ•āĻ°āĻ¤ā§‡, āĻ¨ā§€āĻšā§‡ āĻ†āĻŽāĻŋ āĻ¤āĻŋāĻ¨āĻŸāĻŋ āĻŽā§‡āĻļāĻŋāĻ¨ā§‡ āĻāĻ•āĻŸāĻŋ āĻŸā§‡āĻŦāĻŋāĻ˛ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻŦāĨ¤

$ clickhouse-client --host=0.0.0.0

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());

āĻ¤āĻžāĻ°āĻĒāĻ° āĻ†āĻŽāĻŋ MergeTree āĻ­āĻŋāĻ¤ā§āĻ¤āĻŋāĻ• āĻŸā§‡āĻŦāĻŋāĻ˛ āĻĨā§‡āĻ•ā§‡ āĻ¤āĻŋāĻ¨āĻŸāĻŋ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°ā§‡ āĻĄā§‡āĻŸāĻž āĻ•āĻĒāĻŋ āĻ•āĻ°āĻŦāĨ¤ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤āĻŸāĻŋ 34 āĻŽāĻŋāĻ¨āĻŋāĻŸ 44 āĻ¸ā§‡āĻ•ā§‡āĻ¨ā§āĻĄā§‡ āĻ¸āĻŽā§āĻĒāĻ¨ā§āĻ¨ āĻšāĻ¯āĻŧāĨ¤

INSERT INTO trips_mergetree_x3
    SELECT * FROM trips_mergetree;

āĻ‰āĻĒāĻ°ā§‡āĻ° āĻ…āĻĒāĻžāĻ°ā§‡āĻļāĻ¨ā§‡āĻ° āĻĒāĻ°, āĻ†āĻŽāĻŋ āĻ¸āĻ°ā§āĻŦā§‹āĻšā§āĻš āĻ¸ā§āĻŸā§‹āĻ°ā§‡āĻœ āĻšāĻŋāĻšā§āĻ¨ āĻ…āĻ¤āĻŋāĻ•ā§āĻ°āĻŽ āĻ•āĻ°āĻ¤ā§‡ āĻ•ā§āĻ˛āĻŋāĻ•āĻšāĻžāĻ‰āĻ¸āĻ•ā§‡ 15 āĻŽāĻŋāĻ¨āĻŋāĻŸ āĻ¸āĻŽāĻ¯āĻŧ āĻĻāĻŋāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛āĻžāĻŽāĨ¤ āĻ¤āĻŋāĻ¨āĻŸāĻŋ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°ā§‡āĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋāĻ¤ā§‡ āĻĄā§‡āĻŸāĻž āĻĄāĻŋāĻ°ā§‡āĻ•ā§āĻŸāĻ°āĻŋāĻ—ā§āĻ˛āĻŋ āĻ¯āĻĨāĻžāĻ•ā§āĻ°āĻŽā§‡ 264 āĻœāĻŋāĻŦāĻŋ, 34 āĻœāĻŋāĻŦāĻŋ āĻāĻŦāĻ‚ 33 āĻœāĻŋāĻŦāĻŋ āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤

āĻ•ā§āĻ˛āĻŋāĻ• āĻšāĻžāĻ‰āĻ¸ āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ° āĻ•āĻ°ā§āĻŽāĻ•ā§āĻˇāĻŽāĻ¤āĻž āĻŽā§‚āĻ˛ā§āĻ¯āĻžāĻ¯āĻŧāĻ¨

āĻŸā§‡āĻŦāĻŋāĻ˛ā§‡ āĻĒā§āĻ°āĻ¤āĻŋāĻŸāĻŋ āĻ•ā§āĻ¯ā§‹āĻ¯āĻŧāĻžāĻ°ā§€ āĻāĻ•āĻžāĻ§āĻŋāĻ•āĻŦāĻžāĻ° āĻšāĻžāĻ˛āĻžāĻ¨ā§‹āĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻ†āĻŽāĻŋ āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§€āĻ¤ā§‡ āĻ¯āĻž āĻĻā§‡āĻ–ā§‡āĻ›āĻŋāĻ˛āĻžāĻŽ āĻ¤āĻž āĻšāĻ˛ āĻĻā§āĻ°ā§āĻ¤āĻ¤āĻŽ āĻ¸āĻŽāĻ¯āĻŧ trips_mergetree_x3.

$ clickhouse-client --host=0.0.0.0

āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤āĻŸāĻŋ 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 āĻ¸ā§‡āĻ•ā§‡āĻ¨ā§āĻĄā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻ¸āĻŽā§āĻĒāĻ¨ā§āĻ¨ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ.

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;

āĻ¤ā§āĻ˛āĻ¨āĻž āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯, āĻ†āĻŽāĻŋ āĻāĻ•āĻŸāĻŋ MergeTree-āĻ­āĻŋāĻ¤ā§āĻ¤āĻŋāĻ• āĻŸā§‡āĻŦāĻŋāĻ˛ā§‡ āĻāĻ•āĻ‡ āĻĒā§āĻ°āĻļā§āĻ¨āĻ—ā§āĻ˛āĻŋ āĻšāĻžāĻ˛āĻŋāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛āĻžāĻŽ āĻ¯āĻž āĻāĻ•āĻšā§‡āĻŸāĻŋāĻ¯āĻŧāĻžāĻ­āĻžāĻŦā§‡ āĻĒā§āĻ°āĻĨāĻŽ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°ā§‡ āĻĨāĻžāĻ•ā§‡āĨ¤

āĻāĻ•āĻ• āĻ¨ā§‹āĻĄ āĻ•āĻ°ā§āĻŽāĻ•ā§āĻˇāĻŽāĻ¤āĻž āĻŽā§‚āĻ˛ā§āĻ¯āĻžāĻ¯āĻŧāĻ¨ 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;

āĻĢāĻ˛āĻžāĻĢāĻ˛ā§‡āĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻĢāĻ˛āĻ¨

āĻāĻ‡ āĻĒā§āĻ°āĻĨāĻŽāĻŦāĻžāĻ° āĻ¯ā§‡ āĻāĻ•āĻŸāĻŋ āĻŦāĻŋāĻ¨āĻžāĻŽā§‚āĻ˛ā§āĻ¯ā§‡āĻ° CPU-āĻ­āĻŋāĻ¤ā§āĻ¤āĻŋāĻ• āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸ āĻ†āĻŽāĻžāĻ° āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻžāĻ¯āĻŧ āĻāĻ•āĻŸāĻŋ GPU-āĻ­āĻŋāĻ¤ā§āĻ¤āĻŋāĻ• āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸āĻ•ā§‡ āĻ›āĻžāĻĄāĻŧāĻŋāĻ¯āĻŧā§‡ āĻ¯ā§‡āĻ¤ā§‡ āĻ¸āĻ•ā§āĻˇāĻŽ āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻ¸ā§‡āĻ‡ GPU-āĻ­āĻŋāĻ¤ā§āĻ¤āĻŋāĻ• āĻĄāĻžāĻŸāĻžāĻŦā§‡āĻ¸āĻŸāĻŋ āĻ¤āĻ–āĻ¨ āĻĨā§‡āĻ•ā§‡ āĻĻā§āĻŸāĻŋ āĻ¸āĻ‚āĻļā§‹āĻ§āĻ¨ āĻ•āĻ°ā§‡āĻ›ā§‡, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ¤āĻŦā§āĻ“, āĻāĻ•āĻŸāĻŋ āĻāĻ•āĻ• āĻ¨ā§‹āĻĄā§‡ āĻ•ā§āĻ˛āĻŋāĻ•āĻšāĻžāĻ‰āĻ¸ āĻ¯ā§‡ āĻ•āĻ°ā§āĻŽāĻ•ā§āĻˇāĻŽāĻ¤āĻž āĻĻā§‡āĻ–āĻŋāĻ¯āĻŧā§‡āĻ›ā§‡ āĻ¤āĻž āĻ–ā§āĻŦāĻ‡ āĻšāĻŋāĻ¤ā§āĻ¤āĻžāĻ•āĻ°ā§āĻˇāĻ•āĨ¤

āĻāĻ•āĻ‡ āĻ¸āĻŽāĻ¯āĻŧā§‡, āĻ¯āĻ–āĻ¨ āĻāĻ•āĻŸāĻŋ āĻĄāĻŋāĻ¸ā§āĻŸā§āĻ°āĻŋāĻŦāĻŋāĻ‰āĻŸā§‡āĻĄ āĻ‡āĻžā§āĻœāĻŋāĻ¨ā§‡ āĻ•ā§āĻ¯ā§‹āĻ¯āĻŧāĻžāĻ°ā§€ 1 āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ° āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ, āĻ¤āĻ–āĻ¨ āĻ“āĻ­āĻžāĻ°āĻšā§‡āĻĄ āĻ–āĻ°āĻšāĻ—ā§āĻ˛āĻŋ āĻ‰āĻšā§āĻš āĻŽāĻžāĻ¤ā§āĻ°āĻžāĻ° āĻāĻ•āĻŸāĻŋ āĻ†āĻĻā§‡āĻļ āĻšāĻ¯āĻŧāĨ¤ āĻ†āĻŽāĻŋ āĻ†āĻļāĻž āĻ•āĻ°āĻŋ āĻ†āĻŽāĻŋ āĻāĻ‡ āĻĒā§‹āĻ¸ā§āĻŸā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻŽāĻžāĻ° āĻ—āĻŦā§‡āĻˇāĻŖāĻžāĻ¯āĻŧ āĻ•āĻŋāĻ›ā§ āĻŽāĻŋāĻ¸ āĻ•āĻ°ā§‡āĻ›āĻŋ, āĻ•āĻžāĻ°āĻŖ āĻ†āĻŽāĻŋ āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ°ā§‡ āĻ†āĻ°āĻ“ āĻ¨ā§‹āĻĄ āĻ¯ā§āĻ•ā§āĻ¤ āĻ•āĻ°āĻžāĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻžāĻĨā§‡ āĻ•ā§āĻ¯ā§‹āĻ¯āĻŧāĻžāĻ°ā§€ āĻ¸āĻŽāĻ¯āĻŧ āĻ•āĻŽā§‡ āĻ¯ā§‡āĻ¤ā§‡ āĻĻā§‡āĻ–ā§‡ āĻ­āĻžāĻ˛ā§‹ āĻ˛āĻžāĻ—āĻŦā§‡āĨ¤ āĻ¯āĻžāĻ‡āĻšā§‹āĻ•, āĻāĻŸāĻŋ āĻ‰āĻ˛ā§āĻ˛ā§‡āĻ–āĻ¯ā§‹āĻ—ā§āĻ¯ āĻ¯ā§‡ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻļā§āĻ¨āĻ—ā§āĻ˛āĻŋ āĻšāĻžāĻ˛āĻžāĻ¨ā§‹āĻ° āĻ¸āĻŽāĻ¯āĻŧ, āĻ•āĻžāĻ°ā§āĻ¯āĻ•ā§āĻˇāĻŽāĻ¤āĻž āĻĒā§āĻ°āĻžāĻ¯āĻŧ 2 āĻ—ā§āĻŖ āĻŦā§ƒāĻĻā§āĻ§āĻŋ āĻĒā§‡āĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤

āĻāĻŸāĻž āĻšāĻŽā§ŽāĻ•āĻžāĻ° āĻšāĻŦā§‡ āĻ¯āĻĻāĻŋ ClickHouse āĻ†āĻ˛āĻžāĻĻāĻž āĻ†āĻ˛āĻžāĻĻāĻž āĻ¸ā§āĻŸā§‹āĻ°ā§‡āĻœ āĻāĻŦāĻ‚ āĻ—āĻŖāĻ¨āĻž āĻ•āĻ°āĻ¤ā§‡ āĻ¸āĻ•ā§āĻˇāĻŽ āĻšāĻ“āĻ¯āĻŧāĻžāĻ° āĻĻāĻŋāĻ• āĻĨā§‡āĻ•ā§‡ āĻŦāĻŋāĻ•āĻļāĻŋāĻ¤ āĻšāĻ¯āĻŧ āĻ¯āĻžāĻ¤ā§‡ āĻ¤āĻžāĻ°āĻž āĻ¸ā§āĻŦāĻžāĻ§ā§€āĻ¨āĻ­āĻžāĻŦā§‡ āĻ¸ā§āĻ•ā§‡āĻ˛ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤ āĻāĻ‡āĻšāĻĄāĻŋāĻāĻĢāĻāĻ¸-āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨, āĻ¯āĻž āĻ—āĻ¤ āĻŦāĻ›āĻ° āĻ¯ā§‹āĻ— āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛, āĻāĻŸāĻŋ āĻāĻ‡ āĻĻāĻŋāĻ•ā§‡ āĻāĻ•āĻŸāĻŋ āĻĒāĻĻāĻ•ā§āĻˇā§‡āĻĒ āĻšāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤ āĻ•āĻŽā§āĻĒāĻŋāĻ‰āĻŸāĻŋāĻ‚āĻ¯āĻŧā§‡āĻ° āĻĒāĻ°āĻŋāĻĒā§āĻ°ā§‡āĻ•ā§āĻˇāĻŋāĻ¤ā§‡, āĻ•ā§āĻ˛āĻžāĻ¸ā§āĻŸāĻžāĻ°ā§‡ āĻ†āĻ°āĻ“ āĻ¨ā§‹āĻĄ āĻ¯ā§āĻ•ā§āĻ¤ āĻ•āĻ°ā§‡ āĻ¯āĻĻāĻŋ āĻāĻ•āĻŸāĻŋ āĻāĻ•āĻ• āĻĒā§āĻ°āĻļā§āĻ¨ āĻ¤ā§āĻŦāĻ°āĻžāĻ¨ā§āĻŦāĻŋāĻ¤ āĻ•āĻ°āĻž āĻ¯āĻžāĻ¯āĻŧ, āĻ¤āĻŦā§‡ āĻāĻ‡ āĻ¸āĻĢā§āĻŸāĻ“āĻ¯āĻŧā§āĻ¯āĻžāĻ°āĻŸāĻŋāĻ° āĻ­āĻŦāĻŋāĻˇā§āĻ¯āĻ¤ āĻ–ā§āĻŦ āĻ‰āĻœā§āĻœā§āĻŦāĻ˛ āĻšāĻŦā§‡āĨ¤

āĻāĻ‡ āĻĒā§‹āĻ¸ā§āĻŸ āĻĒāĻĄāĻŧāĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸āĻŽāĻ¯āĻŧ āĻ¨ā§‡āĻ“āĻ¯āĻŧāĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ§āĻ¨ā§āĻ¯āĻŦāĻžāĻĻ. āĻ†āĻŽāĻŋ āĻ‰āĻ¤ā§āĻ¤āĻ° āĻ†āĻŽā§‡āĻ°āĻŋāĻ•āĻž āĻāĻŦāĻ‚ āĻ‡āĻ‰āĻ°ā§‹āĻĒā§‡āĻ° āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸāĻĻā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻĒāĻ°āĻžāĻŽāĻ°ā§āĻļ, āĻ¸ā§āĻĨāĻžāĻĒāĻ¤ā§āĻ¯ āĻāĻŦāĻ‚ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻŋāĻ• āĻ‰āĻ¨ā§āĻ¨āĻ¯āĻŧāĻ¨ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻž āĻ…āĻĢāĻžāĻ° āĻ•āĻ°āĻŋāĨ¤ āĻ†āĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻ†āĻŽāĻžāĻ° āĻĒāĻ°āĻžāĻŽāĻ°ā§āĻļāĻ—ā§āĻ˛āĻŋ āĻ†āĻĒāĻ¨āĻžāĻ° āĻŦā§āĻ¯āĻŦāĻ¸āĻžāĻ¯āĻŧāĻ•ā§‡ āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻ¤āĻž āĻ¨āĻŋāĻ¯āĻŧā§‡ āĻ†āĻ˛ā§‹āĻšāĻ¨āĻž āĻ•āĻ°āĻ¤ā§‡ āĻšāĻžāĻ¨, āĻ…āĻ¨ā§āĻ—ā§āĻ°āĻš āĻ•āĻ°ā§‡ āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻ†āĻŽāĻžāĻ° āĻ¸āĻžāĻĨā§‡ āĻ¯ā§‹āĻ—āĻžāĻ¯ā§‹āĻ— āĻ•āĻ°ā§āĻ¨ā§ˇ āĻ˛āĻŋāĻ™ā§āĻ•āĻĄāĻ‡āĻ¨.

āĻ‰āĻ¤ā§āĻ¸: www.habr.com

āĻāĻ•āĻŸāĻŋ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻœā§āĻĄāĻŧā§āĻ¨