Skip to content

Latest commit

ย 

History

History
32 lines (20 loc) ยท 4.88 KB

RocksDB Compaction Filter.md

File metadata and controls

32 lines (20 loc) ยท 4.88 KB

์›๋ฌธ

RocksDB Compaction Filter

RocksDB๋Š” ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—… ์ค‘์— ์‚ฌ์šฉ์ž ์ž„์˜๋กœ ์ •์˜๋œ ๋กœ์ง์œผ๋กœ key/value ์Œ์„ ์ง€์šฐ๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐฉ์‹์„ ์ง€์›ํ•œ๋‹ค. TTL (Time-to-Live)์— ๋”ฐ๋ผ์„œ ๋งŒ๋ฃŒ๋œ ํ‚ค๋ฅผ ์ œ๊ฑฐํ•˜๊ฑฐ๋‚˜, ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ๋„“์€ ํ‚ค ๋ฒ”์œ„๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์„ ์ž„์˜๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€, ์‚ฌ์šฉ์ž์˜ ๊ธฐํ˜ธ์— ๋”ฐ๋ฅธ ๊ฐ€๋น„์ง€ ์ฝœ๋ ‰์…˜ (GC)๋ฅผ ์ •์˜ํ•˜๋Š” ํŽธ๋ฆฌํ•œ ๋ฐฉ๋ฒ•์ด ๋  ์ˆ˜ ์žˆ๋‹ค. ์‚ญ์ œ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์กด์žฌํ•˜๋Š” ํ‚ค์˜ update๋„ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์ด๋‹ค.

์ปดํŒฉ์…˜ ํ•„ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š”, RocksDB๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ ˆ๋ฒจ์—์„œ CompactionFilter ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค. ํ•ด๋‹น ์ธํ„ฐํŽ˜์ด์Šค๋Š” rocksdb/compaction_filter.h์— ์ •์˜๋˜์–ด ์žˆ์œผ๋ฉฐ ๊ตฌํ˜„ ์ดํ›„์—๋Š” ColumnFamilyOptions์— ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค. ๋˜๋Š”, CompactionFilterFactory ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ, ์„œ๋กœ ๋‹ค๋ฅธ sub compaction๋งˆ๋‹ค ๊ฐ๊ฐ์˜ ๊ณ ์œ ํ•œ ์ปดํŒฉ์…˜ ํ•„ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ปดํŒฉ์…˜ ํ•„ํ„ฐ ํŒฉํ† ๋ฆฌ์˜ ๊ฒฝ์šฐ์—๋Š” CompactionFilter::Context ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํ†ตํ•ด์„œ ํ˜„์žฌ ์ง„ํ–‰๋˜๋Š” ์ปดํŒฉ์…˜์ด full ์ปดํŒฉ์…˜์ธ์ง€ manual ์ปดํŒฉ์…˜์ธ์ง€ ๋“ฑ๊ณผ ๊ฐ™์€ ๋ช‡๊ฐ€์ง€ ์ •๋ณด๋“ค์„ ์–ป์–ด ์™€์„œ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์ปดํŒฉ์…˜ ํ•„ํ„ฐ ํŒฉํ† ๋ฆฌ๋Š” ์ด๋Ÿฌํ•œ Context ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ์กฐ๊ฑด์— ๋”ฐ๋ผ์„œ ์„œ๋กœ ๋‹ค๋ฅธ ์ปดํŒฉ์…˜ ํ•„ํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ ํ•  ์ˆ˜ ์žˆ๋‹ค.

options.compaction_filter = new CustomCompactionFilter();
// or
options.compaction_filter_factory.reset(new CustomCompactionFilterFactor());

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

๋ฐ์ดํ„ฐ ํ”Œ๋Ÿฌ์‹œ ์ž‘์—…๋„ ํŠน์ˆ˜ํ•œ ํƒ€์ž…์˜ ์ปดํŒฉ์…˜์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์ง€๋งŒ, ์ด ๊ฒฝ์šฐ์—๋Š” ์ปดํŒฉ์…˜ ํ•„ํ„ฐ๋ฅผ ์ ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ปดํŒฉ์…˜ ํ•„ํ„ฐ์™€ ํ•จ๊ป˜ ์ •์˜ ํ•  ์ˆ˜ ์žˆ๋Š” ๋˜ ๋‹ค๋ฅธ ๋‘๊ฐ€์ง€ API๊ฐ€ ์กด์žฌํ•œ๋‹ค. ํ•˜๋‚˜๋Š” ์ปดํŒฉ์…˜ ์‹œ์— key/value ์Œ์„ ํ•„ํ„ฐ๋ง ์—ฌ๋ถ€๋ฅผ ์•Œ๋ ค์ฃผ๋Š” Filter/FilterMergeOperand ์ด๋ฉฐ, ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ๋ฐธ๋ฅ˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๊ณ ๋‚˜, key range๋ฅผ drop ์‹œํ‚ฌ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” FilterV2์ด๋‹ค.

sub-compaction์ด ์ƒˆ๋กœ์šด ํ‚ค ๊ฐ’์„ ๋ฐœ๊ฒฌํ•˜๊ณ  ํ•ด๋‹น ๋ฐธ๋ฅ˜๊ฐ’์ด normal ์ƒํƒœ์ผ ๊ฒฝ์šฐ, ์ปดํŒฉ์…˜ ํ•„ํ„ฐ๋ฅผ ์ ์šฉํ•˜๊ณ , ์•„๋ž˜์˜ ์กฐ๊ฑด์— ๋”ฐ๋ผ์„œ ํ•„ํ„ฐ๋ง์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

  • ํ‚ค๋ฅผ ๋ณด์กดํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์„ ๊ฒฝ์šฐ, ์•„๋ฌด ๋ณ€ํ™”๋„ ์ผ์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค.
  • ํ‚ค๋ฅผ ํ•„ํ„ฐ๋ง ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์„ ๊ฒฝ์šฐ, ๋ฐธ๋ฅ˜ ๊ฐ’์„ deletion marker๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค. ์ปดํŒฉ์…˜ ์•„์›ƒํ’‹ ๋ ˆ๋ฒจ์ด ์ตœํ•˜์œ„ ๋ ˆ๋ฒจ์ผ ๊ฒฝ์šฐ, deletion marker๋ฅผ ๊ตณ์ด ์‚ฌ์šฉํ•  ํ•„์š”๋Š” ์—†๋‹ค.
  • ๋ฐธ๋ฅ˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์„ ๊ฒฝ์šฐ, ์ƒˆ๋กœ์šด ๋ฐธ๋ฅ˜ ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝ ๋œ๋‹ค.
  • kRemoveAndSkipUntil ํ”Œ๋ž˜๊ทธ๋ฅผ ๋ฐ˜ํ™˜ํ•˜์—ฌ key range๋ฅผ dropํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์„ ๊ฒฝ์šฐ, skip_until์ด ์ง€์ •ํ•˜๋Š” ํ‚ค ์ด์ „๊นŒ์ง€์˜ ๋ชจ๋“  ํ‚ค/๋ฐธ๋ฅ˜ ์Œ์„ ์Šคํ‚ตํ•œ๋‹ค. ์ด ๊ฒฝ์šฐ์— ์Šคํ‚ตํ•˜๋Š” ๋Œ€์ƒ ํ‚ค๋“ค์— ๋Œ€ํ•ด์„œ ๋”ฐ๋กœ deletion marker๋ฅผ ํ‘œํ˜„ํ•˜์ง€ ์•Š๋Š”๋ฐ, ํ‚ค์— ๋Œ€ํ•œ deletion marker๊ฐ€ ์—†์œผ๋ฏ€๋กœ ์Šคํ‚ตํ•˜๋Š” ํ‚ค ๋ฒ„์ „ ๋ณด๋‹ค ๋” ์˜ค๋ž˜๋œ ๋ฒ„์ „์˜ ํ‚ค๊ฐ€ ์ปดํŒฉ์…˜ ์•„์›ƒํ’‹์— ํฌํ•จ ๋  ์ˆ˜ ์žˆ๋‹ค. RocksDB๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‘์šฉํ”„๋กœ๊ทธ๋žจ์ด ์Šคํ‚ตํ•  ํ‚ค์˜ ์˜ค๋ž˜๋œ ๋ฒ„์ „์ด ์กด์žฌ ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜, ์˜ค๋ž˜๋œ ๋ฒ„์ „์˜ ํ‚ค๊ฐ€ ์•„์›ƒํ’‹์— ํฌํ•จ๋˜์–ด๋„ ๊ดœ์ฐฎ๋‹ค๋ฉด, ๊ณง๋ฐ”๋กœ key๋ฅผ dropํ•˜๋Š” ๊ฒƒ์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ์— ๋” ํšจ๊ณผ์ ์ด๋‹ค.

์ปดํŒฉ์…˜ ์ธํ’‹์ค‘์—์„œ ๊ฐ™์€ ํ‚ค๊ฐ’์— ๋Œ€ํ•ด ๋‹ค์ค‘ ๋ฒ„์ „์ด ์กด์žฌํ•œ๋‹ค๋ฉด, ์ปดํŒฉ์…˜ ํ•„ํ„ฐ๋Š” ๊ฐ€์žฅ ์ตœ์‹  ๋ฒ„์ „์˜ ํ‚ค์— ๋Œ€ํ•ด์„œ๋งŒ ์ ์šฉ๋œ๋‹ค. ์ตœ์‹  ๋ฒ„์ „์ด deletion marker๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด, ์ปดํŒฉ์…˜ ํ•„ํ„ฐ๋Š” ํ•ด๋‹น ํ‚ค์— ๋Œ€ํ•ด์„œ ์–ด๋– ํ•œ ์ž‘์—…๋„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๋Š”๋‹ค. ์‚ญ์ œ ๋˜์—ˆ์ง€๋งŒ deletion marker๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” ์ปดํŒฉ์…˜ ํ•„ํ„ฐ๊ฐ€ ์ ์šฉ๋œ๋‹ค.

merge๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋Š” merge ์ž‘์—…์— ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๊ฐ๊ฐ์˜ merge operand๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์ „์— ์ปดํŒฉ์…˜ ํ•„ํ„ฐ๋ฅผ ๋งค๋ฒˆ ์ ์šฉํ•œ ๋’ค, merge operand๋ฅผ ์ ์šฉํ•œ๋‹ค.

ํ˜„์žฌ ์ปดํŒฉ์…˜ ์ธํ’‹ key/value ์— ๋Œ€ํ•œ ์‹œ์ ๋ณด๋‹ค ๋” ์ตœ๊ทผ์˜ ์Šค๋ƒ…์ƒท์ด ์กด์žฌ ํ•  ๊ฒฝ์šฐ ์ปดํŒฉ์…˜ ํ•„ํ„ฐ๋ฅผ ์ ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.