ํด๋ฆญํ•˜์šฐ์Šค๋กœ์˜ ์ด์ „: 3๋…„ ํ›„

XNUMX๋…„ ์ „ ๋ฌด๋Œ€ ์œ„์˜ Yandex์˜ Viktor Tarnavsky์™€ Alexey Milovidov HighLoad ++ ๋งํ•œ, ClickHouse๊ฐ€ ์–ผ๋งˆ๋‚˜ ์ข‹์€์ง€, ์†๋„๊ฐ€ ๋Š๋ ค์ง€์ง€ ์•Š๋Š”์ง€. ๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ ์Šคํ…Œ์ด์ง€์—๋Š” ์•Œ๋ ‰์‚ฐ๋” ์ž์ด์ฒดํ”„ ั ๋ณด๊ณ ์„œ ์ด์‚ฌ์— ๋Œ€ํ•ด ํด๋ฆญ ํ•˜์šฐ์Šค ๋‹ค๋ฅธ ๋ถ„์„ DBMS์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฐ๋ก ์„ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค. ํด๋ฆญ ํ•˜์šฐ์Šค, ๋ฌผ๋ก  ์ข‹์ง€๋งŒ ๊ทธ๋‹ค์ง€ ํŽธ๋ฆฌํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. 2016๋…„ ๋‹น์‹œ ํšŒ์‚ฌ๋Š” LifeStreet๋‹น์‹œ Alexander๊ฐ€ ๊ทผ๋ฌดํ•˜๋˜ ๊ณณ์€ ๋ฉ€ํ‹ฐ ํŽ˜ํƒ€๋ฐ”์ดํŠธ ๋ถ„์„ ์‹œ์Šคํ…œ์„ ํด๋ฆญ ํ•˜์šฐ์Šค, ์•Œ ์ˆ˜ ์—†๋Š” ์œ„ํ—˜์ด ๊ฐ€๋“ํ•œ ๋งคํ˜น์ ์ธ โ€œ๋…ธ๋ž€ ๋ฒฝ๋Œ๊ธธโ€์ด์—ˆ์Šต๋‹ˆ๋‹ค~ ํด๋ฆญ ํ•˜์šฐ์Šค ๊ทธ๋•Œ๋Š” ์ง€๋ขฐ๋ฐญ ๊ฐ™์•˜์–ด์š”.

XNUMX ๋…„ ํ›„์— ํด๋ฆญ ํ•˜์šฐ์Šค ํ›จ์”ฌ ๋” ์ข‹์•„์กŒ์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ๊ฐ„ ๋™์•ˆ Alexander๋Š” Altinity๋ผ๋Š” ํšŒ์‚ฌ๋ฅผ ์„ค๋ฆฝํ–ˆ์Šต๋‹ˆ๋‹ค. ํด๋ฆญ ํ•˜์šฐ์Šค ์ˆ˜์‹ญ ๊ฐœ์˜ ํ”„๋กœ์ ํŠธ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ Yandex์˜ ๋™๋ฃŒ๋“ค๊ณผ ํ•จ๊ป˜ ์ œํ’ˆ ์ž์ฒด๋„ ๊ฐœ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ ํด๋ฆญ ํ•˜์šฐ์Šค ์—ฌ์ „ํžˆ ํ‰์˜จํ•œ ์‚ฐ์ฑ…์€ ์•„๋‹ˆ์ง€๋งŒ ๋” ์ด์ƒ ์ง€๋ขฐ๋ฐญ๋„ ์•„๋‹™๋‹ˆ๋‹ค.

Alexander๋Š” 2003๋…„๋ถ€ํ„ฐ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์„ ๋‹ค๋ฃจ๋ฉด์„œ ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐœ๋ฐœํ•ด ์™”์Šต๋‹ˆ๋‹ค. MySQL, ์˜ค๋ผํด ะธ ๋ฒ„ํ‹ฐ ์นด. ๋งˆ์ง€๋ง‰์— HighLoad ++ 2019 ์‚ฌ์šฉ์˜ ์„ ๊ตฌ์ž ์ค‘ ํ•œ ๋ช…์ธ ์•Œ๋ ‰์‚ฐ๋”(Alexander) ํด๋ฆญ ํ•˜์šฐ์Šค, ์ด DBMS๊ฐ€ ์ง€๊ธˆ ๋ฌด์—‡์ธ์ง€ ๋งํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฃผ์š” ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ์•Œ์•„ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ํด๋ฆญ ํ•˜์šฐ์Šค: ๋‹ค๋ฅธ ์‹œ์Šคํ…œ๊ณผ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅธ์ง€, ์–ด๋–ค ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ํšจ๊ณผ์ ์ธ์ง€. ์˜ˆ์ œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์Œ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•œ ์ตœ๊ทผ์˜ ํ”„๋กœ์ ํŠธ ํ…Œ์ŠคํŠธ ์‚ฌ๋ก€๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ํด๋ฆญ ํ•˜์šฐ์Šค.


ํšŒ๊ณ : 3๋…„ ์ „์— ์ผ์–ด๋‚œ ์ผ

XNUMX๋…„ ์ „ ํšŒ์‚ฌ๋ฅผ ์ด์ „ํ–ˆ์Šต๋‹ˆ๋‹ค. LifeStreet ์— ํด๋ฆญ ํ•˜์šฐ์Šค ๋‹ค๋ฅธ ๋ถ„์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๊ฐ€์ ธ์˜จ ๊ด‘๊ณ  ๋„คํŠธ์›Œํฌ ๋ถ„์„ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • 2016๋…„ XNUMX์›”. ์˜คํ”ˆ ์†Œ์Šค ์ถœ์—ฐ ํด๋ฆญ ํ•˜์šฐ์Šค ๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ ํ”„๋กœ์ ํŠธ๊ฐ€ ์‹œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • 8 ์›”. ๊ฐœ๋…์˜ ์ฆ๊ฑฐ: ๋Œ€๊ทœ๋ชจ ๊ด‘๊ณ  ๋„คํŠธ์›Œํฌ, ์ธํ”„๋ผ ๋ฐ 200-300ํ…Œ๋ผ๋ฐ”์ดํŠธ์˜ ๋ฐ์ดํ„ฐ;
  • ์‹ญ์›”. ์ฒซ ๋ฒˆ์งธ ์ƒ์‚ฐ ๋ฐ์ดํ„ฐ;
  • 10์›”. ์ „์ฒด ์ œํ’ˆ ๋กœ๋“œ๋Š” ํ•˜๋ฃจ์— 50์–ต~XNUMX์–ต ๊ฐœ์˜ ์ด๋ฒคํŠธ์ž…๋‹ˆ๋‹ค.
  • 2017๋…„ XNUMX์›”. ์‚ฌ์šฉ์ž๋ฅผ ๋‹ค์Œ์œผ๋กœ ์„ฑ๊ณต์ ์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ํด๋ฆญ ํ•˜์šฐ์Šค, 2,5๊ฐœ ์„œ๋ฒ„๋กœ ๊ตฌ์„ฑ๋œ ํด๋Ÿฌ์Šคํ„ฐ์— 60ํŽ˜ํƒ€๋ฐ”์ดํŠธ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๊ณผ์ •์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ดํ•ด๊ฐ€ ์ปค์กŒ์Šต๋‹ˆ๋‹ค. ํด๋ฆญ ํ•˜์šฐ์Šค ์ž‘์—…ํ•˜๊ธฐ ์ข‹์€ ์ข‹์€ ์‹œ์Šคํ…œ์ด์ง€๋งŒ ์ด๊ฒƒ์€ Yandex์˜ ๋‚ด๋ถ€ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฏธ๋ฌ˜ํ•œ ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. Yandex๋Š” ๋จผ์ € ์ž์ฒด ๋‚ด๋ถ€ ๊ณ ๊ฐ์„ ์ฒ˜๋ฆฌํ•œ ๋‹ค์Œ ์ปค๋ฎค๋‹ˆํ‹ฐ์™€ ์™ธ๋ถ€ ์‚ฌ์šฉ์ž์˜ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ฒ˜๋ฆฌํ•˜๋ฉฐ ClickHouse๋Š” ๋งŽ์€ ๊ธฐ๋Šฅ ์˜์—ญ์—์„œ ๊ธฐ์—… ์ˆ˜์ค€์— ๋„๋‹ฌํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” 2017๋…„ XNUMX์›”์— Altinity๋ฅผ ์„ค๋ฆฝํ–ˆ์Šต๋‹ˆ๋‹ค. ํด๋ฆญ ํ•˜์šฐ์Šค Yandex๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์—๊ฒŒ๋„ ๋”์šฑ ๋น ๋ฅด๊ณ  ํŽธ๋ฆฌํ•ด์กŒ์Šต๋‹ˆ๋‹ค. ์ด์ œ ์šฐ๋ฆฌ๋Š”:

  • ์šฐ๋ฆฌ๋Š” ๋‹ค์Œ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์†”๋ฃจ์…˜ ๊ตฌ์ถ•์„ ๊ต์œกํ•˜๊ณ  ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ํด๋ฆญ ํ•˜์šฐ์Šค ๊ณ ๊ฐ์ด ๋ฌธ์ œ์— ๋น ์ง€์ง€ ์•Š๊ณ  ๊ถ๊ทน์ ์œผ๋กœ ์†”๋ฃจ์…˜์ด ์ž‘๋™ํ•˜๋„๋ก
  • ์šฐ๋ฆฌ๋Š” ์—ฐ์ค‘๋ฌดํœด 24์‹œ๊ฐ„ ์ง€์›์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค ํด๋ฆญ ํ•˜์šฐ์Šค- ์„ค์น˜;
  • ์šฐ๋ฆฌ๋Š” ์ž์ฒด ์ƒํƒœ๊ณ„ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐœ๋ฐœํ•ฉ๋‹ˆ๋‹ค.
  • ์šฐ๋ฆฌ๋Š” ์ ๊ทน์ ์œผ๋กœ ์ž์‹ ์—๊ฒŒ ํ—Œ์‹ ํ•ฉ๋‹ˆ๋‹ค. ํด๋ฆญ ํ•˜์šฐ์Šค, ํŠน์ • ๊ธฐ๋Šฅ์„ ๋ณด๋ ค๋Š” ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์— ์‘๋‹ตํ•ฉ๋‹ˆ๋‹ค.

๋ฌผ๋ก  ์ด์‚ฌ๋„ ๋„์™€๋“œ๋ฆฝ๋‹ˆ๋‹ค. ํด๋ฆญ ํ•˜์šฐ์Šค ั MySQL์˜, ๋ฒ„ํ‹ฐ ์นด, ์‹ ํƒ, ๊ทธ๋ฆฐํ”Œ๋Ÿผ, ์ ์ƒ‰ ํŽธ์ด ๊ทธ๋ฆฌ๊ณ  ๋‹ค๋ฅธ ์‹œ์Šคํ…œ. ์šฐ๋ฆฌ๋Š” ๋‹ค์–‘ํ•œ ์›€์ง์ž„์— ์ฐธ์—ฌํ•ด์™”๊ณ  ๋ชจ๋‘ ์„ฑ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค.

ํด๋ฆญํ•˜์šฐ์Šค๋กœ์˜ ์ด์ „: 3๋…„ ํ›„

์™œ ์ด์‚ฌํ•˜๋Š”๊ฐ€? ํด๋ฆญ ํ•˜์šฐ์Šค

์†๋„๋ฅผ ๋Šฆ์ถ”์ง€ ์•Š์Šต๋‹ˆ๋‹ค! ์ด๊ฒƒ์ด ์ฃผ๋œ ์ด์œ ์ž…๋‹ˆ๋‹ค. ํด๋ฆญ ํ•˜์šฐ์Šค - ๋‹ค์–‘ํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค์— ๋Œ€ํ•œ ๋งค์šฐ ๋น ๋ฅธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค:

ํด๋ฆญํ•˜์šฐ์Šค๋กœ์˜ ์ด์ „: 3๋…„ ํ›„

์˜ค๋žซ๋™์•ˆ ์‚ฌ๋žŒ๋“ค๊ณผ ํ•จ๊ป˜ ์ผํ•ด ์˜จ ์‚ฌ๋žŒ๋“ค์˜ ๋ฌด์ž‘์œ„ ์ธ์šฉ๋ฌธ ํด๋ฆญ ํ•˜์šฐ์Šค.

ํ™•์žฅ์„ฑ. ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ๋Š” ํ•˜๋‚˜์˜ ํ•˜๋“œ์›จ์–ด๋กœ ์ข‹์€ ์„ฑ๋Šฅ์„ ์–ป์„ ์ˆ˜ ์žˆ์ง€๋งŒ ํด๋ฆญ ํ•˜์šฐ์Šค ๊ฐ„๋‹จํžˆ ์„œ๋ฒ„๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ์ˆ˜์ง์ ์œผ๋กœ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ˆ˜ํ‰์ ์œผ๋กœ๋„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์ด ์›ํ•˜๋Š” ๋งŒํผ ์›ํ™œํ•˜๊ฒŒ ์ž‘๋™ํ•˜์ง€๋Š” ์•Š์ง€๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋น„์ฆˆ๋‹ˆ์Šค ์„ฑ์žฅ์— ๋”ฐ๋ผ ์‹œ์Šคํ…œ์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ์†”๋ฃจ์…˜์— ๊ตญํ•œ๋˜์ง€ ์•Š๊ณ  ํ•ญ์ƒ ๊ฐœ๋ฐœ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

์ด์‹์„ฑ. ํ•œ ๊ฐ€์ง€์—๋„ ์ง‘์ฐฉ์ด ์—†์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์•„๋งˆ์กด ๋ ˆ๋“œ ์‹œํ”„ํŠธ ์–ด๋”˜๊ฐ€๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ์ด ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ใ… ํด๋ฆญ ํ•˜์šฐ์Šค ๋…ธํŠธ๋ถ, ์„œ๋ฒ„์— ์„ค์น˜ํ•˜๊ณ  ํด๋ผ์šฐ๋“œ์— ๋ฐฐํฌํ•˜๊ณ  ๋‹ค์Œ์œผ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Kubernetes โ€” ์ธํ”„๋ผ ์šด์˜์—๋Š” ์ œํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ ํŽธ๋ฆฌํ•˜๋ฉฐ ๋‹ค๋ฅธ ์œ ์‚ฌํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์ž๋ž‘ํ•  ์ˆ˜ ์—†๋Š” ํฐ ์žฅ์ ์ž…๋‹ˆ๋‹ค.

์œ ์—ฐ์„ฑ. ํด๋ฆญ ํ•˜์šฐ์Šค ์˜ˆ๋ฅผ ๋“ค์–ด Yandex.Metrica์™€ ๊ฐ™์€ ํ•œ ๊ฐ€์ง€์—๋งŒ ๊ตญํ•œ๋˜์ง€ ์•Š๊ณ  ์ ์  ๋” ๋‹ค์–‘ํ•œ ํ”„๋กœ์ ํŠธ์™€ ์‚ฐ์—…์—์„œ ๋ฐœ์ „ํ•˜๊ณ  ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋กœ๊ทธ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒƒ์€ ์˜ˆ์˜์— ์–ด๊ธ‹๋‚œ๋‹ค๊ณ  ์ƒ๊ฐ๋˜์–ด ํƒ„์„ฑ ๊ฒ€์ƒ‰. ํ•˜์ง€๋งŒ ์œ ์—ฐ์„ฑ ๋•๋ถ„์— ํด๋ฆญ ํ•˜์šฐ์Šค, ์—ฌ๊ธฐ์— ๋กœ๊ทธ๋ฅผ ์ €์žฅํ•  ์ˆ˜๋„ ์žˆ์œผ๋ฉฐ ์ข…์ข… ์ด๊ฒƒ์ด ํ›จ์”ฌ ๋” ์ข‹์Šต๋‹ˆ๋‹ค. ํƒ„์„ฑ ๊ฒ€์ƒ‰ -์— ํด๋ฆญ ํ•˜์šฐ์Šค ์ฒ ๋ถ„์€ 10๋ฐฐ ์ ๊ฒŒ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋ฌด๋ฃŒ ์˜คํ”ˆ ์†Œ์Šค. ๋น„์šฉ์„ ์ง€๋ถˆํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋…ธํŠธ๋ถ์ด๋‚˜ ์„œ๋ฒ„์— ์‹œ์Šคํ…œ์„ ์„ค์น˜ํ•˜๊ธฐ ์œ„ํ•ด ํ—ˆ๊ฐ€๋ฅผ ํ˜‘์ƒํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ˆจ๊ฒจ์ง„ ์ˆ˜์ˆ˜๋ฃŒ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋™์‹œ์— ๋‹ค๋ฅธ ์–ด๋–ค ์˜คํ”ˆ ์†Œ์Šค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ธฐ์ˆ ๋„ ์†๋„ ์ธก๋ฉด์—์„œ ๊ฒฝ์Ÿํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํด๋ฆญ ํ•˜์šฐ์Šค. MySQL, ๋งˆ๋ฆฌ์•„DB, ๊ทธ๋ฆฐํ”Œ๋Ÿผ - ๋ชจ๋‘ ํ›จ์”ฌ ๋Š๋ฆฝ๋‹ˆ๋‹ค.

์ปค๋ฎค๋‹ˆํ‹ฐ, ๋“œ๋ผ์ด๋ธŒ ๋ฐ ์žฅ๋‚œ. ์— ํด๋ฆญ ํ•˜์šฐ์Šค ํ›Œ๋ฅญํ•œ ์ปค๋ฎค๋‹ˆํ‹ฐ: ๋ชจ์ž„, ์ฑ„ํŒ…, ๊ทธ๋ฆฌ๊ณ  ์—๋„ˆ์ง€์™€ ๋‚™์ฒœ์ฃผ์˜๋กœ ์šฐ๋ฆฌ ๋ชจ๋‘๋ฅผ ์ถฉ์ „ํ•˜๋Š” Alexey Milovidov.

ํด๋ฆญํ•˜์šฐ์Šค๋กœ ์ด์‚ฌ

๊ฐ€๊ธฐ ์œ„ํ•ด ํด๋ฆญ ํ•˜์šฐ์Šค ์–ด๋–ค ์ด์œ ๋กœ๋“  ๋‹ค์Œ ์„ธ ๊ฐ€์ง€๋งŒ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  • ํ•œ๊ณ„ ์ดํ•ด ํด๋ฆญ ํ•˜์šฐ์Šค ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์ด ์ ํ•ฉํ•˜์ง€ ์•Š์€ ๊ฒƒ.
  • ์ด์šฉํ•˜๋‹ค ๊ธฐ์ˆ ๊ณผ ๊ทธ ๊ฐ€์žฅ ํฐ ์žฅ์ .
  • ์‹คํ—˜. ์ž‘๋™ ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์กฐ์ฐจ ํด๋ฆญ ํ•˜์šฐ์Šค, ์–ธ์ œ ๋” ๋นจ๋ผ์งˆ์ง€, ์–ธ์ œ ๋” ๋Š๋ ค์งˆ์ง€, ์–ธ์ œ ์ข‹์•„์งˆ์ง€, ์–ธ์ œ ๋” ๋‚˜๋น ์งˆ์ง€ ์˜ˆ์ธกํ•˜๋Š” ๊ฒƒ์ด ํ•ญ์ƒ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ˆ ์‹œ๋„ํ•ด ๋ณด์„ธ์š”.

์ด์‚ฌ ๋ฌธ์ œ

"๊ทธ๋Ÿฌ๋‚˜"๋Š” ๋‹จ ํ•˜๋‚˜๋ฟ์ž…๋‹ˆ๋‹ค. ํด๋ฆญ ํ•˜์šฐ์Šค ๋‹ค๋ฅธ ๊ฒƒ์—์„œ ๋‚˜์˜จ ๊ฒฝ์šฐ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์šฐ๋ฆฌ๊ฐ€ ๊ฐ€์žฅ ์ข‹์•„ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ž‘๋™ํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ๊ด€ํ–‰๊ณผ ๊ฒƒ๋“ค์— ์ต์ˆ™ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํ•จ๊ป˜ ์ผํ•˜๋Š” ์‚ฌ๋žŒ์€ SQL-๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๋‹ค์Œ ๊ธฐ๋Šฅ ์„ธํŠธ๋ฅผ ํ•„์ˆ˜๋กœ ๊ฐ„์ฃผํ•ฉ๋‹ˆ๋‹ค.

  • ์—…๋ฌด;
  • ์ œ์•ฝ;
  • ์ผ๊ด€์„ฑ;
  • ์ƒ‰์ธ;
  • ์—…๋ฐ์ดํŠธ/์‚ญ์ œ;
  • NULL;
  • ๋ฐ€๋ฆฌ์ดˆ;
  • ์ž๋™ ์œ ํ˜• ์บ์ŠคํŠธ;
  • ๋‹ค์ค‘ ์กฐ์ธ;
  • ์ž„์˜์˜ ํŒŒํ‹ฐ์…˜;
  • ํด๋Ÿฌ์Šคํ„ฐ ๊ด€๋ฆฌ ๋„๊ตฌ.

๋ชจ์ง‘์€ ํ•„์ˆ˜์ธ๋ฐ, XNUMX๋…„ ์ „ ํด๋ฆญ ํ•˜์šฐ์Šค ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค! ์ด์ œ ๊ตฌํ˜„๋˜์ง€ ์•Š์€ ๊ฒƒ ์ค‘ ํŠธ๋žœ์žญ์…˜, ์ œ์•ฝ ์กฐ๊ฑด, ์ผ๊ด€์„ฑ, ๋ฐ€๋ฆฌ์ดˆ ๋ฐ ์œ ํ˜• ์บ์ŠคํŒ… ๋“ฑ ์ ˆ๋ฐ˜ ๋ฏธ๋งŒ์ด ๋‚จ์•„ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ํด๋ฆญ ํ•˜์šฐ์Šค ์ผ๋ถ€ ํ‘œ์ค€ ๊ด€ํ–‰ ๋ฐ ์ ‘๊ทผ ๋ฐฉ์‹์€ ์šฐ๋ฆฌ๊ฐ€ ์ต์ˆ™ํ•œ ๊ฒƒ๊ณผ ๋‹ค๋ฅด๊ฒŒ ์ž‘๋™ํ•˜๊ฑฐ๋‚˜ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์— ๋‚˜ํƒ€๋‚˜๋Š” ๋ชจ๋“  ๊ฒƒ ํด๋ฆญ ํ•˜์šฐ์Šค, "์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค.ํด๋ฆญํ•˜์šฐ์Šค ๋ฐฉ์‹", ์ฆ‰. ๊ธฐ๋Šฅ์€ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด:

  • ์ธ๋ฑ์Šค๋Š” ์„ ํƒ๋˜์ง€ ์•Š์•˜์ง€๋งŒ ๊ฑด๋„ˆ๋›ฐ์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์—…๋ฐ์ดํŠธ/์‚ญ์ œ ๋™๊ธฐ์‹์€ ์•„๋‹ˆ๊ณ  ๋น„๋™๊ธฐ์‹์ž…๋‹ˆ๋‹ค.
  • ์กฐ์ธ์ด ์—ฌ๋Ÿฌ ๊ฐœ ์žˆ์ง€๋งŒ ์ฟผ๋ฆฌ ํ”Œ๋ž˜๋„ˆ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ˆ˜ํ–‰๋˜๋Š” ๋ฐฉ๋ฒ•์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ธ๊ณ„์˜ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋ช…ํ™•ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํด๋ฆญํ•˜์šฐ์Šค ์Šคํฌ๋ฆฝํŠธ

1960๋…„ ํ—๊ฐ€๋ฆฌ ์ถœ์‹ ์˜ ๋ฏธ๊ตญ ์ˆ˜ํ•™์ž ์œ„๊ทธ๋„ˆ EP "๋ผ๋Š” ๊ธฐ์‚ฌ๋ฅผ ์ผ๋‹ค.์ž์—ฐ๊ณผํ•™์—์„œ ์ˆ˜ํ•™์˜ ๋ถˆํ•ฉ๋ฆฌํ•œ ํšจ์œจ์„ฑ"( "์ž์—ฐ ๊ณผํ•™์—์„œ ์ˆ˜ํ•™์˜ ์ดํ•ดํ•  ์ˆ˜์—†๋Š” ํšจ์œจ์„ฑ") ์šฐ๋ฆฌ ์ฃผ๋ณ€์˜ ์„ธ๊ณ„๋Š” ์–ด๋–ค ์ด์œ ์—์„œ์ธ์ง€ ์ˆ˜ํ•™ ๋ฒ•์น™์œผ๋กœ ์ž˜ ์„ค๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ˆ˜ํ•™์€ ์ถ”์ƒ๊ณผํ•™์ด๋ฉฐ, ์ˆ˜ํ•™์  ํ˜•ํƒœ๋กœ ํ‘œํ˜„๋œ ๋ฌผ๋ฆฌ๋ฒ•์น™์€ ์‚ฌ์†Œํ•˜์ง€ ์•Š์œผ๋ฉฐ, ์œ„๊ทธ๋„ˆ EP ๋งค์šฐ ์ด์ƒํ•˜๋‹ค๊ณ  ๊ฐ•์กฐํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚ด ๊ด€์ ์—์„œ, ํด๋ฆญ ํ•˜์šฐ์Šค - ๋˜‘๊ฐ™์€ ์ด์ƒ ํ•จ. Wigner์˜ ๋ง์„ ๋ฐ”๊ฟ” ๋งํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒ์ƒํ•  ์ˆ˜ ์—†๋Š” ํšจ์œจ์„ฑ์€ ๋†€๋ž์Šต๋‹ˆ๋‹ค. ํด๋ฆญ ํ•˜์šฐ์Šค ๋‹ค์–‘ํ•œ ๋ถ„์„ ์‘์šฉ ๋ถ„์•ผ์—์„œ!

ํด๋ฆญํ•˜์šฐ์Šค๋กœ์˜ ์ด์ „: 3๋…„ ํ›„

์˜ˆ๋ฅผ ๋“ค์–ด ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์›จ์–ดํ•˜์šฐ์Šค, ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฑฐ์˜ ์ง€์†์ ์œผ๋กœ ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋‘ ๋ฒˆ์งธ ์ง€์—ฐ์„ ํ†ตํ•ด ์š”์ฒญ์„ ๋ฐ›๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. - ์‚ฌ์šฉํ•ด ์ฃผ์„ธ์š” ํด๋ฆญ ํ•˜์šฐ์Šค, ์ด๊ฒƒ์ด ์„ค๊ณ„๋œ ์‹œ๋‚˜๋ฆฌ์˜ค์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ํด๋ฆญ ํ•˜์šฐ์Šค ์ด๊ฒƒ์ด ๋ฐ”๋กœ ์›น๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋งˆ์ผ€ํŒ…, ๊ธˆ์œต ๋ถ„์„์—์„œ๋„ ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์• ๋“œํ…h, ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์‚ฌ๊ธฐ ํƒ์ง€N. ์•ˆ์— ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์›จ์–ดํ•˜์šฐ์Šค "๋ณ„"์ด๋‚˜ "๋ˆˆ์†ก์ด"์™€ ๊ฐ™์€ ๋ณต์žกํ•œ ๊ตฌ์กฐ์˜ ๊ณ„ํš์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. JOIN (๋•Œ๋•Œ๋กœ ์—ฌ๋Ÿฌ ๊ฐœ) ๋ฐ์ดํ„ฐ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์ผ๋ถ€ ์‹œ์Šคํ…œ์— ์ €์žฅ๋˜๊ณ  ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.

๋˜ ๋‹ค๋ฅธ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์‹œ๊ณ„์—ด: ์žฅ์น˜, ๋„คํŠธ์›Œํฌ, ์‚ฌ์šฉ ํ†ต๊ณ„, ์‚ฌ๋ฌผ ์ธํ„ฐ๋„ท ๋ชจ๋‹ˆํ„ฐ๋ง. ์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๋Š” ์‹œ๊ฐ„์— ๋งž์ถฐ ์ •๋ ฌ๋œ ๋งค์šฐ ๊ฐ„๋‹จํ•œ ์ด๋ฒคํŠธ๋ฅผ ์ ‘ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ํด๋ฆญ ํ•˜์šฐ์Šค ์›๋ž˜๋Š” ์ด๋ฅผ ์œ„ํ•ด ๊ฐœ๋ฐœ๋˜์ง€ ์•Š์•˜์ง€๋งŒ ์ž์ฒด์ ์œผ๋กœ ์ž˜ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋ฐ”๋กœ ๋Œ€๊ธฐ์—…์ด ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค. ํด๋ฆญ ํ•˜์šฐ์Šค ์ •๋ณด ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์œ„ํ•œ ์ €์žฅ์†Œ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ ํ•ฉํ•œ์ง€ ์•Œ์•„๋ณด๊ธฐ ์œ„ํ•ด ํด๋ฆญ ํ•˜์šฐ์Šค ์‹œ๊ณ„์—ด์˜ ๊ฒฝ์šฐ ์ ‘๊ทผ ๋ฐฉ์‹๊ณผ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฒค์น˜๋งˆํฌ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์ธํ”Œ๋Ÿญ์ŠคDB ะธ ํƒ€์ž„์Šค์ผ€์ผDB - ์ „๋ฌธ ์‹œ๊ณ„์—ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค. ๊ทธ๊ฒƒ์€ ๋ฐํ˜€์กŒ๋‹ค.๊ทธ ํด๋ฆญ ํ•˜์šฐ์Šค, ์ด๋Ÿฌํ•œ ์ž‘์—…์— ๋Œ€ํ•œ ์ตœ์ ํ™” ์—†์ด๋„ ์™ธ๊ตญ ๋ถ„์•ผ์—์„œ ์Šน๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

ํด๋ฆญํ•˜์šฐ์Šค๋กœ์˜ ์ด์ „: 3๋…„ ํ›„

ะ’ ์‹œ๊ณ„์—ด ์ผ๋ฐ˜์ ์œผ๋กœ ์ข์€ ํ…Œ์ด๋ธ”(์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž‘์€ ์—ด)์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋‹ˆํ„ฐ๋ง์„ ํ†ตํ•ด ๋งŽ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ(์ดˆ๋‹น ์ˆ˜๋ฐฑ๋งŒ ๊ฐœ์˜ ๋ ˆ์ฝ”๋“œ)๊ฐ€ ์ƒ์„ฑ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ผ๋ฐ˜์ ์œผ๋กœ ์ž‘์€ ๋‹จ์œ„๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค(์‹ค์‹œ๊ฐ„ ์ŠคํŠธ๋ฆฌ๋ฐ). ๋”ฐ๋ผ์„œ ๋‹ค๋ฅธ ์‚ฝ์ž… ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํ•„์š”ํ•˜๋ฉฐ ์ฟผ๋ฆฌ ์ž์ฒด์—๋Š” ๊ณ ์œ ํ•œ ์„ธ๋ถ€ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋กœ๊ทธ ๊ด€๋ฆฌ. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋กœ๊ทธ๋ฅผ ์ˆ˜์ง‘ํ•˜๋Š” ๊ฒƒ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ข‹์ง€ ์•Š์ง€๋งŒ ํด๋ฆญ ํ•˜์šฐ์Šค ์ด๋Š” ์œ„์—์„œ ์„ค๋ช…ํ•œ ๋Œ€๋กœ ๋ช‡ ๊ฐ€์ง€ ์ฃผ์„์„ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŽ์€ ๊ธฐ์—…์—์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ํด๋ฆญ ํ•˜์šฐ์Šค ๋ฐ”๋กœ ์ด ๋ชฉ์ ์„ ์œ„ํ•ด. ์ด ๊ฒฝ์šฐ ์ „์ฒด ๋กœ๊ทธ๋ฅผ ์ €์žฅํ•˜๋Š” ํ”Œ๋žซ ์™€์ด๋“œ ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: ๋‹ค์Œ ํ˜•์‹). JSON) ๋˜๋Š” ์กฐ๊ฐ์œผ๋กœ ์ž๋ฅด์‹ญ์‹œ์˜ค. ๋ฐ์ดํ„ฐ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋Œ€๊ทœ๋ชจ ๋ฐฐ์น˜(ํŒŒ์ผ)๋กœ ๋กœ๋“œ๋˜๋ฉฐ ์ผ๋ถ€ ํ•„๋“œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๊ฐ ๊ธฐ๋Šฅ์—๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ํŠน์ˆ˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ํด๋ฆญ ํ•˜์šฐ์Šค ์‚ฌ๋žŒ์€ ๋ชจ๋“  ๊ฒƒ์„ ํ•  ์ˆ˜ ์žˆ๊ณ  ๋„ˆ๋ฌด ์ž˜ํ•ด์„œ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋ณด๋‹ค ๋” ๋›ฐ์–ด๋‚œ ์„ฑ๊ณผ๋ฅผ ๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ์ž์„ธํžˆ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์‹œ๊ณ„์—ด ์‹œ๋‚˜๋ฆฌ์˜ค์™€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ "์š”๋ฆฌ"ํ•˜๋Š” ๋ฐฉ๋ฒ• ํด๋ฆญ ํ•˜์šฐ์Šค ์ด ์‹œ๋‚˜๋ฆฌ์˜ค์˜ ๊ฒฝ์šฐ.

์‹œ๊ณ„์—ด

ํ˜„์žฌ ์ด๊ฒƒ์ด ์ฃผ์š” ์‹œ๋‚˜๋ฆฌ์˜ค์ž…๋‹ˆ๋‹ค. ํด๋ฆญ ํ•˜์šฐ์Šค ํ‘œ์ค€ ์†”๋ฃจ์…˜์œผ๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค. ์‹œ๊ณ„์—ด ์‹œ๊ฐ„์— ๋”ฐ๋ฅธ ์ผ๋ จ์˜ ์‚ฌ๊ฑด์œผ๋กœ, ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ์ผ๋ถ€ ํ”„๋กœ์„ธ์Šค์˜ ๋ณ€ํ™”๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ผ์ผ ์‹ฌ๋ฐ•์ˆ˜ ๋˜๋Š” ์‹œ์Šคํ…œ์˜ ํ”„๋กœ์„ธ์Šค ์ˆ˜๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ถ€ ์ฐจ์›์—์„œ ์‹œ๊ฐ„์„ ํ‘œ์‹œํ•˜๋Š” ๋ชจ๋“  ๊ฒƒ์€ ์‹œ๊ณ„์—ด:

ํด๋ฆญํ•˜์šฐ์Šค๋กœ์˜ ์ด์ „: 3๋…„ ํ›„

์ด๋Ÿฌํ•œ ์œ ํ˜•์˜ ์ด๋ฒคํŠธ๋Š” ๋Œ€๋ถ€๋ถ„ ๋ชจ๋‹ˆํ„ฐ๋ง์—์„œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์›น ๋ชจ๋‹ˆํ„ฐ๋ง๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ž๋™์ฐจ, ์‚ฐ์—… ์‹œ์Šคํ…œ, ๋งŒ์•ฝ IoT, Yandex๊ฐ€ ์ด๋ฏธ ํŠธ๋ ํฌ์— ๋„ฃ์€ ์ƒ์‚ฐ ๋˜๋Š” ๋ฌด์ธ ํƒ์‹œ ํด๋ฆญ ํ•˜์šฐ์Šค-์„ฌ๊ธฐ๋Š” ์‚ฌ๋žŒ.

์˜ˆ๋ฅผ ๋“ค์–ด ์„ ๋ฐ•์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๋Š” ํšŒ์‚ฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ช‡ ์ดˆ๋งˆ๋‹ค ์ปจํ…Œ์ด๋„ˆ ์„ ๋ฐ•์˜ ์„ผ์„œ๋Š” ์ˆ˜๋ฐฑ ๊ฐ€์ง€์˜ ๋‹ค์–‘ํ•œ ์ธก์ •๊ฐ’์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ์—”์ง€๋‹ˆ์–ด๋“ค์€ ์ด๋ฅผ ์—ฐ๊ตฌํ•˜๊ณ , ๋ชจ๋ธ์„ ๋งŒ๋“ค๊ณ , ์„ ๋ฐ•์ด ์–ผ๋งˆ๋‚˜ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š”์ง€ ์ดํ•ดํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ ์„ ๋ฐ•์€ ๋‹จ ํ•œ ์ˆœ๊ฐ„๋„ ์œ ํœด ์ƒํƒœ๋กœ ์žˆ์–ด์„œ๋Š” ์•ˆ ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ฐ€๋™ ์ค‘์ง€ ์‹œ๊ฐ„์€ ๊ธˆ์ „์  ์†์‹ค์ด๋ฏ€๋กœ ์ค‘๋‹จ์„ ์ตœ์†Œํ™”ํ•˜๋„๋ก ๊ฒฝ๋กœ๋ฅผ ์˜ˆ์ธกํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

์š”์ฆ˜์—๋Š” ์ธก์ •์„ ์œ„ํ•œ ์ „๋ฌธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์„ฑ์žฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์‹œ๊ณ„์—ด. ํ˜„์žฅ DB ์—”์ง„ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—๋Š” ์ˆœ์œ„๊ฐ€ ์ง€์ •๋˜์–ด ์žˆ์œผ๋ฉฐ ์œ ํ˜•๋ณ„๋กœ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํด๋ฆญํ•˜์šฐ์Šค๋กœ์˜ ์ด์ „: 3๋…„ ํ›„

๊ฐ€์žฅ ๋น ๋ฅด๊ฒŒ ์„ฑ์žฅํ•˜๋Š” ์œ ํ˜•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์‹œ๊ณ„์—ด์—์Šค. ๊ทธ๋ž˜ํ”„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋„ ์„ฑ์žฅํ•˜๊ณ  ์žˆ์ง€๋งŒ ์‹œ๊ณ„์—ด์ง€๋‚œ ๋ช‡ ๋…„ ๋™์•ˆ ๋” ๋น ๋ฅด๊ฒŒ ์„ฑ์žฅํ•ด ์™”์Šต๋‹ˆ๋‹ค. ์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ œํ’ˆ๊ตฐ์˜ ์ผ๋ฐ˜์ ์ธ ๋Œ€ํ‘œ์ž๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ธํ”Œ๋Ÿญ์ŠคDB, ํ”„๋กœ ๋ฉ”ํ…Œ์šฐ์Šค, KDB, ํƒ€์ž„์Šค์ผ€์ผDB (๊ธฐ๋ฐ˜ PostgreSQL), ์†”๋ฃจ์…˜ ์•„๋งˆ์กด. ํด๋ฆญ ํ•˜์šฐ์Šค ์—ฌ๊ธฐ์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ  ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋ช‡ ๊ฐ€์ง€ ๊ณต๊ฐœ์ ์ธ ์˜ˆ๋ฅผ ๋“ค์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์„ ๊ตฌ์ž ์ค‘ ํ•˜๋‚˜๋Š” ํšŒ์‚ฌ์ž…๋‹ˆ๋‹ค. CloudFlare (CDN-๊ณต๊ธ‰์ž). ๊ทธ๋“ค์€ ๊ทธ๋“ค์˜ CDN ๋ฅผ ํ†ตํ•ด ํด๋ฆญ ํ•˜์šฐ์Šค (DNS-์š”์ฒญ, HTTP-์ฟผ๋ฆฌ) ์—„์ฒญ๋‚œ ๋กœ๋“œ - ์ดˆ๋‹น 6๋งŒ ๊ฐœ์˜ ์ด๋ฒคํŠธ. ๋ชจ๋“  ๊ฒƒ์ด ํ†ต๊ณผ๋ฉ๋‹ˆ๋‹ค ์นดํ”„์นด, ๋กœ ์ด๋™ ํด๋ฆญ ํ•˜์šฐ์Šค, ์‹œ์Šคํ…œ์˜ ์ด๋ฒคํŠธ ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ปด์บ์ŠคํŠธ - ๋ฏธ๊ตญ ํ†ต์‹  ๋ถ„์•ผ์˜ ๋ฆฌ๋” ์ค‘ ํ•˜๋‚˜: ์ธํ„ฐ๋„ท, ๋””์ง€ํ„ธ TV, ์ „ํ™” ํ†ต์‹ . ๊ทธ๋“ค์€ ์œ ์‚ฌํ•œ ์ œ์–ด ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. CDN ์•ˆ์— ์˜คํ”ˆ ์†Œ์Šค ๊ณ„ํš ์•„ํŒŒ์น˜ ํŠธ๋ž˜ํ”ฝ ์ œ์–ด ๋‹น์‹ ์˜ ๊ฑฐ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด. ํด๋ฆญ ํ•˜์šฐ์Šค ๋ถ„์„์„ ์œ„ํ•œ ๋ฐฑ์—”๋“œ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

ํผ ์ฝ”๋‚˜ ๋‚ด์žฅ ํด๋ฆญ ํ•˜์šฐ์Šค ๋„ˆ์˜ ์•ˆ์— PMM๋‹ค์–‘ํ•œ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด MySQL์˜.

ํŠน์ • ์š”๊ตฌ ์‚ฌํ•ญ

์‹œ๊ณ„์—ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—๋Š” ๊ณ ์œ ํ•œ ํŠน์ • ์š”๊ตฌ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋งŽ์€ ์—์ด์ „ํŠธ๋กœ๋ถ€ํ„ฐ ๋น ๋ฅธ ์‚ฝ์ž…. ์šฐ๋ฆฌ๋Š” ๋งŽ์€ ์ŠคํŠธ๋ฆผ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋งค์šฐ ๋น ๋ฅด๊ฒŒ ์‚ฝ์ž…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํด๋ฆญ ํ•˜์šฐ์Šค ๋ชจ๋“  ์‚ฝ์ž…๋ฌผ์ด ๋น„์ฐจ๋‹จํ˜•์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด ์ž‘์—…์ด ์ž˜ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ์–ด๋Š ์‚ฝ์ž…ํ•˜๋‹ค ๋””์Šคํฌ์˜ ์ƒˆ ํŒŒ์ผ์ด๋ฉฐ ์ž‘์€ ์‚ฝ์ž…์€ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ๋“  ๋ฒ„ํผ๋ง๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•ˆ์— ํด๋ฆญ ํ•˜์šฐ์Šค ํ•œ ๋ฒˆ์— ํ•œ ์ค„์”ฉ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํฐ ๋ฐฐ์น˜๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
  • ์œ ์—ฐํ•œ ๊ณ„ํš. ์— ์‹œ๊ณ„์—ด ์šฐ๋ฆฌ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์™„์ „ํžˆ ์•Œ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ํŠน์ • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•œ ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์‚ฌ์šฉํ•˜๊ธฐ๋Š” ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” ๋ณด๋‹ค ์œ ์—ฐํ•œ ๊ณ„ํš์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ํด๋ฆญ ํ•˜์šฐ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ•๋ ฅํ•œ ํ˜•์‹์˜ ๊ธฐ๋ณธ์ž„์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํšจ์œจ์ ์ธ ์ €์žฅ ๋ฐ ๋ฐ์ดํ„ฐ ์žŠ์–ด๋ฒ„๋ฆฌ๊ธฐ. ๋ณดํ†ต ์‹œ๊ณ„์—ด ์—„์ฒญ๋‚œ ์–‘์˜ ๋ฐ์ดํ„ฐ์ด๋ฏ€๋กœ ์ตœ๋Œ€ํ•œ ํšจ์œจ์ ์œผ๋กœ ์ €์žฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ธํ”Œ๋Ÿญ์ŠคDB ์ข‹์€ ์••์ถ•์ด ์ฃผ์š” ํŠน์ง•์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ €์žฅํ•˜๋Š” ๊ฒƒ ์™ธ์—๋„ ์˜ค๋ž˜๋œ ๋ฐ์ดํ„ฐ๋ฅผ "์žŠ๊ณ " ์ผ์ข…์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์šด ์ƒ˜ํ”Œ๋ง โ€” ์ง‘๊ณ„์˜ ์ž๋™ ๊ณ„์‚ฐ.
  • ์ง‘๊ณ„๋œ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ๋น ๋ฅธ ์ฟผ๋ฆฌ. ๋•Œ๋กœ๋Š” ์ง€๋‚œ 5๋ถ„์„ ๋ฐ€๋ฆฌ์ดˆ ๋‹จ์œ„์˜ ์ •ํ™•๋„๋กœ ๋ณด๋Š” ๊ฒƒ์ด ํฅ๋ฏธ๋กญ์ง€๋งŒ ์›”๋ณ„ ๋ฐ์ดํ„ฐ์—์„œ๋Š” ๋ถ„ ๋˜๋Š” ์ดˆ ๋‹จ์œ„์˜ ์„ธ๋ถ„์„ฑ์ด ํ•„์š”ํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜ ํ†ต๊ณ„๋งŒ์œผ๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฐ ์ข…๋ฅ˜์˜ ์ง€์›์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด 3๊ฐœ์›” ์š”์ฒญ์„ ์™„๋ฃŒํ•˜๋Š” ๋ฐ ๋งค์šฐ ์˜ค๋žœ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. ํด๋ฆญ ํ•˜์šฐ์Šค.
  • "์™€ ๊ฐ™์€ ์š”์ฒญ๋งˆ์ง€๋ง‰ ์ง€์  ํ˜„์žฌยป. ์ด๋Š” ๋‹ค์Œ์˜ ๊ฒฝ์šฐ์— ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค. ์‹œ๊ณ„์—ด ์ฟผ๋ฆฌ: ํŠน์ • ์‹œ์ ์˜ ๋งˆ์ง€๋ง‰ ์ธก์ •๊ฐ’์ด๋‚˜ ์‹œ์Šคํ…œ ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜์„ธ์š”. t. ์ด๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ๊ทธ๋‹ค์ง€ ์œ ์พŒํ•œ ์ฟผ๋ฆฌ๋Š” ์•„๋‹ˆ์ง€๋งŒ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • "์ ‘์ฐฉ" ์‹œ๊ณ„์—ด. ์‹œ๊ณ„์—ด ์‹œ๊ณ„์—ด์ด๋‹ค. ๋‘ ๊ฐœ์˜ ์‹œ๊ณ„์—ด์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์—ฐ๊ฒฐ ๋ฐ ์ƒ๊ด€๊ด€๊ณ„๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ์ •๋ ฌ๋˜์ง€ ์•Š์€ ์‹œ๊ณ„์—ด์˜ ๊ฒฝ์šฐ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์€ ํŽธ๋ฆฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ๋ช‡ ๊ฐ€์ง€ ์‹œ์ ์ด ์žˆ๊ณ  ๋‹ค๋ฅธ ์‹œ์ ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ํ‰๊ท ์„ ๊ณ ๋ คํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ฐ‘์ž๊ธฐ ๊ฑฐ๊ธฐ์— ์—ฌ์ „ํžˆ ๊ตฌ๋ฉ์ด ์ƒ๊ธฐ๊ธฐ ๋•Œ๋ฌธ์— ๋ช…ํ™•ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์š”๊ตฌ ์‚ฌํ•ญ์ด ์–ด๋–ป๊ฒŒ ์ถฉ์กฑ๋˜๋Š”์ง€ ์‚ดํŽด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ํด๋ฆญ ํ•˜์šฐ์Šค.

๊ณ„ํš

ะ’ ํด๋ฆญ ํ•˜์šฐ์Šค ๊ณ„ํš ์‹œ๊ณ„์—ด ๋ฐ์ดํ„ฐ์˜ ๊ทœ์น™์„ฑ ์ •๋„์— ๋”ฐ๋ผ ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์œผ๋กœ ์ˆ˜ํ–‰๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์ง€ํ‘œ๋ฅผ ๋ฏธ๋ฆฌ ์•Œ๋ฉด ์ผ๋ฐ˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ์ด๋Ÿฐ ์ง“์„ ํ–ˆ์–ด์š” CloudFlare ๋ชจ๋‹ˆํ„ฐ๋ง์œผ๋กœ CDN ์ž˜ ์ตœ์ ํ™”๋œ ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค. ์ „์ฒด ์ธํ”„๋ผ์™€ ๋‹ค์–‘ํ•œ ์„œ๋น„์Šค๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋Š” ๋ณด๋‹ค ์ผ๋ฐ˜์ ์ธ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ถˆ๊ทœ์น™ํ•œ ๋ฐ์ดํ„ฐ์˜ ๊ฒฝ์šฐ ์šฐ๋ฆฌ๋Š” ๋ฌด์—‡์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ์žˆ๋Š”์ง€ ๋ฏธ๋ฆฌ ์•Œ ์ˆ˜ ์—†์œผ๋ฉฐ ์ด๊ฒƒ์ด ์•„๋งˆ๋„ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ๊ฒฝ์šฐ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ผ๋ฐ˜ ๋ฐ์ดํ„ฐ. ์—ด. ๊ตฌ์„ฑํ‘œ๋Š” ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ํ•„์ˆ˜ ์œ ํ˜•์ด ์žˆ๋Š” ์—ด์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

CREATE TABLE cpu (
  created_date Date DEFAULT today(),  
  created_at DateTime DEFAULT now(),  
  time String,  
  tags_id UInt32,  /* join to dim_tag */
  usage_user Float64,  
  usage_system Float64,  
  usage_idle Float64,  
  usage_nice Float64,  
  usage_iowait Float64,  
  usage_irq Float64,  
  usage_softirq Float64,  
  usage_steal Float64,  
  usage_guest Float64,  
  usage_guest_nice Float64
) ENGINE = MergeTree(created_date, (tags_id, created_at), 8192);

์ด๊ฒƒ์€ ์ผ์ข…์˜ ์‹œ์Šคํ…œ ๋กœ๋”ฉ ํ™œ๋™์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋Š” ์ผ๋ฐ˜ ํ…Œ์ด๋ธ”์ž…๋‹ˆ๋‹ค(์‚ฌ์šฉ์ž, ์ฒด๊ณ„, ์œ ํœด, ์ข‹์€). ๊ฐ„๋‹จํ•˜๊ณ  ํŽธ๋ฆฌํ•˜์ง€๋งŒ ์œ ์—ฐํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ๋ณด๋‹ค ์œ ์—ฐํ•œ ์ฒด๊ณ„๋ฅผ ์›ํ•œ๋‹ค๋ฉด ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ถˆ๊ทœ์น™ํ•œ ๋ฐ์ดํ„ฐ. ๋ฐฐ์—ด:

CREATE TABLE cpu_alc (
  created_date Date,  
  created_at DateTime,  
  time String,  
  tags_id UInt32,  
  metrics Nested(
    name LowCardinality(String),  
    value Float64
  )
) ENGINE = MergeTree(created_date, (tags_id, created_at), 8192);

SELECT max(metrics.value[indexOf(metrics.name,'usage_user')]) FROM ...

๊ตฌ์กฐ ์ค‘์ฒฉ ๋‘ ๊ฐœ์˜ ๋ฐฐ์—ด์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ธก์ •ํ•ญ๋ชฉ.์ด๋ฆ„ ะธ ์ธก์ •ํ•ญ๋ชฉ.๊ฐ’. ์—ฌ๊ธฐ์—๋Š” ๊ฐ ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ์ด๋ฆ„ ๋ฐฐ์—ด ๋ฐ ์ธก์ •๊ฐ’ ๋ฐฐ์—ด๊ณผ ๊ฐ™์€ ์ž„์˜ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด ์ด๋Ÿฌํ•œ ๊ตฌ์กฐ๋ฅผ ํ•˜๋‚˜๋งŒ ๋งŒ๋“œ๋Š” ๋Œ€์‹  ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋œจ๋‹ค-๊ฐ€์น˜, ๋˜ ๋‹ค๋ฅธ -์— ๋Œ€ํ•œ INT-์™œ๋ƒํ•˜๋ฉด ์˜๋ฏธ INT ์ข€ ๋” ํšจ์œจ์ ์œผ๋กœ ๋ณด๊ด€ํ•˜๊ณ  ์‹ถ์–ด์š”.

๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๋Ÿฌํ•œ ๊ตฌ์กฐ๋Š” ์ ‘๊ทผํ•˜๊ธฐ๊ฐ€ ๋” ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ๋จผ์ € ์ธ๋ฑ์Šค ๊ฐ’์„ ๊ฐ€์ ธ์˜จ ๋‹ค์Œ ๋ฐฐ์—ด ๊ฐ’์„ ๊บผ๋‚ด๋ ค๋ฉด ํŠน์ˆ˜ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํŠน์ˆ˜ ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

SELECT max(metrics.value[indexOf(metrics.name,'usage_user')]) FROM ...

๊ทธ๋Ÿฌ๋‚˜ ์—ฌ์ „ํžˆ ๋งค์šฐ ๋น ๋ฅด๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋ถˆ๊ทœ์น™ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์€ ํ–‰ ๋‹จ์œ„์ž…๋‹ˆ๋‹ค.

๋ถˆ๊ทœ์น™ํ•œ ๋ฐ์ดํ„ฐ. ๋ฌธ์ž์—ด. ์ด ์ „ํ†ต์ ์ธ ๋ฐฉ๋ฒ•์—์„œ๋Š” ๋ฐฐ์—ด์ด ์—†์œผ๋ฉด ์ด๋ฆ„๊ณผ ๊ฐ’์ด ๋™์‹œ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ํ•œ ์žฅ์น˜์—์„œ ๋™์‹œ์— 5๊ฐœ์˜ ์ธก์ •๊ฐ’์ด ๋‚˜์˜ค๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— 000๊ฐœ์˜ ํ–‰์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

CREATE TABLE cpu_rlc (
  created_date Date,  
  created_at DateTime,  
  time String,  
  tags_id UInt32,  
  metric_name LowCardinality(String),  
  metric_value Float64
) ENGINE = MergeTree(created_date, (metric_name, tags_id, created_at), 8192);


SELECT 
    maxIf(metric_value, metric_name = 'usage_user'),
    ... 
FROM cpu_r
WHERE metric_name IN ('usage_user', ...)

ํด๋ฆญ ํ•˜์šฐ์Šค ์ด์— ๋Œ€์ฒ˜ํ•ฉ๋‹ˆ๋‹ค - ํŠน๋ณ„ํ•œ ํ™•์žฅ ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค ํด๋ฆญ ํ•˜์šฐ์Šค SQL. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ตœ๋Œ€ ๊ฒฝ์šฐ โ€” ์ผ๋ถ€ ์กฐ๊ฑด์ด ์ถฉ์กฑ๋˜๋ฉด ๋ฉ”ํŠธ๋ฆญ์œผ๋กœ ์ตœ๋Œ€๊ฐ’์„ ๊ณ„์‚ฐํ•˜๋Š” ํŠน์ˆ˜ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ์š”์ฒญ์œผ๋กœ ์ด๋Ÿฌํ•œ ํ‘œํ˜„์‹์„ ์—ฌ๋Ÿฌ ๊ฐœ ์ž‘์„ฑํ•˜๊ณ  ์—ฌ๋Ÿฌ ์ธก์ •ํ•ญ๋ชฉ์˜ ๊ฐ’์„ ์ฆ‰์‹œ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„ธ ๊ฐ€์ง€ ์ ‘๊ทผ ๋ฐฉ์‹์„ ๋น„๊ตํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

ํด๋ฆญํ•˜์šฐ์Šค๋กœ์˜ ์ด์ „: 3๋…„ ํ›„

์„ธ๋ถ€

์—ฌ๊ธฐ์„œ๋Š” ์ผ๋ถ€ ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ ์„ธํŠธ์— ๋Œ€ํ•ด "๋””์Šคํฌ ๋ฐ์ดํ„ฐ ํฌ๊ธฐ"๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ด์˜ ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ ํฌ๊ธฐ๊ฐ€ ๊ฐ€์žฅ ์ž‘์Šต๋‹ˆ๋‹ค(์ตœ๋Œ€ ์••์ถ•, ์ตœ๋Œ€ ์ฟผ๋ฆฌ ์†๋„). ํ•˜์ง€๋งŒ ๋ชจ๋“  ๊ฒƒ์„ ํ•œ ๋ฒˆ์— ๊ธฐ๋กํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๋น„์šฉ์„ ์ง€๋ถˆํ•ฉ๋‹ˆ๋‹ค.

๋ฐฐ์—ด์˜ ๊ฒฝ์šฐ ๋ชจ๋“  ๊ฒƒ์ด ์กฐ๊ธˆ ๋” ๋‚˜์ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋Š” ์—ฌ์ „ํžˆ ์ž˜ ์••์ถ•๋˜์–ด ์žˆ์œผ๋ฉฐ ๋ถˆ๊ทœ์น™ํ•œ ํŒจํ„ด์ด ์ €์žฅ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํด๋ฆญ ํ•˜์šฐ์Šค - ์ปฌ๋Ÿผํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ด๋ฉฐ ๋ชจ๋“  ๊ฒƒ์„ ๋ฐฐ์—ด์— ์ €์žฅํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๋ฉด XNUMXํ–‰์œผ๋กœ ๋ฐ”๋€Œ๊ณ  ํšจ์œจ์„ฑ๊ณผ ์œ ์—ฐ์„ฑ์— ๋Œ€ํ•œ ๋Œ€๊ฐ€๋ฅผ ์ง€๋ถˆํ•ฉ๋‹ˆ๋‹ค. ์–ด๋–ค ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋“  ์ „์ฒด ๋ฐฐ์—ด์„ ๋ฉ”๋ชจ๋ฆฌ๋กœ ์ฝ์–ด์˜จ ๋‹ค์Œ ๊ทธ ์•ˆ์—์„œ ์›ํ•˜๋Š” ์š”์†Œ๋ฅผ ์ฐพ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฐฐ์—ด์ด ์ปค์ง€๋ฉด ์†๋„๊ฐ€ ์ €ํ•˜๋ฉ๋‹ˆ๋‹ค.

์ด ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š” ํšŒ์‚ฌ ์ค‘ ํ•˜๋‚˜(์˜ˆ: ๋™๋„ค ์งฑ), ๋ฐฐ์—ด์€ 128๊ฐœ ์š”์†Œ์˜ ์กฐ๊ฐ์œผ๋กœ ์ž˜๋ฆฝ๋‹ˆ๋‹ค. ํ•˜๋ฃจ์— 200TB์˜ ๋ฐ์ดํ„ฐ ๋ณผ๋ฅจ์„ ๊ฐ–๋Š” ์ˆ˜์ฒœ ๊ฐœ์˜ ๋ฉ”ํŠธ๋ฆญ ๋ฐ์ดํ„ฐ๋Š” ํ•˜๋‚˜์˜ ์–ด๋ ˆ์ด๊ฐ€ ์•„๋‹Œ ํŠน์ˆ˜ํ•œ ์Šคํ† ๋ฆฌ์ง€ ๋กœ์ง์„ ํ†ตํ•ด 10๊ฐœ ๋˜๋Š” 30๊ฐœ์˜ ์–ด๋ ˆ์ด์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์€ ๋ฌธ์ž์—ด์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ฐ์ดํ„ฐ ์••์ถ•์ด ์ œ๋Œ€๋กœ ๋˜์ง€ ์•Š๊ณ , ํ…Œ์ด๋ธ” ํฌ๊ธฐ๊ฐ€ ํฌ๊ณ , ์ฟผ๋ฆฌ๊ฐ€ ์—ฌ๋Ÿฌ ์ง€ํ‘œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ ClickHouse๊ฐ€ ์ตœ์ ์œผ๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๋ฐฉ์‹

๋ฐฐ์—ด ํšŒ๋กœ๋ฅผ ์„ ํƒํ–ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ด…์‹œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋Œ€๋ถ€๋ถ„์˜ ๋Œ€์‹œ๋ณด๋“œ์— ์‚ฌ์šฉ์ž ๋ฐ ์‹œ์Šคํ…œ ์ธก์ •ํ•ญ๋ชฉ๋งŒ ํ‘œ์‹œ๋œ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ด๋Ÿฌํ•œ ์ธก์ •ํ•ญ๋ชฉ์„ ํ…Œ์ด๋ธ” ์ˆ˜์ค€ ๋ฐฐ์—ด์˜ ์—ด๋กœ ์ถ”๊ฐ€๋กœ ๊ตฌ์ฒดํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

CREATE TABLE cpu_alc (
  created_date Date,  
  created_at DateTime,  
  time String,  
  tags_id UInt32,  
  metrics Nested(
    name LowCardinality(String),  
    value Float64
  ),
  usage_user Float64 
             MATERIALIZED metrics.value[indexOf(metrics.name,'usage_user')],
  usage_system Float64 
             MATERIALIZED metrics.value[indexOf(metrics.name,'usage_system')]
) ENGINE = MergeTree(created_date, (tags_id, created_at), 8192);

์‚ฝ์ž…ํ•  ๋•Œ ํด๋ฆญ ํ•˜์šฐ์Šค ์ž๋™์œผ๋กœ ๊ณ„์‚ฐ๋ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋น„์ฆˆ๋‹ˆ์Šค์™€ ์ฆ๊ฑฐ์›€์„ ๊ฒฐํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณ„ํš์€ ์œ ์—ฐํ•˜๊ณ  ์ผ๋ฐ˜์ ์ด์ง€๋งŒ ๊ฐ€์žฅ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์—ด์„ ๋ฝ‘์•„๋ƒˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ธ์„œํŠธ๋ฅผ ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜์‹ญ์‹œ์˜ค. ETL๊ณ„์†ํ•ด์„œ ํ…Œ์ด๋ธ”์— ๋ฐฐ์—ด์„ ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋ฐฉ๊ธˆ ํ–ˆ์–ด์š” ALTER TABLE, ๋‘ ๊ฐœ์˜ ์Šคํ”ผ์ปค๋ฅผ ์ถ”๊ฐ€ํ–ˆ์œผ๋ฉฐ ์ฆ‰์‹œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋” ๋น ๋ฅธ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ตฌ์„ฑํ‘œ๋ฅผ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค.

์ฝ”๋ฑ ๋ฐ ์••์ถ•

์— ์‹œ๊ณ„์—ด ์ •๋ณด์˜ ์–‘์ด ๋งค์šฐ ํด ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์–ผ๋งˆ๋‚˜ ์ž˜ ์••์ถ•ํ•˜๋Š”์ง€๊ฐ€ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์•ˆ์— ํด๋ฆญ ํ•˜์šฐ์Šค 1:10, 1:20, ๋•Œ๋กœ๋Š” ๊ทธ ์ด์ƒ์˜ ์••์ถ• ํšจ๊ณผ๋ฅผ ์–ป๊ธฐ ์œ„ํ•œ ๋„๊ตฌ ์„ธํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋””์Šคํฌ์— ์••์ถ•์„ ํ‘ผ ๋ฐ์ดํ„ฐ 1TB๊ฐ€ 50~100GB๋ฅผ ์ฐจ์ง€ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค. ํฌ๊ธฐ๊ฐ€ ์ž‘์„์ˆ˜๋ก ์ข‹์œผ๋ฉฐ, ๋ฐ์ดํ„ฐ๋ฅผ ๋” ๋นจ๋ฆฌ ์ฝ๊ณ  ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋†’์€ ์ˆ˜์ค€์˜ ์••์ถ•์„ ๋‹ฌ์„ฑํ•˜๋ ค๋ฉด, ํด๋ฆญ ํ•˜์šฐ์Šค ๋‹ค์Œ ์ฝ”๋ฑ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค:

ํด๋ฆญํ•˜์šฐ์Šค๋กœ์˜ ์ด์ „: 3๋…„ ํ›„

์˜ˆ์ œ ํ…Œ์ด๋ธ”:

CREATE TABLE benchmark.cpu_codecs_lz4 (
    created_date Date DEFAULT today(), 
    created_at DateTime DEFAULT now() Codec(DoubleDelta, LZ4), 
    tags_id UInt32, 
    usage_user Float64 Codec(Gorilla, LZ4), 
    usage_system Float64 Codec(Gorilla, LZ4), 
    usage_idle Float64 Codec(Gorilla, LZ4), 
    usage_nice Float64 Codec(Gorilla, LZ4), 
    usage_iowait Float64 Codec(Gorilla, LZ4), 
    usage_irq Float64 Codec(Gorilla, LZ4), 
    usage_softirq Float64 Codec(Gorilla, LZ4), 
    usage_steal Float64 Codec(Gorilla, LZ4), 
    usage_guest Float64 Codec(Gorilla, LZ4), 
    usage_guest_nice Float64 Codec(Gorilla, LZ4), 
    additional_tags String DEFAULT ''
)
ENGINE = MergeTree(created_date, (tags_id, created_at), 8192);

์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๋Š” ์ฝ”๋ฑ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค ๋”๋ธ”๋ธํƒ€ ํ•œ ๊ฒฝ์šฐ์—๋Š”, ๋‘ ๋ฒˆ์งธ ๊ฒฝ์šฐ์—๋Š” - ๊ณ ๋ฆด๋ผ, ๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๋Š” ํ™•์‹คํžˆ ๋” ๋งŽ์€ ๊ฒƒ์„ ์ถ”๊ฐ€ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค LZ4 ์••์ถ•. ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋””์Šคํฌ์˜ ๋ฐ์ดํ„ฐ ํฌ๊ธฐ๊ฐ€ ํฌ๊ฒŒ ์ค„์–ด๋“ญ๋‹ˆ๋‹ค.

ํด๋ฆญํ•˜์šฐ์Šค๋กœ์˜ ์ด์ „: 3๋…„ ํ›„

์ด๋Š” ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ฐจ์ง€ํ•˜๋Š” ๊ณต๊ฐ„์„ ๋ณด์—ฌ ์ฃผ์ง€๋งŒ ์„œ๋กœ ๋‹ค๋ฅธ ์ฝ”๋ฑ๊ณผ ์••์ถ•์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ๋””์Šคํฌ์˜ GZIP ํŒŒ์ผ์— ์žˆ์Šต๋‹ˆ๋‹ค.
  • ClickHouse์—์„œ๋Š” ์ฝ”๋ฑ์ด ์—†์ง€๋งŒ ZSTD ์••์ถ•์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ClickHouse์—์„œ ์ฝ”๋ฑ๊ณผ ์••์ถ• LZ4 ๋ฐ ZSTD๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ฝ”๋ฑ์ด ์žˆ๋Š” ํ…Œ์ด๋ธ”์ด ํ›จ์”ฌ ์ ์€ ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํฌ๊ธฐ ๋ฌธ์ œ

๋œ ์ค‘์š”ํ•˜์ง€ ์•Š๋‹ค ์„ ํƒ ์˜ฌ๋ฐ”๋ฅธ ๋ฐ์ดํ„ฐ ์œ ํ˜•:

ํด๋ฆญํ•˜์šฐ์Šค๋กœ์˜ ์ด์ „: 3๋…„ ํ›„

์œ„์˜ ๋ชจ๋“  ์˜ˆ์—์„œ ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•œ ํ”Œ๋กœํŠธ64. ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ๊ฐ€ ์„ ํƒํ–ˆ๋‹ค๋ฉด ํ”Œ๋กœํŠธ32, ๊ทธ๋Ÿฌ๋ฉด ๊ทธ๊ฒŒ ๋” ์ข‹์„ ๊ฒƒ ๊ฐ™์•„์š”. ์ด๊ฒƒ์€ ์œ„์— ๋งํฌ๋œ ๊ธฐ์‚ฌ์—์„œ Perkona์˜ ์‚ฌ๋žŒ๋“ค์— ์˜ํ•ด ์ž˜ ์ž…์ฆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ž‘์—…์— ์ ํ•ฉํ•œ ๊ฐ€์žฅ ์ปดํŒฉํŠธํ•œ ์œ ํ˜•์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์ฟผ๋ฆฌ ์†๋„๋ณด๋‹ค ๋””์Šคํฌ ํฌ๊ธฐ๊ฐ€ ํ›จ์”ฌ ์ ์Šต๋‹ˆ๋‹ค. ํด๋ฆญ ํ•˜์šฐ์Šค ์ด๊ฒƒ์— ๋งค์šฐ ๋ฏผ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‹น์‹ ์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด int32 ๋Œ€์‹  int64, ๊ทธ๋Ÿฌ๋ฉด ์„ฑ๋Šฅ์ด ๊ฑฐ์˜ ๋‘ ๋ฐฐ ์ฆ๊ฐ€ํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋œ ์ฐจ์ง€ํ•˜๋ฉฐ ๋ชจ๋“  "์‚ฐ์ˆ "์ด ํ›จ์”ฌ ๋น ๋ฅด๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ํด๋ฆญ ํ•˜์šฐ์Šค ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” ๋งค์šฐ ์—„๊ฒฉํ•œ ์œ ํ˜•์˜ ์‹œ์Šคํ…œ์ด๋ฏ€๋กœ ์ตœ์‹  ์‹œ์Šคํ…œ์ด ์ œ๊ณตํ•˜๋Š” ๋ชจ๋“  ๊ฐ€๋Šฅ์„ฑ์„ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ง‘๊ณ„ ๋ฐ ๊ตฌ์ฒดํ™” ๋œ ๋ทฐ

์ง‘๊ณ„ ๋ฐ ๊ตฌ์ฒดํ™”๋œ ๋ทฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์–‘ํ•œ ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์ง‘๊ณ„๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํด๋ฆญํ•˜์šฐ์Šค๋กœ์˜ ์ด์ „: 3๋…„ ํ›„

์˜ˆ๋ฅผ ๋“ค์–ด, ์ง‘๊ณ„๋˜์ง€ ์•Š์€ ์†Œ์Šค ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ ํŠน์ˆ˜ ์—”์ง„์„ ํ†ตํ•œ ์ž๋™ ํ•ฉ์‚ฐ์„ ํ†ตํ•ด ๋‹ค์–‘ํ•œ ๊ตฌ์ฒดํ™”๋œ ๋ทฐ๋ฅผ ์—ฌ๊ธฐ์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. SummingMergeTree(SMT). SMT ์ง‘๊ณ„๋ฅผ ์ž๋™์œผ๋กœ ๊ณ„์‚ฐํ•˜๋Š” ํŠน์ˆ˜ ์ง‘๊ณ„ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ์›์‹œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์‚ฝ์ž…๋˜๊ณ  ์ž๋™์œผ๋กœ ์ง‘๊ณ„๋˜๋ฉฐ ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ์ฆ‰์‹œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

TTL - ์˜ค๋ž˜๋œ ๋ฐ์ดํ„ฐ๋ฅผ "์žŠ์–ด"

๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋ฅผ "์žŠ๋Š”" ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ํด๋ฆญ ํ•˜์šฐ์Šค ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•  ๋•Œ ๋‹ค์Œ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. TTL ์˜ˆ๋ฅผ ๋“ค์–ด, ํ•˜๋ฃจ ๋™์•ˆ์˜ ๋ถ„ ๋ฐ์ดํ„ฐ, 30์ผ ๋™์•ˆ์˜ ์ผ์ผ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์ฃผ๋ณ„ ๋˜๋Š” ์›”๋ณ„ ๋ฐ์ดํ„ฐ๋ฅผ ์ ˆ๋Œ€ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

CREATE TABLE aggr_by_minute
โ€ฆ
TTL time + interval 1 day

CREATE TABLE aggr_by_day
โ€ฆ
TTL time + interval 30 day

CREATE TABLE aggr_by_week
โ€ฆ
/* no TTL */

๋‹ค ๊ณ„์ธต - ๋””์Šคํฌ ์ „์ฒด์— ๋ฐ์ดํ„ฐ ๋ถ„ํ• 

์ด ์•„์ด๋””์–ด๋ฅผ ๋” ๋ฐœ์ „์‹œํ‚ค๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์Œ ์œ„์น˜์— ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํด๋ฆญ ํ•˜์šฐ์Šค ๋‹ค๋ฅธ ์žฅ์†Œ์—์„œ. ๋งค์šฐ ๋น ๋ฅธ ๋กœ์ปฌ ์ปดํ“จํ„ฐ์— ์ง€๋‚œ ์ฃผ์˜ ํ•ซ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์‹ถ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. SSD, ๋” ๋งŽ์€ ๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฅธ ๊ณณ์— ๋‘์—ˆ์Šต๋‹ˆ๋‹ค. ์•ˆ์— ํด๋ฆญ ํ•˜์šฐ์Šค ์ด์ œ ์ด๊ฒƒ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค:

ํด๋ฆญํ•˜์šฐ์Šค๋กœ์˜ ์ด์ „: 3๋…„ ํ›„

์Šคํ† ๋ฆฌ์ง€ ์ •์ฑ…(์Šคํ† ๋ฆฌ์ง€ ์ •์ฑ…) ๊ทธ๋ž˜์„œ ํด๋ฆญ ํ•˜์šฐ์Šค ํŠน์ • ์กฐ๊ฑด์— ๋„๋‹ฌํ•˜๋ฉด ์ž๋™์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฅธ ์ €์žฅ์†Œ๋กœ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๊ทธ๊ฒŒ ์ „๋ถ€๋Š” ์•„๋‹™๋‹ˆ๋‹ค. ํŠน์ • ํ…Œ์ด๋ธ” ์ˆ˜์ค€์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ฝœ๋“œ ์Šคํ† ๋ฆฌ์ง€์— ๋“ค์–ด๊ฐ€๋Š” ์ •ํ™•ํ•œ ์‹œ์ ์— ๋Œ€ํ•œ ๊ทœ์น™์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฐ์ดํ„ฐ๋Š” 7์ผ ๋™์•ˆ ๋งค์šฐ ๋น ๋ฅธ ๋””์Šคํฌ์— ์ €์žฅ๋˜๊ณ  ์˜ค๋ž˜๋œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋Š” ๋Š๋ฆฐ ๋””์Šคํฌ๋กœ ์ „์†ก๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋น„์šฉ์„ ์ œ์–ดํ•˜๊ณ  ์ฝœ๋“œ ๋ฐ์ดํ„ฐ์— ๋ˆ์„ ๋‚ญ๋น„ํ•˜์ง€ ์•Š์œผ๋ฉด์„œ ์‹œ์Šคํ…œ์„ ์ตœ๋Œ€ ์„ฑ๋Šฅ์œผ๋กœ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ข‹์Šต๋‹ˆ๋‹ค.

CREATE TABLE 
... 
TTL date + INTERVAL 7 DAY TO VOLUME 'cold_volume', 
    date + INTERVAL 180 DAY DELETE

๋…ํŠนํ•œ ๊ธฐ๋Šฅ ํด๋ฆญ ํ•˜์šฐ์Šค

๊ฑฐ์˜ ๋ชจ๋“  ๊ฒƒ์—์„œ ํด๋ฆญ ํ•˜์šฐ์Šค ์ด๋Ÿฌํ•œ "ํ•˜์ด๋ผ์ดํŠธ"๊ฐ€ ์žˆ์ง€๋งŒ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—๋Š” ์—†๋Š” ๋…์ ์„ฑ์œผ๋กœ ์ธํ•ด ์ƒ์‡„๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค์Œ์€ ๋ช‡ ๊ฐ€์ง€ ๊ณ ์œ ํ•œ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ํด๋ฆญ ํ•˜์šฐ์Šค:

  • ์–ด๋ ˆ์ด. ์— ํด๋ฆญ ํ•˜์šฐ์Šค ๋ฐฐ์—ด์— ๋Œ€ํ•œ ๋งค์šฐ ํ›Œ๋ฅญํ•œ ์ง€์›์€ ๋ฌผ๋ก  ๋ฐฐ์—ด์— ๋Œ€ํ•œ ๋ณต์žกํ•œ ๊ณ„์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ธฐ๋Šฅ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์ง‘๊ณ„. ์ด๊ฒƒ์€ "ํ‚ฌ๋Ÿฌ ๊ธฐ๋Šฅ" ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ํด๋ฆญ ํ•˜์šฐ์Šค. Yandex ์ง์›์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ง‘๊ณ„ํ•˜๊ณ  ์‹ถ์ง€ ์•Š๋‹ค๊ณ  ๋งํ–ˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๋ชจ๋“  ๊ฒƒ์ด ํด๋ฆญ ํ•˜์šฐ์Šค, ๋น ๋ฅด๊ณ  ํŽธ๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ด์ฃ .
  • ๊ตฌ์ฒดํ™”๋œ ๋ทฐ. ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์ง‘๊ณ„์™€ ํ•จ๊ป˜ ๊ตฌ์ฒดํ™”๋œ ๋ทฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํŽธ๋ฆฌํ•˜๊ฒŒ ์‹ค์‹œ๊ฐ„ ์ง‘ํ•ฉ.
  • ํด๋ฆญํ•˜์šฐ์ŠคSQL. ์ด๊ฒƒ์€ ์–ธ์–ด ํ™•์žฅ์ž…๋‹ˆ๋‹ค SQL ์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ถ”๊ฐ€ ๋ฐ ๋…์  ๊ธฐ๋Šฅ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ํด๋ฆญ ํ•˜์šฐ์Šค. ์ด์ „์—๋Š” ํ•œํŽธ์œผ๋กœ๋Š” ํ™•์žฅ ๊ฐ™์•˜๊ณ  ๋‹ค๋ฅธ ํ•œํŽธ์œผ๋กœ๋Š” ๋‹จ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ๊ฑฐ์˜ ๋ชจ๋“  ๋‹จ์ ์ด ๋น„๊ต๋˜์—ˆ์Šต๋‹ˆ๋‹ค. SQL92 ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ ์ œ๊ฑฐํ–ˆ๊ณ  ์ด์ œ๋Š” ๋‹จ์ง€ ํ™•์žฅ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.
  • ๋žŒ๋‹ค- ํ‘œํ˜„. ์•„์ง๋„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์žˆ๋‚˜์š”?
  • ML-์ง€์›ํ•˜๋‹ค. ์ด๋Š” ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ผ๋ถ€๋Š” ๋” ์ข‹๊ณ  ์ผ๋ถ€๋Š” ๋” ๋‚˜์ฉ๋‹ˆ๋‹ค.
  • ์˜คํ”ˆ ์†Œ์Šค. ์šฐ๋ฆฌ๋Š” ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ํด๋ฆญ ํ•˜์šฐ์Šค ํ•จ๊ป˜. ์ง€๊ธˆ์— ํด๋ฆญ ํ•˜์šฐ์Šค ์•ฝ 500๋ช…์˜ ๊ธฐ์—ฌ์ž๊ฐ€ ์žˆ์œผ๋ฉฐ ์ด ์ˆซ์ž๋Š” ์ง€์†์ ์œผ๋กœ ์ฆ๊ฐ€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊นŒ๋‹ค๋กœ์šด ์ฟผ๋ฆฌ

ะ’ ํด๋ฆญ ํ•˜์šฐ์Šค ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹ค์Œ ์„ธ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ํ…Œ์ด๋ธ”์˜ ๋งˆ์ง€๋ง‰ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. CPU (๋„ค ๋ฒˆ์งธ๋„ ์žˆ์ง€๋งŒ ํ›จ์”ฌ ๋” ์ด๊ตญ์ ์ž…๋‹ˆ๋‹ค).

์ฒซ ๋ฒˆ์งธ๋Š” ๋‹ค์Œ์—์„œ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์–ผ๋งˆ๋‚˜ ํŽธ๋ฆฌํ•œ์ง€ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ํด๋ฆญ ํ•˜์šฐ์Šค ํ™•์ธํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์ฟผ๋ฆฌ ํŠœํ”Œ ํ•˜์œ„ ์ฟผ๋ฆฌ์— ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ œ๊ฐ€ ๊ฐœ์ธ์ ์œผ๋กœ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ •๋ง ๋†“์ณค๋˜ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. ํ•˜์œ„ ์ฟผ๋ฆฌ์™€ ๋น„๊ตํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ๋Š” ์Šค์นผ๋ผ๋งŒ ๋น„๊ตํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์—ฌ๋Ÿฌ ์—ด์— ๋Œ€ํ•ด ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. JOIN. ์— ํด๋ฆญ ํ•˜์šฐ์Šค ํŠœํ”Œ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

SELECT *
  FROM cpu 
 WHERE (tags_id, created_at) IN 
    (SELECT tags_id, max(created_at)
        FROM cpu 
        GROUP BY tags_id)

๋‘ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์€ ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€๋งŒ ์ง‘๊ณ„ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ธ์ˆ˜์ตœ๋Œ€:

SELECT 
    argMax(usage_user), created_at),
    argMax(usage_system), created_at),
...
 FROM cpu 

ะ’ ํด๋ฆญ ํ•˜์šฐ์Šค ์ˆ˜์‹ญ ๊ฐœ์˜ ์ง‘๊ณ„ ํ•จ์ˆ˜๊ฐ€ ์žˆ์œผ๋ฉฐ ์กฐํ•ฉ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์กฐํ•ฉ๋ฒ•์˜ ๋ฒ•์น™์— ๋”ฐ๋ผ ์•ฝ ์ฒœ ๊ฐœ๋ฅผ ์–ป๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ArgMax - ์ตœ๋Œ€๊ฐ’์„ ๊ณ„์‚ฐํ•˜๋Š” ํ•จ์ˆ˜ ์ค‘ ํ•˜๋‚˜: ์š”์ฒญ์ด ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ๋ฒ•_์‚ฌ์šฉ์ž, ์ตœ๋Œ€๊ฐ’์— ๋„๋‹ฌํ•˜๋Š” ์ง€์  ์ƒ์„ฑ_์‹œ๊ฐ„:

SELECT now() as created_at,
       cpu.*
  FROM (SELECT DISTINCT tags_id from cpu) base 
  ASOF LEFT JOIN cpu USING (tags_id, created_at)

๊ฐ€์ž…๋ถ€ํ„ฐ โ€” ๋‹ค๋ฅธ ์‹œ๊ฐ„์˜ ํ–‰์„ "์ ‘์ฐฉ"ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ณ ์œ ํ•œ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. kdb +. ์‹œ๊ฐ„์ด ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ๊ฐœ์˜ ์‹œ๊ณ„์—ด์ด ์žˆ๋Š” ๊ฒฝ์šฐ ๊ฐ€์ž…๋ถ€ํ„ฐ ํ•œ ๋ฒˆ์˜ ์š”์ฒญ์œผ๋กœ ์ด๋™ํ•˜๊ณ  ๋ณ‘ํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•œ ์‹œ๊ณ„์—ด์˜ ๊ฐ ๊ฐ’์— ๋Œ€ํ•ด ๋‹ค๋ฅธ ์‹œ๊ณ„์—ด์—์„œ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ฐ’์„ ์ฐพ์•„ ๋™์ผํ•œ ์ค„์— ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

ํด๋ฆญํ•˜์šฐ์Šค๋กœ์˜ ์ด์ „: 3๋…„ ํ›„

๋ถ„์„ ๊ธฐ๋Šฅ

ํ‘œ์ค€์—์„œ SQL-2003 ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

SELECT origin,
       timestamp,
       timestamp -LAG(timestamp, 1) OVER (PARTITION BY origin ORDER BY timestamp) AS duration,
       timestamp -MIN(timestamp) OVER (PARTITION BY origin ORDER BY timestamp) AS startseq_duration,
       ROW_NUMBER() OVER (PARTITION BY origin ORDER BY timestamp) AS sequence,
       COUNT() OVER (PARTITION BY origin ORDER BY timestamp) AS nb
  FROM mytable
ORDER BY origin, timestamp;

ะ’ ํด๋ฆญ ํ•˜์šฐ์Šค ๊ทธ๋ ‡๊ฒŒ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํ‘œ์ค€์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. SQL-2003 ๊ทธ๋ฆฌ๊ณ  ์•„๋งˆ ์ ˆ๋Œ€ ๊ทธ๋ ‡๊ฒŒ ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ค. ๋Œ€์‹ ์— ํด๋ฆญ ํ•˜์šฐ์Šค ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ๊ด€๋ก€์ž…๋‹ˆ๋‹ค.

ํด๋ฆญํ•˜์šฐ์Šค๋กœ์˜ ์ด์ „: 3๋…„ ํ›„

๋‚˜๋Š” ๋žŒ๋‹ค๋ฅผ ์•ฝ์†ํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ ์žˆ์Šต๋‹ˆ๋‹ค!

์ด๋Š” ํ‘œ์ค€์˜ ๋ถ„์„ ์ฟผ๋ฆฌ์™€ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. SQL-2003: ๊ทธ๋Š” ๋‘˜ ์‚ฌ์ด์˜ ์ฐจ์ด๋ฅผ ์„ผ๋‹ค ํƒ€์ž„์Šคํƒฌํ”„, ๊ธฐ๊ฐ„, ์„œ์ˆ˜ - ์ผ๋ฐ˜์ ์œผ๋กœ ๋ถ„์„ ๊ธฐ๋Šฅ์„ ๊ณ ๋ คํ•˜๋Š” ๋ชจ๋“  ๊ฒƒ. ์•ˆ์— ํด๋ฆญ ํ•˜์šฐ์Šค ๋ฐฐ์—ด์„ ํ†ตํ•ด ๊ฐœ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. ๋จผ์ € ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐฐ์—ด๋กœ ์ถ•์†Œํ•œ ๋‹ค์Œ ๋ฐฐ์—ด์—์„œ ์›ํ•˜๋Š” ๋ชจ๋“  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ ๋‹ค์Œ ๋‹ค์‹œ ํ™•์žฅํ•ฉ๋‹ˆ๋‹ค. ๋งค์šฐ ํŽธ๋ฆฌํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ์ตœ์†Œํ•œ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ๋Œ€ํ•œ ์• ์ •์ด ํ•„์š”ํ•˜์ง€๋งŒ ๋งค์šฐ ์œ ์—ฐํ•ฉ๋‹ˆ๋‹ค.

ํŠน๋ณ„ํ•œ ๊ธฐ๋Šฅ

๊ฒŒ๋‹ค๊ฐ€ ์—์„œ๋Š” ํด๋ฆญ ํ•˜์šฐ์Šค ๋งŽ์€ ์ „๋ฌธ ๊ธฐ๋Šฅ. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋™์‹œ์— ์ง„ํ–‰๋˜๋Š” ์„ธ์…˜ ์ˆ˜๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์ผ๋ฐ˜์ ์ธ ๋ชจ๋‹ˆํ„ฐ๋ง ์ž‘์—…์€ ํ•œ ๋ฒˆ์˜ ์š”์ฒญ์œผ๋กœ ์ตœ๋Œ€ ๋กœ๋“œ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์•ˆ์— ํด๋ฆญ ํ•˜์šฐ์Šค ์ด ๋ชฉ์ ์„ ์œ„ํ•œ ํŠน๋ณ„ํ•œ ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค:

ํด๋ฆญํ•˜์šฐ์Šค๋กœ์˜ ์ด์ „: 3๋…„ ํ›„

์ผ๋ฐ˜์ ์œผ๋กœ ClickHouse์—๋Š” ๋‹ค์–‘ํ•œ ๋ชฉ์ ์„ ์œ„ํ•œ ํŠน์ˆ˜ ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • runningDifference, runningAccumulate, ์ด์›ƒ;
  • sumMap(ํ‚ค, ๊ฐ’);
  • timeSeriesGroupSum(uid, ํƒ€์ž„์Šคํƒฌํ”„, ๊ฐ’);
  • timeSeriesGroupRateSum(uid, ํƒ€์ž„์Šคํƒฌํ”„, ๊ฐ’);
  • SkewPop, SkewSamp, KurtPop, KurtSamp;
  • ์ฑ„์šฐ๊ธฐ ํฌํ•จ / ๋„ฅํƒ€์ด ํฌํ•จ;
  • ๋‹จ์ˆœ์„ ํ˜•ํšŒ๊ท€, ํ™•๋ฅ ์ ์„ ํ˜•ํšŒ๊ท€.

์ด๊ฒƒ์€ ์ „์ฒด ๊ธฐ๋Šฅ ๋ชฉ๋ก์ด ์•„๋‹ˆ๋ฉฐ ์ด 500-600๊ฐœ์ž…๋‹ˆ๋‹ค. ํžŒํŠธ: ๋ชจ๋“  ๊ธฐ๋Šฅ์€ ํด๋ฆญ ํ•˜์šฐ์Šค ์‹œ์Šคํ…œ ํ…Œ์ด๋ธ”์— ์žˆ์Šต๋‹ˆ๋‹ค(๋ชจ๋‘ ๋ฌธ์„œํ™”๋˜์–ด ์žˆ์ง€๋Š” ์•Š์ง€๋งŒ ๋ชจ๋‘ ํฅ๋ฏธ๋กญ์Šต๋‹ˆ๋‹ค).

select * from system.functions order by name

ํด๋ฆญ ํ•˜์šฐ์Šค ๋‹ค์Œ์„ ํฌํ•จํ•˜์—ฌ ์ž์ฒด์— ๋Œ€ํ•œ ๋งŽ์€ ์ •๋ณด๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๋กœ๊ทธ ํ…Œ์ด๋ธ”, ์ฟผ๋ฆฌ_๋กœ๊ทธ, ์ถ”์  ๋กœ๊ทธ, ๋ฐ์ดํ„ฐ ๋ธ”๋ก ์ž‘์—… ๋กœ๊ทธ(๋ถ€ํ’ˆ๋กœ๊ทธ), ๋ฉ”ํŠธ๋ฆญ ๋กœ๊ทธ, ์‹œ์Šคํ…œ ๋กœ๊ทธ ๋“ฑ์ด ์žˆ์œผ๋ฉฐ ์ผ๋ฐ˜์ ์œผ๋กœ ๋””์Šคํฌ์— ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค. ๋กœ๊ทธ ์ธก์ •ํ•ญ๋ชฉ์€ ์‹œ๊ณ„์—ด ะฒ ํด๋ฆญ ํ•˜์šฐ์Šค ์‚ฌ์‹ค์€ ํด๋ฆญ ํ•˜์šฐ์Šค: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž์ฒด๊ฐ€ ์—ญํ• ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค ์‹œ๊ณ„์—ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž์ฒด๋ฅผ "์‚ผํ‚ค๊ฒŒ" ๋ฉ๋‹ˆ๋‹ค.

ํด๋ฆญํ•˜์šฐ์Šค๋กœ์˜ ์ด์ „: 3๋…„ ํ›„

์ด๊ฒƒ์€ ๋˜ํ•œ ๋…ํŠนํ•œ ์ผ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์ข‹์€ ์ผ์„ ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์‹œ๊ณ„์—ด, ์™œ ์šฐ๋ฆฌ๋Š” ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ์„ ์šฐ๋ฆฌ ์ž์‹  ์•ˆ์— ์ €์žฅํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๊นŒ? ์šฐ๋ฆฌ๋Š” ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค ํ”„๋กœ ๋ฉ”ํ…Œ์šฐ์Šค, ์šฐ๋ฆฌ๋Š” ๋ชจ๋“  ๊ฒƒ์„ ์Šค์Šค๋กœ์—๊ฒŒ ๋งก๊น๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ๋จ ๊ทธ๋ผ ํŒŒ๋‚˜ ๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๋Š” ์šฐ๋ฆฌ ์ž์‹ ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋งŒ์ผ ํด๋ฆญ ํ•˜์šฐ์Šค ๋„˜์–ด์ง€๋ฉด ์ด์œ ๋ฅผ ์•Œ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ฐ˜์ ์œผ๋กœ ๊ทธ๋ ‡๊ฒŒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํฐ ํด๋Ÿฌ์Šคํ„ฐ ๋˜๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž‘์€ ํด๋Ÿฌ์Šคํ„ฐ ํด๋ฆญ ํ•˜์šฐ์Šค

ํ•˜๋‚˜์˜ ํฐ ํด๋Ÿฌ์Šคํ„ฐ ๋˜๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž‘์€ ClickHouse ์ค‘ ๋ฌด์—‡์ด ๋” ๋‚ซ์Šต๋‹ˆ๊นŒ? ์ „ํ†ต์ ์ธ ์ ‘๊ทผ ๋ฐฉ์‹ DWH ๊ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ํšŒ์„ ์ด ํ• ๋‹น๋˜๋Š” ๋Œ€๊ทœ๋ชจ ํด๋Ÿฌ์Šคํ„ฐ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ์ž๋ฅผ ์ฐพ์•„๊ฐ”์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์—๊ฒŒ ๋‹ค์ด์–ด๊ทธ๋žจ์„ ์ฃผ์ž ๊ทธ๋“ค์€ ์šฐ๋ฆฌ์—๊ฒŒ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‹ค์ด์–ด๊ทธ๋žจ์„ ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

ํด๋ฆญํ•˜์šฐ์Šค๋กœ์˜ ์ด์ „: 3๋…„ ํ›„

ะ’ ํด๋ฆญ ํ•˜์šฐ์Šค ๋‹ค๋ฅด๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ž์‹ ๋งŒ์˜ ๊ฒƒ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํด๋ฆญ ํ•˜์šฐ์Šค:

ํด๋ฆญํ•˜์šฐ์Šค๋กœ์˜ ์ด์ „: 3๋…„ ํ›„

๋” ์ด์ƒ ๊ทธ ๊ฑฐ๋Œ€ํ•˜๊ณ  ๊ดด๋ฌผ์Šค๋Ÿฌ์šด ๊ฒƒ์€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. DWH ๊ทธ๋ฆฌ๊ณ  ๋‹ค๋ฃจ๊ธฐ ํž˜๋“  ๊ด€๋ฆฌ์ž. ๊ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๊ณ ์œ ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํด๋ฆญ ํ•˜์šฐ์Šค, ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํด๋ฆญ ํ•˜์šฐ์Šค ์„ค์น˜๊ฐ€ ๋งค์šฐ ์‰ฝ๊ณ  ๋ณต์žกํ•œ ๊ด€๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํด๋ฆญํ•˜์šฐ์Šค๋กœ์˜ ์ด์ „: 3๋…„ ํ›„

ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ๊ฐ€ ๊ฐ€์ง„ ๊ฒƒ์ด ๋งŽ์œผ๋ฉด ํด๋ฆญ ํ•˜์šฐ์Šค, ์ž์ฃผ ์„ค์น˜ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์ด ํ”„๋กœ์„ธ์Šค๋ฅผ ์ž๋™ํ™”ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Kubernetes ะธ ํด๋ฆญํ•˜์šฐ์Šค-์šด์˜์ž. ์•ˆ์— ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํด๋ฆญํ•˜์šฐ์Šค "ํด๋ฆญ ์‹œ"๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๊ณ  ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์ค€๋น„๋ฉ๋‹ˆ๋‹ค. ์ฆ‰์‹œ ๋‹ค์ด์–ด๊ทธ๋žจ์„ ๋งŒ๋“ค๊ณ  ์—ฌ๊ธฐ์— ์ง€ํ‘œ ์—…๋กœ๋“œ๋ฅผ ์‹œ์ž‘ํ•˜๋ฉด 5๋ถ„ ์•ˆ์— ๋Œ€์‹œ๋ณด๋“œ๊ฐ€ โ€‹โ€‹์ค€๋น„๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ผ ํŒŒ๋‚˜. ์ •๋ง ๊ฐ„๋‹จํ•ด์š”!

๊ฒฐ๊ณผ๋Š” ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

๋”ฐ๋ผ์„œ, ํด๋ฆญ ํ•˜์šฐ์Šค - ์ด๊ฒƒ:

  • ๋นจ๋ฆฌ. ๋ชจ๋‘๊ฐ€ ์ด๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋‹ค๋งŒ. ์กฐ๊ธˆ ๋…ผ๋ž€์˜ ์—ฌ์ง€๊ฐ€ ์žˆ์ง€๋งŒ ํ›ˆ๋ จ์€ ์–ด๋ ต๊ณ  ์ „ํˆฌ๋Š” ์‰ฝ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ฐฉ๋ฒ•์„ ์ดํ•ดํ–ˆ๋‹ค๋ฉด ํด๋ฆญ ํ•˜์šฐ์Šค ์ž‘๋™ํ•˜๋ฉด ๋ชจ๋“  ๊ฒƒ์ด ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.
  • ๋ณดํŽธ์ ์œผ๋กœ. ๋‹ค์–‘ํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. DWH, ์‹œ๊ณ„์—ด, ๋กœ๊ทธ ์Šคํ† ๋ฆฌ์ง€. ํ•˜์ง€๋งŒ ๊ทธ๋ ‡์ง€ ์•Š๋‹ค OLTP ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์งง์€ ์‚ฝ์ž…์ด๋‚˜ ์ฝ๊ธฐ๋ฅผ ์‹œ๋„ํ•˜์ง€ ๋งˆ์„ธ์š”.
  • ์žฌ๋ฏธ์žˆ๊ฒŒ. ์•„๋งˆ ๊ฐ™์ด ์ผํ•˜๋Š” ์‚ฌ๋žŒ์ด๊ฒ ์ง€ ํด๋ฆญ ํ•˜์šฐ์Šค, ์ข‹์€ ์˜๋ฏธ์™€ ๋‚˜์œ ์˜๋ฏธ์—์„œ ๋งŽ์€ ํฅ๋ฏธ๋กœ์šด ์ˆœ๊ฐ„์„ ๊ฒฝํ—˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ƒˆ ๋ฆด๋ฆฌ์Šค๊ฐ€ ๋‚˜์™”๊ณ  ๋ชจ๋“  ๊ฒƒ์ด ์ž‘๋™์„ ๋ฉˆ์ท„์Šต๋‹ˆ๋‹ค. ํ˜น์€ ์ดํ‹€ ๋™์•ˆ ํ•œ ๊ฐ€์ง€ ์ผ๋กœ ์–ด๋ ค์›€์„ ๊ฒช์—ˆ๋Š”๋ฐ, ํ…”๋ ˆ๊ทธ๋žจ ์ฑ„ํŒ…์œผ๋กœ ์งˆ๋ฌธํ•˜๊ณ  ๋‚˜๋ฉด XNUMX๋ถ„ ๋งŒ์— ์ผ์ด ํ•ด๊ฒฐ๋˜๊ธฐ๋„ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜๋Š” Lesha Milovidov ๋ณด๊ณ ์„œ์˜ ํšŒ์˜์—์„œ์™€ ๊ฐ™์ด ํด๋ฆญ ํ•˜์šฐ์Šค ๋ฐฉ์†ก์„ ๋Š์—ˆ๋‹ค HighLoad ++. ์ด๋Ÿฐ ์ผ์€ ๋Š˜ ์ผ์–ด๋‚˜๋ฉฐ ์šฐ๋ฆฌ์˜ ์‚ถ์„ ํž˜๋“ค๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ํด๋ฆญ ํ•˜์šฐ์Šค ๋ฐ๊ณ  ํฅ๋ฏธ๋กญ๋‹ค!

ํ”„๋ ˆ์  ํ…Œ์ด์…˜์„ ์‹œ์ฒญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—.

ํด๋ฆญํ•˜์šฐ์Šค๋กœ์˜ ์ด์ „: 3๋…„ ํ›„

์˜ค๋žซ๋™์•ˆ ๊ธฐ๋‹ค๋ ค์˜จ ๊ณ ๋ถ€ํ•˜ ์‹œ์Šคํ…œ ๊ฐœ๋ฐœ์ž ํšŒ์˜ HighLoad ++ Skolkovo์—์„œ 9์›” 10์ผ๊ณผ XNUMX์ผ์— ๊ฐœ์ตœ๋ฉ๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ, HighLoad++์˜ ์—๋„ˆ์ง€๋Š” ์˜จ๋ผ์ธ์œผ๋กœ ๋‹ด์„ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์€ ์˜คํ”„๋ผ์ธ ์ปจํผ๋Ÿฐ์Šค๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค(๋น„๋ก ๋ชจ๋“  ์˜ˆ๋ฐฉ ์กฐ์น˜๊ฐ€ ์ด๋ฃจ์–ด์กŒ์ง€๋งŒ).

์ปจํผ๋Ÿฐ์Šค๋ฅผ ์œ„ํ•ด ์šฐ๋ฆฌ๋Š” ๊ธฐ์ˆ ์˜ ์ตœ๋Œ€ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์‚ฌ๋ก€๋ฅผ ์ฐพ๊ณ  ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. HighLoad++๋Š” Facebook, Yandex, VKontakte, Google ๋ฐ Amazon์ด ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์„ ์ดํ‹€ ์•ˆ์— ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ์žฅ์†Œ์˜€์œผ๋ฉฐ ์•ž์œผ๋กœ๋„ ๊ทธ๋Ÿด ๊ฒƒ์ž…๋‹ˆ๋‹ค.

2007๋…„๋ถ€ํ„ฐ ์‰ฌ์ง€ ์•Š๊ณ  ๋ชจ์ž„์„ ์ด์–ด์˜จ ์šฐ๋ฆฌ๋Š” ์˜ฌํ•ด๋กœ 14๋ฒˆ์งธ ๋ชจ์ž„์„ ๊ฐ–๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ๊ฐ„ ๋™์•ˆ ์ปจํผ๋Ÿฐ์Šค๋Š” 10๋ฐฐ ์„ฑ์žฅํ–ˆ์œผ๋ฉฐ, ์ง€๋‚œํ•ด์—๋Š” ์—…๊ณ„ ํ•ต์‹ฌ ํ–‰์‚ฌ๋กœ 3339๋ช…์˜ ์ฐธ๊ฐ€์ž, 165๋ช…์˜ ๋ฐœํ‘œ์ž, ๋ณด๊ณ ์„œ ๋ฐ ๋ฐ‹์—…์ด ๋ชจ์˜€์œผ๋ฉฐ 16๊ฐœ ํŠธ๋ž™์ด ๋™์‹œ์— ์ง„ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
์ž‘๋…„์—๋Š” ๋ฒ„์Šค 20๋Œ€, ์ฐจ์™€ ์ปคํ”ผ 5280๋ฆฌํ„ฐ, ๊ณผ์ผ ์Œ๋ฃŒ 1650๋ฆฌํ„ฐ, ์ƒ์ˆ˜ 10200๋ณ‘์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋˜ ๋‹ค๋ฅธ ์Œ์‹ 2640kg, ์ ‘์‹œ 16๊ฐœ, ์ปต 000๊ฐœ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์žฌํ™œ์šฉ ์ข…์ด๋กœ ๋ชจ์€ ๋ˆ์œผ๋กœ ์ฐธ๋‚˜๋ฌด ๋ชจ์ข… 25๊ทธ๋ฃจ๋ฅผ ์‹ฌ์—ˆ์Šต๋‹ˆ๋‹ค :)

ํ‹ฐ์ผ“์„ ๊ตฌ๋งคํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ์—ฌ๊ธฐ์—, ์ปจํผ๋Ÿฐ์Šค ์†Œ์‹์„ ๋ฐ›์•„๋ณด์„ธ์š” - ์—ฌ๊ธฐ์—, ๋ชจ๋“  ์†Œ์…œ ๋„คํŠธ์›Œํฌ์—์„œ ๋Œ€ํ™”ํ•˜์„ธ์š”. ํ…”๋ ˆ๊ทธ๋žจ, ํŽ˜์ด์Šค๋ถ, ๋ช… Vkontakte ะธ ํŠธ์œ„ํ„ฐ.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€