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 ์ ๋ํ ์์ ๋ณด๋ค ๋ ์ต๊ทผ์ ์ค๋ ์ท์ด ์กด์ฌ ํ ๊ฒฝ์ฐ ์ปดํฉ์ ํํฐ๋ฅผ ์ ์ฉํ์ง ์๋๋ค.