rdb

๊ฐ•์ฝ”๋”ฉยท2025๋…„ 10์›” 28์ผ

๋ ˆ๋””์Šค

๋ชฉ๋ก ๋ณด๊ธฐ
20/21

๐Ÿ“˜ RDB ํŒŒ์ผ ๊ตฌ์กฐ ๊ฐœ์š”

Redis์˜ RDB ํŒŒ์ผ(dump.rdb)์€ ๋ฐ์ดํ„ฐ ์Šค๋ƒ…์ƒท(๋ฐฑ์—…) ์„ ์ €์žฅํ•˜๋Š” ์ด์ง„(binary) ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.
ํŒŒ์ผ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค:

๐Ÿงฉ ๊ทธ๋ฆผ 5-1: RDB ํŒŒ์ผ ๋‚ด์šฉ
Header ๋ฐ”์ดํŠธ
AUX ํ•„๋“œ 1
AUX ํ•„๋“œ 2
...
AUX ํ•„๋“œ N
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค 0์˜ ํ‚ค-๊ฐ’
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค 1์˜ ํ‚ค-๊ฐ’
...
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค N์˜ ํ‚ค-๊ฐ’
EOF
CRC64 ์ฒดํฌ์„ฌ

๐Ÿ“Œ ๊ตฌ์„ฑ ์š”์†Œ ์„ค๋ช…
๊ตฌ์„ฑ ์š”์†Œ ์„ค๋ช…
Header REDIS ๋ฌธ์ž์—ด + RDB ๋ฒ„์ „ ์ •๋ณด (์˜ˆ: REDIS0010 โ†’ ๋ฒ„์ „ 10)
AUX ํ•„๋“œ Redis์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ •๋ณด ์ €์žฅ (Redis ๋ฒ„์ „, ์ƒ์„ฑ ์‹œ๊ฐ, ๋ณต์ œ ๊ด€๋ จ ์ •๋ณด ๋“ฑ)
Database ๋ฐ์ดํ„ฐ ๊ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(DB 0~N)์˜ ์‹ค์ œ ํ‚ค-๊ฐ’ ๋ฐ์ดํ„ฐ ์ €์žฅ
EOF ํŒŒ์ผ์˜ ๋์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋งˆ์ปค
CRC64 ์ฒดํฌ์„ฌ ํŒŒ์ผ ๋ฌด๊ฒฐ์„ฑ ๊ฒ€์ฆ์šฉ ํ•ด์‹œ๊ฐ’
โš™๏ธ RDB ๋ฒ„์ „ ๋ฐ ํ˜ธํ™˜์„ฑ

์˜ˆ: REDIS0010 โ†’ Redis 10 ๋ฒ„์ „ ํ˜•์‹์˜ RDB ํŒŒ์ผ

Redis๋Š” ๋ฒ„์ „๋งˆ๋‹ค RDB ํฌ๋งท์ด ์กฐ๊ธˆ์”ฉ ๋‹ฌ๋ผ์ง€๋ฉฐ, ์‹ ๋ฒ„์ „์€ ๊ตฌ๋ฒ„์ „ RDB๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ์ง€๋งŒ,
๊ตฌ๋ฒ„์ „์€ ์‹ ๋ฒ„์ „ RDB๋ฅผ ์ฝ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

Redis 3.2.1 ์ดํ›„๋ถ€ํ„ฐ๋Š” ๋ ˆํ”Œ๋ฆฌ์ผ€์ด์…˜(replication) ๊ณผ์ •์—์„œ
๋งˆ์Šคํ„ฐ์˜ RDB ๋ฒ„์ „๊ณผ ์Šฌ๋ ˆ์ด๋ธŒ์˜ RDB ๋ฒ„์ „์ด ๋‹ฌ๋ผ๋„ ๋™์ž‘ํ•˜๋„๋ก ํ˜ธํ™˜์„ฑ ๊ฐœ์„ ์ด ์ด๋ฃจ์–ด์กŒ์Šต๋‹ˆ๋‹ค.
(์˜ˆ์ „์—๋Š” ๋ฒ„์ „ ์ฐจ์ด๊ฐ€ ์žˆ์œผ๋ฉด ๋™๊ธฐํ™”๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ–ˆ์Œ)

๐Ÿงฎ AUX ํ•„๋“œ โ€” RDB ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ •๋ณด

RDB ํŒŒ์ผ์—๋Š” ๋ฐ์ดํ„ฐ ์™ธ์—๋„ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(AUX fields) ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
์ด๋Š” RDB๋ฅผ ๋งŒ๋“  Redis ์ธ์Šคํ„ด์Šค์˜ ์ƒํƒœ๋‚˜ ์„ค์ • ์ •๋ณด๋ฅผ ๋‹ด์Šต๋‹ˆ๋‹ค.

ํ‘œ 5-1: RDB์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ •๋ณด
๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์„ค๋ช…
redis-ver Redis ๋ฒ„์ „ ์ •๋ณด
redis-bits ์‹คํ–‰ ์ค‘์ธ ํ˜ธ์ŠคํŠธ์˜ ์•„ํ‚คํ…์ฒ˜ ๋น„ํŠธ (32bit / 64bit)
ctime RDB ํŒŒ์ผ์ด ์ƒ์„ฑ๋œ ์œ ๋‹‰์Šค ์‹œ๊ฐ„ (Unix Time)
used-mem RDB ์ƒ์„ฑ ์‹œ์ ์˜ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰
repl-stream-db ๋ ˆํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹œ ์„ ํƒ๋œ DB ๋ฒˆํ˜ธ
repl-id ๋งˆ์Šคํ„ฐ ๋ ˆํ”Œ๋ฆฌ์ผ€์ด์…˜ ID
repl-offset ๋ ˆํ”Œ๋ฆฌ์ผ€์ด์…˜ ์˜คํ”„์…‹ ๊ฐ’ (๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ ์œ„์น˜)
aof-base ๋ฉ€ํ‹ฐ ํŽ˜๋“œ AOF ์‚ฌ์šฉ ์—ฌ๋ถ€
lua Lua ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ๊ด€๋ จ ์ •๋ณด (EVALSHA ๋ฐฑ์—… ์‹œ ์‚ฌ์šฉ)

์ด ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋“ค์€ RDB ๋ฐฑ์—…์˜ ํ™˜๊ฒฝ ์ •๋ณด๋ฅผ ํฌํ•จํ•ด
๋ณต์ œ(Replication), ๋ณต๊ตฌ ์‹œ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿง  ์ถ”๊ฐ€ ์„ค๋ช…

opcode ํ•„๋“œ: RDB๋Š” ๊ฐ ํ•ญ๋ชฉ๋งˆ๋‹ค ๋ฐ์ดํ„ฐ ์ข…๋ฅ˜๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด opcode๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
๊ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ณ„๋กœ opcode๊ฐ€ ๋“ฑ์žฅํ•˜๋ฉฐ, ๊ทธ ๋’ค์— ํ‚ค-๊ฐ’ ๋ฐ์ดํ„ฐ๊ฐ€ ๋”ฐ๋ผ์˜ต๋‹ˆ๋‹ค.

CRC64: ํŒŒ์ผ ๋๋ถ€๋ถ„์— ์œ„์น˜ํ•˜๋ฉฐ, ํŒŒ์ผ ์†์ƒ ์—ฌ๋ถ€๋ฅผ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.
(redis-check-rdb dump.rdb ๋ช…๋ น์œผ๋กœ ํ™•์ธ ๊ฐ€๋Šฅ)

๐Ÿงพ ์š”์•ฝ
๊ตฌ๋ถ„ ๋‚ด์šฉ
ํŒŒ์ผ ์‹œ์ž‘ REDIS + ๋ฒ„์ „๋ฒˆํ˜ธ
๋ฉ”ํƒ€๋ฐ์ดํ„ฐ AUX ํ•„๋“œ (๋ฒ„์ „, ์ƒ์„ฑ ์‹œ๊ฐ, ๋ฉ”๋ชจ๋ฆฌ ๋“ฑ)
๋ฐ์ดํ„ฐ ์ €์žฅ๋ถ€ ๊ฐ DB๋ณ„ key-value ๋ฐ์ดํ„ฐ
ํŒŒ์ผ ์ข…๋ฃŒ EOF + CRC64 ์ฒดํฌ์„ฌ
ํŠน์ง• ๋ฒ„์ „ ๊ฐ„ ํ˜ธํ™˜์„ฑ ์œ ์ง€ (3.2.1 ์ดํ›„), ๋ณต์ œ์™€ ๋ฐฑ์—…์— ํ™œ์šฉ

๐Ÿ’ก ์ฆ‰, RDB ํŒŒ์ผ์€ Redis์˜ ๋ฉ”๋ชจ๋ฆฌ ์ƒํƒœ๋ฅผ ์ด์ง„ ํฌ๋งท์œผ๋กœ ์ง๋ ฌํ™”ํ•œ ํŒŒ์ผ์ด๋ฉฐ,
๋‹จ์ˆœํ•œ ๋ฐฑ์—… ํŒŒ์ผ์ด ์•„๋‹ˆ๋ผ ํ™˜๊ฒฝ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์™€ ๋ณต์ œ ์ •๋ณด๊นŒ์ง€ ํฌํ•จํ•œ ์™„์ „ํ•œ ์Šค๋ƒ…์ˆ(snapshot) ์ž…๋‹ˆ๋‹ค.

profile
์ฃผ๋‹ˆ์–ด ํ’€์Šคํƒ๊ฐœ๋ฐœ์ž

0๊ฐœ์˜ ๋Œ“๊ธ€