Computer Science
Snowflake UID๋ฅผ ์ฌ์ฉํด์ผํ๋ ์ด์
9/26/2024

UUID๋ฅผ PK๋ก ์ฌ์ฉํ๋ค๋ฉด
๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ชจ๋ธ๋ง์ ํ ๋, PK๋ฅผ ์ธ๋ถ์์ ์์ธกํ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋ค๊ธฐ ์ํ์ฌ UUID๋ฅผ ์ฌ์ฉํ๊ณค ํฉ๋๋ค. ํ์ง๋ง UUID๋ฅผ PK๋ก ๊ฐ๋ ๊ฒ์ ๋ค์๊ณผ ๊ฐ์ ๋จ์ ์ ๊ฐ์ต๋๋ค.
1. ๋๋ฌด ๊ธด ๋ฌธ์์ด
UUID๋ 128๋นํธ, ์ฆ 16 byte๋ก ๊ตฌ์ฑ๋์ด์์ง๋ง ๊ฐ๋ ์ฑ์ ์ํด์ ๋ฌธ์์ด๋ก ์ ์ฅํ๊ณค ํฉ๋๋ค. 32์๋ฆฌ์ ๋ฌธ์์ด์ ์ ์ฅํ๊ธฐ ์ํด์๋ ์ธ์ฝ๋ฉ์ ๋ฐ๋ผ ๋ค๋ฅด์ง๋ง UTF-8 ๊ธฐ์ค์ผ๋ก 32 byte๊ฐ ํ์ํ ๊ฒ์ ๋๋ค. ( "-"๋ฅผ ํฌํจํ๋ฉด 36 byte๊ฐ ๋ฉ๋๋ค.) ์ด๋ 8 byte๋ฅผ ๊ฐ๋ BIGINT์ ๊ฐ์ ์๋ฃํ๊ณผ ๋น๊ตํ๋ฉด 4๋ฐฐ ์ ๋์ ์ฐจ์ด๊ฐ ๋ฉ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก PK์ ํฌ๊ธฐ๋ ๊ณง ์ธ๋ฑ์ค์ ํฌ๊ธฐ์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. MySQL์ ๊ฒฝ์ฐ PK๋ฅผ ์ํ ์ธ๋ฑ์ค ๋ฟ ๋ง ์๋๋ผ ๋ชจ๋ Secondary Index์๋ PK๊ฐ ํฌํจ๋์ด์ผ ํ๋ฏ๋ก ๋ฐ์ดํฐ์ ๊ท๋ชจ๊ฐ ์ปค์ง ์๋ก ๋ฌด์๋ชปํ ์ฑ๋ฅ ์ด์๋ฅผ ๋ณ๊ฒ ๋ฉ๋๋ค.
2. ์๊ฐ์ ์์ฐจ์ ์ด์ง ์์ ๊ฐ
UUID๋ฅผ PK๋ก ์ฌ์ฉํ๋ค๋ฉด, ์์ฑ ์์์ ๋ฐ๋ผ ๋จ์กฐ ์ฆ๊ฐํ์ง ์๋ ํน์ฑ์ ์ํด ์ธ๋ฑ์ค๊ฐ ๋นํจ์จ์ ์ผ๋ก ์ ์ฅ๋ฉ๋๋ค. ๊ฐ์ ์์ฑ์ ๋ฐ๋ผ ์์๋ก ์ธ๋ฑ์ค์ ๊ท ํ์ด ๊นจ์ ธ ์ฌ๊ตฌ์ฑ์ ํด์ผํ๋ ์ํฉ์ด ๋น๋ฒํ๊ฒ ๋ฐ์ํฉ๋๋ค.
์ฟผ๋ฆฌ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ํ์ํ ์ธ๋ฑ์ค์ ๋ฒ์๋ฅผ Working Set์ด๋ผ๊ณ ๋ถ๋ฆ ๋๋ค. ๋๋ถ๋ถ์ ์์ฒญ์ ์ต์ ๋ฐ์ดํฐ์ ์น์ค๋์ด์๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ธ๋ฑ์ค์ ์ผ๋ถ ๋ฒ์๋ง์ ์ฃผ๋ก ์ฐธ์กฐํ ๊ฒ์ ๋๋ค. ์ด ๋์, UUID๋ฅผ PK๋ก ์ฌ์ฉํ๋ ๊ตฌ์กฐ์์๋ ์ต์ ๋ฐ์ดํฐ๋ค์ด ํธ๋ฆฌ์ ๋ถ์ฐ๋์ด ์ ์ฅ๋ฉ๋๋ค. ๋ฐ๋ผ์ ์ต์ ์์ฒญ์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ๋์ ์ธ๋ฑ์ค ๋ด์ ๋ถ์ฐ๋์ด ์๋ ์ฌ๋ฌ ํ์ด์ง๋ค์ ๊ฐ์ ธ์ค๊ฒ ๋ ๊ฒ์ ๋๋ค. ์ด๋ ๋ถํ์ํ ๊ณผ๊ฑฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณ ์๋ ์ธ๋ฑ์ค๊น์ง ํจ๊ป ๊ฐ์ ธ์ค๊ฒ ๋๋ ํจ๊ณผ์ ํจ๊ป, ์์๋ก ์ธ๋ฑ์ค ํ์ด์ง๋ฅผ ๋ฉ๋ชจ๋ฆฌ์์ ๊ต์ฒดํด์ผํ๋ ๋นํจ์จ์ ๋ณ์ ๊ฒ์ ๋๋ค.

UUID๋ฅผ PK๋ก ์ฌ์ฉํ ๋ ์ต์ ๋ฐ์ดํฐ๋ฅผ ์ํ Index Working Set
Snowflake UID
Snowflake UID๋ ํธ์ํฐ๊ฐ ๊ฐ๋ฐํ ๋ถ์ฐ ์์คํ ํ๊ฒฝ์์ ๊ณ ์ ํ 64๋นํธ ID๋ฅผ ์์ฑํ๊ธฐ ์ํ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค. ์ด ์๊ณ ๋ฆฌ์ฆ์ ๋ถ์ฐ ํ๊ฒฝ์์๋ ์ค๋ณต๋์ง ์๋ ๊ณ ์ ํ ID๋ฅผ ๋งค์ฐ ๋น ๋ฅด๊ฒ ์์ฑํ ์ ์๋๋ก ์ค๊ณ๋์์ต๋๋ค.

Snowflake UID์ ํน์ง์ ์ฒซ 41๊ฐ์ bit๊ฐ timestamp๋ก ์ด๋ฃจ์ด์ ธ ์๋ค๋ ์ ์ ๋๋ค. UUID๋ timestamp๋ฅผ ์ฌ์ฉํ์ง ์๊ฑฐ๋, timestamp ๋นํธ๋ฅผ ์ฌ์กฐํฉํ์ฌ ID๋ฅผ ๋ง๋๋ ๋ฐ๋ฉด, Snowflake UID๋ ์ฒซ ๋นํธ๋ฅผ ์จ์ ํ timestamp๋ก ๊ตฌ์ฑํ๊ธฐ ๋๋ฌธ์ ์ ๋ ฌ๋ ์ ์๋ค๋ ์ ์ด ๊ฐ์ฅ ํฐ ํน์ง์ ๋๋ค.
๋ํ Snowflake UID๋ 64๋นํธ(8 Byte)๋ก ์ด๋ฃจ์ด์ ธ ์์ด UUID์ ๋นํด ๊ณต๊ฐ ์ ์ฝ์ ์ ๋ฆฌํฉ๋๋ค. ๋ํ ์ด๋ฅผ PK๋ก ํ์ฌ ์ ์ฅํ์ ๋ ์๊ฐ ์์๋ก ์ ๋ ฌ๋๊ธฐ ๋๋ฌธ์ ์ธ๋ฑ์ค์ ๊ท ํ์ด ์ ๊นจ์ง์ง ์์ ๋ฟ ๋๋ฌ ํ๋์ ์ธ๋ฑ์ค ํ์ด์ง์ ์ ํจํ ๋ฐ์ดํฐ๋ฅผ ๋ ๋ง์ด ๊ฐ์ง๊ณ ์์ ๊ฐ๋ฅ์ฑ์ด ๋์ ํจ์จ์ ์ธ ๋์์ด ๊ฐ๋ฅํฉ๋๋ค.

Snowflake UID๋ฅผ PK๋ก ์ฌ์ฉํ ๋ ์ต์ ๋ฐ์ดํฐ๋ฅผ ์ํ Index Working Set
Snowflake-id์ ๊ด๋ จ๋ ์คํ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๊ฝค ์์ผ๋ ๋ค์๋ฒ์ ํ๋ก์ ํธ ํ์ค ๋๋ ๋ปํ UUID๋ณด๋ค ์๋ฐ ๊ฒ๋ ํ๋ฒ ์ฐพ์์ ์ ์ฉ์์ผ๋ณด๊ณ ์ฐจ์ด์ ์ ๋ถ์ํด๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค~