๐พ[Database] Hash Based Sharding์ด๋?
๐ Intro.
-
Hash Based Sharding์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค๋ฉ(โ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ๊ฐ์ ๋ฐ์ดํ
๋ฒ ์ด์ค๋ก ๋๋๋ ๊ธฐ๋ฒโ) ์ค ํ๋๋ก, ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ค๋(Shard)๋ฅผ ๊ฒฐ์ ํ ๋ ํด์ ํจ์(Hash Function)๋ฅผ ์ฌ์ฉํ๋ ๊ธฐ๋ฒ์
๋๋ค.
- ํด์ ํจ์(Hash Function)๋ฅผ ์ด์ฉํด ๋ฐ์ดํฐ๊ฐ ํน์ ์ค๋(Shard)์ ๊ท ๋ฑํ๊ฒ ๋ถ๋ฐฐ๋๋๋ก ํ๋ฉฐ, ๋ฐ์ดํฐ ๋ถํฌ์ ์กฐํ ํจ์จ์ฑ์ ์ต์ ํํฉ๋๋ค.
๋์ !! ๋ฒ์จ ๋๋ฌด ์ด๋ ค์ด ์ฉ์ด๋ค์ด ๋ง์ด ๋์์!! ๊ทธ๋๋ ์ฐจ๊ทผ ์ฐจ๊ทผ ์์๊ฐ๋ด์!! ๐
โ 1๏ธโฃ ์ค๋ฉ(Sharding)์ด๋ ๋ฌด์์ผ๊น์?
โ ์ค๋ฉ(Sharding).
-
์ค๋ฉ(Sharding)์ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ๊ฐ์ ์์ ์กฐ๊ฐ(Shard)์ผ๋ก ๋๋์ด ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์๋ฏธํฉ๋๋ค.
- ์ด๋ฌํ ์ค๋(Shard)๋ ๊ฐ๊ธฐ ๋ ๋ฆฝ์ ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์๋ฒ๋ก ๋์ํ๋ฉฐ, ๋๊ท๋ชจ ๋ฐ์ดํฐ์ ํธ๋ํฝ์ ์ฒ๋ฆฌํ ๋ ์ฑ๋ฅ๊ณผ ํ์ฅ์ฑ์ ํฅ์์ํค๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
โ ์ค๋ฉ๊ณผ ์ค๋.
- ์ค๋ฉ(Sharding): โ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ๊ฐ์ ์์ ์กฐ๊ฐ(Shard)์ผ๋ก ๋๋์ด ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ.โ
- ์ค๋(Shard): ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค๋ฉ์์ Shard๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ โ๋ ๋ฆฝ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์๋ฒโ๋ฅผ ๊ฐ๋ฆฌํด.
โ ์ค๋ฉ์ด ์ ํ์ํ์ง?
-
- ์ฑ๋ฅ ๋ฌธ์ ํด๊ฒฐ!
- โ๋ณ๋ชฉ ํ์์ ์ค์ผ ์ ์์ด์ :)โ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๊ฐ ๋ง์์ง๋ฉด ์ฟผ๋ฆฌ ์๋๊ฐ ๋๋ ค์ง๊ณ ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ํ ์ ์์ด์. ๐
- โ์ค๋ฉ(Sharding)์ ํตํด ๋ฐ์ดํฐ๋ฅผ ๋๋๋ฉด ๊ฐ ์ค๋(Shard)๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ์ฒ๋ฆฌ๋๋ฏ๋ก, ๋ณ๋ชฉ ํ์์ ์ค์ผ ์ ์์ง์โ
- ์ฑ๋ฅ ๋ฌธ์ ํด๊ฒฐ!
-
- ํ์ฅ์ฑ ํ๋ณด!
- โ์ค๋ฉ์ ํตํด ์ฌ๋ฌ ์๋ฒ๋ฅผ ์ถ๊ฐํ์ฌ ํ์ฅ์ด ๊ฐ๋ฅํด์ :)โ
- ๋ฐ์ดํฐ๊ฐ ๊ธ๊ฒฉํ ์ฆ๊ฐํ๊ฑฐ๋, ํธ๋ํฝ์ด ๋ง์์ง ๊ฒฝ์ฐ ๋จ์ผ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก๋ ๊ฐ๋นํ ์ ์์ด์.
- ๋๋ฌธ์ โ์ค๋ฉ์ ํตํด ์ฌ๋ฌ ์๋ฒ๋ฅผ ์ถ๊ฐํ์ฌ ํ์ฅ์ด ๊ฐ๋ฅํ์ง์.โ
- ํ์ฅ์ฑ ํ๋ณด!
-
- ์ ๋ขฐ์ฑ ๋ฐ ๊ฐ์ฉ์ฑ ํฅ์!
- โํ๋์ ์ค๋๊ฐ ์ฅ์ ๋ฅผ ๊ฒช๋๋ผ๋ ๋ค๋ฅธ ์ค๋๋ ์ ์์ ์ผ๋ก ์๋ํ์ฌ ์๋น์ค ์ค๋จ์ ๋ฐฉ์งํด์.โ
- ์ ๋ขฐ์ฑ ๋ฐ ๊ฐ์ฉ์ฑ ํฅ์!
โ ์ค๋ฉ์ ์๋ ์๋ฆฌ๋ฅผ ์์๋ด ์๋ค!
- ์ค๋ฉ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋ ํน์ ๊ธฐ์ค์ ๋ฐ๋ผ ๋๋๋๋ค.
- ์ด ๊ธฐ์ค์ ๋ฐ๋ผ ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ์ด๋ค ์ค๋์ ์ ์ฅํ ์ง ๊ฒฐ์ ๋ฉ๋๋ค.
1๏ธโฃ ์ค๋ ํค(Shard Key)
- ์ด ๊ธฐ์ค์ ๋ฐ๋ผ ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ์ด๋ค ์ค๋์ ์ ์ฅํ ์ง ๊ฒฐ์ ๋ฉ๋๋ค.
- ๋ฐ์ดํฐ๋ฅผ ๋๋ ๋ ์ฌ์ฉํ๋ ๊ธฐ์ค์ด ๋๋ ํค.
- ์: ์ฌ์ฉ์ ID, ๋ ์ง, ํน์ ๋ฐ์ดํฐ์ ํด์ ๊ฐ.
2๏ธโฃ ์ค๋ ํ ๋น
- ์: ์ฌ์ฉ์ ID, ๋ ์ง, ํน์ ๋ฐ์ดํฐ์ ํด์ ๊ฐ.
- ์ค๋ ํค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ํน์ ์ค๋์ ๋ถ๋ฐฐ.
- ์:
shard = hash(UserID) % number_of_shards
- ์:
- ์ ์์ ๋ฐ๋ผ ๋ฐ์ดํฐ๋ฅผ ์ค๋์ ํ ๋นํฉ๋๋ค.
โ ์ค๋ฉ์ ์ฅ์ ์ ๋ฌด์์ผ๊น์?
-
- ํ์ฅ์ฑ(Scalability)!
- ๋ฐ์ดํฐ๋ฅผ ๋ถ์ฐ ์ ์ฅํ์ฌ ์ํ์ ํ์ฅ์ด ๊ฐ๋ฅํฉ๋๋ค.
- ์: ์๋ฒ๋ฅผ ์ถ๊ฐํ๋ฉด ๋ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
- ํ์ฅ์ฑ(Scalability)!
-
- ์ฑ๋ฅ ํฅ์!
- ๋ฐ์ดํฐ๊ฐ ๋ถ์ฐ๋๋ฏ๋ก ๊ฐ ์ค๋์์ ์ฒ๋ฆฌํด์ผ ํ ๋ฐ์ดํฐ๋์ด ์ค์ด๋ค์ด ์ฟผ๋ฆฌ ์ฑ๋ฅ์ด ํฅ์๋ฉ๋๋ค.
- ์ฑ๋ฅ ํฅ์!
-
- ๊ฐ์ฉ์ฑ!
- ํน์ ์ค๋์ ์ฅ์ ๊ฐ ๋ฐ์ํด๋, ๋ค๋ฅธ ์ค๋๋ ์ ์์ ์ผ๋ก ์๋ํฉ๋๋ค.
- ๊ฐ์ฉ์ฑ!
โ ์ค๋ฉ์ ๋จ์ ์ ๋ฌด์์ผ๊น์?
-
- ๋ณต์ก์ฑ์ ์ฆ๊ฐ.
- ๋ฐ์ดํฐ๋ฅผ ๋๋๊ณ ๊ด๋ฆฌํ๋ ์ถ๊ฐ์ ์ธ ๋ก์ง์ด ํ์ํฉ๋๋ค.
- ์ค๋ ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์กฐํํด์ผ ํ๋ ๊ฒฝ์ฐ(์กฐ์ธ ์ฟผ๋ฆฌ) ๊ตฌํ์ด ๋ณต์กํด์ง ์ ์์ต๋๋ค.
- ๋ณต์ก์ฑ์ ์ฆ๊ฐ.
-
- ๋ฐ์ดํฐ ์ฌ๋ถ๋ฐฐ ๋น์ฉ.
- ์ค๋์ ๊ฐ์๋ฅผ ๋๋ฆฌ๊ฑฐ๋ ์ค์ผ ๊ฒฝ์ฐ, ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ถ๋ฐฐํด์ผ ํ๋ฉฐ ์ด๋ ์๊ฐ์ด ๋ง์ด ์์๋ฉ๋๋ค.
- ๋ฐ์ดํฐ ์ฌ๋ถ๋ฐฐ ๋น์ฉ.
-
- ํซ์คํ ๋ฌธ์ .
- ํน์ ์ค๋์ ๋ฐ์ดํฐ๊ฐ ๋ชฐ๋ฆฌ๋ฉด ํด๋น ์ค๋์ ๊ณผ๋ถํ๊ฐ ๊ฑธ๋ฆฌ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
- ํซ์คํ ๋ฌธ์ .
โ ์ค๋ฉ์ ์ข ๋ฅ์๋ ๋ฌด์์ด ์์๊น์?
1๏ธโฃ Range Based Sharding(๋ฒ์ ๊ธฐ๋ฐ ์ค๋ฉ)
- ๋ฐ์ดํฐ์ ๋ฒ์์ ๋ฐ๋ผ ์ค๋๋ฅผ ๋๋๋๋ค.
- ์: ์ฌ์ฉ์ ID๊ฐ 11000์ ์ค๋ 1, 10012000์ ์ค๋ 2.
- ์ฅ์ : ํน์ ๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ๋ ํจ์จ์ ์ ๋๋ค.
- ๋จ์ : ํน์ ๋ฒ์์ ๋ฐ์ดํฐ๊ฐ ๋ชฐ๋ฆด ๊ฒฝ์ฐ, ์ค๋๊ฐ ๋ถ๊ท ํํด์ง ์ ์์ต๋๋ค.
2๏ธโฃ Hash Based Sharding(ํด์ ๊ธฐ๋ฐ ์ค๋ฉ)
- ๋ฐ์ดํฐ์ ํด์ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ค๋๋ฅผ ๋๋๋๋ค.
- ์: shard = hash(UserID) % number_of_shards
- ์ฅ์ : ๋ฐ์ดํฐ๊ฐ ๊ท ๋ฑํ๊ฒ ๋ถ๋ฐฐ๋ฉ๋๋ค.
- ๋จ์ : ์ค๋ ๊ฐ์ ๋ณ๊ฒฝ ์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ถ๋ฐฐํด์ผ ํฉ๋๋ค.
3๏ธโฃ Directory Based Sharding(๋๋ ํ ๋ฆฌ ๊ธฐ๋ฐ ์ค๋ฉ)
- ์ค๋ ํค์ ์ค๋๋ฅผ ๋งคํํ ๋ณ๋์ ๋๋ ํ ๋ฆฌ(๋งคํ ํ
์ด๋ธ)๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ์ฅ์ : ์ ์ฐํ๊ฒ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฐฐ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
- ๋จ์ : ๋งคํ ํ ์ด๋ธ ๊ด๋ฆฌ์ ๋ณต์ก์ฑ์ด ์ฆ๊ฐํฉ๋๋ค.
โ 2๏ธโฃ Hash Based Sharding์ ์๋ ๋ฐฉ์์ ์ด๋ป๊ฒ ๋ ๊น์?
1๏ธโฃ ํด์ ํจ์(Hash Function).
- ํด์ ํจ์๋ ์
๋ ฅ๊ฐ(์: User ID, Order ID ๋ฑ)์ ๋ฐ์์ ๊ณ ์ ๋ ํฌ๊ธฐ์ ์ซ์(ํด์ ๊ฐ)๋ก ๋ณํํ๋ ํจ์์
๋๋ค.
- ์: hash(UserID) = 123456
2๏ธโฃ ์ค๋ ํ ๋น.
- ์: hash(UserID) = 123456
- ํด์ ๊ฐ์ ์ค๋์ ๊ฐ์๋ก ๋๋ ๋๋จธ์ง ๊ฐ(Modulo)์ ๊ณ์ฐํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ค๋๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.
- ์: shard = hash(UserID) % number_of_shards
- ์ค๋๊ฐ 3๊ฐ์ด๊ณ , hash(UserID) = 123456์ด๋ผ๋ฉด?
shard = 123456 % 3 = 0
- ๋ฐ๋ผ์ ๋ฐ์ดํฐ๋ ์ค๋ 0์ ์ ์ฅ๋ฉ๋๋ค.
3๏ธโฃ ๋ฐ์ดํฐ ์ ์ฅ.
- ํด์ ๊ฐ์ ๊ณ์ฐํ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ, ํด๋น ๋ฐ์ดํฐ๋ฅผ ํน์ ์ค๋์ ์ ์ฅํฉ๋๋ค.
โ 3๏ธโฃ Hash Based Sharding์ ์ฅ์ .
1๏ธโฃ ๊ท ๋ฑ ๋ถ๋ฐฐ.
- ํด์ ํจ์๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ ์ค๋์ ๊ท ๋ฑํ๊ฒ ๋ถ๋ฐฐํ๋ ค๊ณ ํฉ๋๋ค.
- ๋ฐ๋ผ์ ํน์ ์ค๋์ ๋ฐ์ดํฐ๊ฐ ๋ชฐ๋ฆฌ๋ ํ์(ํซ์คํ)์ด ์ค์ด๋ญ๋๋ค.
2๏ธโฃ ์กฐํ ์ฑ๋ฅ ์ต์ ํ.
- ๋ฐ๋ผ์ ํน์ ์ค๋์ ๋ฐ์ดํฐ๊ฐ ๋ชฐ๋ฆฌ๋ ํ์(ํซ์คํ)์ด ์ค์ด๋ญ๋๋ค.
- ๋ฐ์ดํฐ๋ฅผ ํน์ ์ค๋์๋ง ์กฐํํ๋ฉด ๋๋ฏ๋ก, ์ ์ฒด ์ค๋๋ฅผ ํ์ํ ํ์๊ฐ ์์ด ์ฑ๋ฅ์ด ํฅ์๋ฉ๋๋ค.
3๏ธโฃ ์ค๊ณ ๋จ์ํ.
- ํด์ ํจ์๋ฅผ ํตํด ์ค๋๋ฅผ ๊ฒฐ์ ํ๊ธฐ ๋๋ฌธ์ ๋ณต์กํ ์ค๋ฉ ๋ก์ง์ด ํ์ํ์ง ์์ต๋๋ค.
โ 4๏ธโฃ Hash Based Sharding์ ๋จ์ .
1๏ธโฃ ์ค๋ ์ถ๊ฐ/์ญ์ ์ ์ด๋ ค์.
- ์ค๋ ์๊ฐ ๋ณ๊ฒฝ๋๋ฉด ํด์ ๊ฐ์ด ์ฌ๊ณ์ฐ๋์ด ๊ธฐ์กด ๋ฐ์ดํฐ์ ์์น๊ฐ ๋ฐ๋๋๋ค.
- ์: ์ค๋๊ฐ 3๊ฐ์์ 4๊ฐ๋ก ์ฆ๊ฐํ๋ฉด, ๋ฐ์ดํฐ์ ์ฌ๋ฐฐ์น๋ฅผ ํผํ ์ ์์ต๋๋ค.
2๏ธโฃ ๋ณต์กํ ๋ฐ์ดํฐ ์ด๋.
- ์: ์ค๋๊ฐ 3๊ฐ์์ 4๊ฐ๋ก ์ฆ๊ฐํ๋ฉด, ๋ฐ์ดํฐ์ ์ฌ๋ฐฐ์น๋ฅผ ํผํ ์ ์์ต๋๋ค.
- ์ค๋ ์๊ฐ ๋ณ๊ฒฝ๋๋ฉด, ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์๋ก์ด ์ค๋ ๊ตฌ์กฐ์ ๋ง๊ฒ ์ด๋ํด์ผ ํฉ๋๋ค.
3๏ธโฃ ์กฐ์ธ ์ฐ์ฐ์ ์ด๋ ค์.
- ์๋ก ๋ค๋ฅธ ์ค๋์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์กฐ์ธํด์ผ ํ๋ ๊ฒฝ์ฐ, ์ฑ๋ฅ์ด ์ ํ๋ ์ ์์ต๋๋ค.
4๏ธโฃ ํซ์คํ ๋ฌธ์ (ํน์ ํค์ ๊ณผ๋ํ ์์ฒญ).
- ํด์ ํจ์๊ฐ ๊ท ๋ฑ ๋ถ๋ฐฐ๋ฅผ ๋ณด์ฅํ์ง ๋ชปํ๊ฑฐ๋ ํน์ ํค์ ์ง์ค์ ์ธ ์์ฒญ์ด ๋ฐ์ํ ๊ฒฝ์ฐ, ํน์ ์ค๋์ ๋ถํ๊ฐ ์ง์ค๋ ์ ์์ต๋๋ค.