[Clickhouse] Engine: CollapsingMergeTree

CollapsingMergeTree๋Š” MergeTree์˜ ์ฃผ์š” ๋ณ€ํ˜• ์—”์ง„ ์ค‘ ํ•˜๋‚˜๋‹ค.
์žฆ์€ ์ˆ˜์ •๊ณผ ์‚ญ์ œ์— ๋Œ€ํ•ด์„œ ์กฐ๊ธˆ ๋” ํ–ฅ์ƒ๋œ ์„ฑ๋Šฅ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค.

์ƒ๋‹นํžˆ ๊ธฐ๋ฌ˜ํ•œ ๋™์ž‘ ๋ฐฉ์‹์„ ๊ฐ€์ง„ ์—”์ง„์ด๋‹ค.
์ด๊ฑด ๋™์ผํ•œ ์ •๋ ฌํ‚ค์— ๋Œ€ํ•œ ๊ฐ’์„ ์Œ์†Œ๋ฉธ์‹œํ‚ค๋Š” ๋‚ด๋ถ€๋™์ž‘์„ ๊ฐ€์ง„๋‹ค.

ํ…Œ์ด๋ธ”์€ ์ด๋Ÿฐ ์‹์œผ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

create table items 
(
   id String, 
   value String, 
   sign Int8 
) ENGINE = CollapsingMergeTree(sign)
ORDER BY id

CollapsingMergeTree์€ "sign" ํ•„๋“œ๊ฐ€ ๋ณ„๋„๋กœ ํ•„์š”ํ•œ๋ฐ, ์ด๊ฑด 1/-1 ๊ฐ’์„ ๊ฐ€์ง€๋Š” ์ •์ˆ˜๊ฐ’์ด์–ด์•ผ ํ•œ๋‹ค. ๊ทธ ์ด์™ธ์˜ ๊ฐ’์€ ๋„ฃ์„ ์ˆ˜ ์—†๋‹ค.

ํ•œ๋ฒˆ ๊ฐ™์€ ํ‚ค์˜ ๊ฐ’์„ ๋„ฃ์–ด๋ณด๊ฒ ๋‹ค.

๋„ฃ๋Š” ๊ฒƒ ์ž์ฒด๋Š” ๋ฌธ์ œ์—†์ด ๋“ค์–ด๊ฐ„๋‹ค.


๊ทธ๋ฆฌ๊ณ , ๋‹น์—ฐํžˆ ํ‚ค๋Š” ์ค‘๋ณต์„ ํ—ˆ์šฉํ•œ๋‹ค.
ํ•˜์ง€๋งŒ Merge๊ฐ€ ์‹คํ–‰๋˜๋ฉด ๋ณ‘ํ•ฉ์ด ๋˜๊ธด ํ•œ๋‹ค.

optimize๋กœ merge๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•ด๋ณด๋ฉด

์ตœ์‹  ๊ฐ’๋งŒ ๋ณด์กดํ•˜๊ณ  ๋‚ ๋ ค๋ฒ„๋ฆด ๊ฒƒ์ด๋‹ค.
์—ฌ๊ธฐ๊นŒ์ง€๋Š” ReplacingMergeTree์˜ ๋™์ž‘๊ณผ ๋น„์Šทํ•ด๋ณด์ธ๋‹ค. ๊ทธ๋Ÿผ ๋ญ๊ฐ€ ๋‹ค๋ฅผ๊นŒ?

๊ฐ™์€ ํ‚ค์— sign์ด ๋‹ค๋ฅธ ๊ฐ’์„ 2๊ฐœ ๋„ฃ์–ด๋ณด๊ณ , merge๋ฅผ ๋Œ๋ฆฌ๋ฉด

๊ทธ ๊ฐ™์€ ํ‚ค๋ฅผ ๊ฐ€์กŒ๋˜ ๊ฐ’์ด ํ•ฉ์ณ์ง€๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ์Œ์œผ๋กœ ๋‚ ๋ผ๊ฐ€๋ฒ„๋ฆฐ๋‹ค.

์ •ํ™•ํžˆ 1:1๋กœ ๋‚ ๋ฆฌ๋Š” ๊ฑฐ๋ผ์„œ, ์–‘์ชฝ์ด ๋น„๋Œ€์นญ์ด๋ฉด ๋งŽ์€ ์ชฝ๋งŒ ๋‚จ๋Š”๋‹ค.
๊ทธ๋ž˜์„œ 1์„ ๋” ๋งŽ๊ฒŒ ๋‚จ๊ฒจ๋†“์œผ๋ฉด

์Œ์†Œ๋ฉธํ•˜๋ฉด์„œ 1์ธ ๊ฒƒ๋งŒ ๋‚จ๊ณ 

๋ฐ˜๋Œ€๋กœ -1์ด ๋” ๋งŽ์œผ๋ฉด

์Œ์†Œ๋ฉธํ•˜๋ฉด์„œ -1์ธ ๊ฒƒ๋งŒ ๋‚จ๋Š”๋‹ค.




๊ทธ๋ž˜์„œ ์ด๊ฑธ ์–ด๋””๋‹ค ์“ฐ๋Š”๊ฐ€?

์ด ์—”์ง„์˜ ๊ฐ•์ ์€, ๋นˆ๋ฒˆํ•œ UPDATE์™€ DELETE๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
์ผ๋ฐ˜์ ์ธ INSERT๋Š” sign=1๋กœ ๊ทธ๋ƒฅ ๋„ฃ๋‹ค๊ฐ€, ์ˆ˜์ •/์‚ญ์ œ๋ฅผ ํ• ๋•Œ sign=-1๋กœ ๊ฐ’์„ ์ถฉ๋Œ์‹œํ‚ค๋Š” ์‹์œผ๋กœ ์‘์šฉํ•œ๋‹ค.

์‚ญ์ œ์˜ ๊ฒฝ์šฐ์—๋Š” ์ด๋Ÿฐ ์‹์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
์‚ญ์ œํ•  ํ•„์š”๊ฐ€ ์žˆ์œผ๋ฉด ๊ฑฐ๊ธฐ์— DELETE๋ฅผ ๋‚ ๋ฆฌ๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ๋™์ผํ•œ ํ‚ค๊ฐ’์— sign=-1์ธ ํ–‰์„ ์‚ฝ์ž…ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
๊ทธ๋Ÿฌ๋ฉด ๋‹น์—ฐํžˆ merge๊ฐ€ ์‹คํ–‰๋ ๋•Œ ์ž๋™์œผ๋กœ ์‚ญ์ œ๋ฅผ ํ•ด์ค„ ๊ฒƒ์ด๊ณ , ๋‹น์—ฐํžˆ ํ•˜๋‚˜์”ฉ DELETE๋ฅผ ๋‚ ๋ฆฌ๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ํšจ์œจ์ ์ด๋‹ค.

์ˆ˜์ •์˜ ๊ฒฝ์šฐ์—๋Š” ์ด๋Ÿฐ ์‹์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
sign=-1๊ฐ’๊ณผ ์ˆ˜์ •ํ•  ๊ฐ’์„ ๋‹ด์€ sign=1 ๊ฐ’ 2๊ฐœ๋ฅผ INSERTํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฉด merge๊ฐ€ ์‹คํ–‰๋ ๋•Œ ์˜›๋‚  ๊ฐ’์€ ์Œ์ˆ˜์™€ ์Œ์†Œ๋ฉธํ•ด์„œ ์‚ฌ๋ผ์ง€๊ณ , ์ตœ์‹  ๊ฐ’๋งŒ ๋‚จ๊ฒŒ ๋œ๋‹ค.




์ฐธ์กฐ
https://clickhouse.com/docs/engines/table-engines/mergetree-family/collapsingmergetree