โจ Sharding ์ด๋?
Shard ๋ ์กฐ๊ฐ, ํํธ์ด๋ผ๋ ์๋ฏธ๋ฅผ ๋ด๊ณ ์๋ ๋จ์ด์ด๋ค. ์ด์ฒ๋ผ DB ๋ฅผ ์กฐ๊ฐ์ผ๋ก ๋๋์ด ๊ด๋ฆฌํ๋ ๊ฐ๋ ์ "sharding" ์ด๋ผ๊ณ ํ๋ค. Horizontal Partitioning ๊ณผ ์ฐ๊ด์ฑ์ด ๋๋ค. (๋์ผํ ๊ฐ๋ ์ผ๋ก ๋ณผ ์ ์๋ค)
โจ Partitioning ์ด๋?
๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ถํ ์ ์ผ์ปซ๋ ์ฉ์ด๋ก, DB๋ฅผ ์ฌ๋ฌ ๋ถ๋ถ์ผ๋ก ๋ถํ ํ๋ ๊ฒ์ด๋ค. ๋ถํ๋ ๊ฐ ๋ถ๋ถ์ 'ํํฐ์ ' ์ด๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ, ๋ฐ์ดํฐ๊ฐ ๋๋ฌด ์ปค์ ธ์ (VLDB : Very Large DBMS) ์กฐํ ์๊ฐ์ด ๊ธธ์ด์ง๊ฑฐ๋ ์ฑ๋ฅ ํฅ์ ๋ฑ์ ์ด์ ๋ก ํํด์ง๋ค.
Horizontal Partitioning (Sharding):
ํ ์ด๋ธ์ ๊ฐ ํ์ ๋ค๋ฅธ ํ ์ด๋ธ์ ๋ถ์ฐ์ํค๋ ๊ฒ์ด๋ค. ์ฅ์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ๋ฐ์ดํฐ์ ๊ฐ์๋ฅผ ๊ธฐ์ค์ผ๋ก ๋๋ ์ ์์ผ๋ฉฐ, ๋ฐ์ดํฐ ๋ถํ ์ด ๋๋ฉฐ index ์ ๊ฐ์๋ ์์์ง๋ฏ๋ก ์ฑ๋ฅ ํฅ์์ ๋์์ด ๋๋ค.
- ๋ถํ ๋ ํ ์ด๋ธ์ ๊ฐ์ ์คํค๋ง๋ฅผ ๊ฐ๋๋ค.
Verical Partitioning:
ํ ์ด๋ธ์ ์ผ๋ถ ์ด์ ๋นผ์ ๋ค๋ฅธ ํ ์ด๋ธ์ ๋ถ์ฐ์ํค๋ ๊ฒ์ด๋ค. ์ฅ์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ์์ฃผ ์ฌ์ฉํ๋ ์ปฌ๋ผ์ ๋ถ๋ฆฌ์์ผ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์๋ค.
โจ Partitioning ์ ๋ฐฉ๋ฒ
Range Partitioning (Range based sharding)
์ฐ์์ ์ธ ์ซ์๋ ๋ ์ง ๊ธฐ์ค์ผ๋ก ํํด์ง๋ฉฐ, ๋ฐ์ดํฐ๊ฐ ํน์ ๋ฒ์ ์์ ๋๋ ๊ฒฝ์ฐ ๋ถ๋ฆฌํ๋ค. (ex 1-6์, 7-12์๋ก ๋ถ๋ฆฌ) ์์ฌ์ด ๋ฐฉ๋ฒ์ด๋ฏ๋ก ๊ด๋ฆฌ ์๊ฐ์ด ๋จ์ถ๋์ง๋ง, ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๊ณ ๋ฃจ ๋ถ๋ฐฐ๋์ง ๋ชปํ ์ ์๋ค๋ ๋จ์ ์ด ์๋ค.
List Partitioning (Directory based sharding)
๋ฐ์ดํฐ ๊ฐ์ด ํน์ ๋ชฉ๋ก ์์ ํฌํจ๋ ๊ฒฝ์ฐ ๋ถ๋ฆฌํ๋ค. (ex Country ์ปฌ๋ผ์ ๊ฐ์ด ['Korea', 'Japan', 'China'] ์ ํฌํจ๋๋ ๊ฒฝ์ฐ ๋ถ๋ฆฌ) ๋ชฉ๋ก ์์ ๊ฐ์ด ํ ์ด๋ธ์ ๋ง์ด ํฌํจ๋์ด ์๋ ๊ฒฝ์ฐ ์ ์ฉํ๋ค.
Hash partitioning (Key based sharding)
๋ฐ์ดํฐ๋ฅผ Partition Key์ ํด์ ํจ์์ ๊ฐ์ ๋ฐ๋ผ ๋ถ๋ฆฌํ๋ค. (ex ๋ฐ์ดํฐ์ key ๋ฅผ ํด์ฑํ์ฌ ์ผ์นํ๋ Shard ID ๋ฅผ ๊ฐ๋ Shard ๋ก ๋ถ๋ฆฌ) ๊ฐ์ฅ ํฐ ์ฅ์ ์ ๋ฐ์ดํฐ๋ฅผ ๊ณ ๋ฃจ ๋ถ๋ฐฐํ ์ ์์ผ๋ฉฐ, ์ง์ ๋ฐ์ดํฐ์ ์์น๋ฅผ ๋ช ๋ นํ ํ์๊ฐ ์๋ค๋ ์ ์ด๋ค. ๊ทธ๋ฌ๋ ์ ์ฉ์ ์ํด์๋ ๋ชจ๋ ๋ฐ์ดํฐ์ hash ํจ์๋ฅผ ์ฌ์ฉํด์ผ ํ๋ฏ๋ก ๊ธฐ์กด์ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ์ ์ฌ์ฉ์ ์ ์งํด์ผ ํ ์ ์๋ค.
Composite Partitioning
์ฌ๋ฌ ๊ฐ์ partitioning ๊ธฐ๋ฒ์ ํผํฉํ์ฌ ์ฌ์ฉํ ๊ฒ์ด๋ค.
โจ Sharding ์ ํน์ง
Sharding ์ ํตํด ๋๋์ด์ง ๋ธ๋ก์ Shards ๋ผ๊ณ ํ๋ค. ์ด ๋, ๋ถ๋ฆฌ๋ ๋ฐ์ดํฐ๋ Logical shards ์ด๋ฉฐ, ๋ถ๋ฆฌ๋ database node ๋ Physical shards ์ด๋ค.
์ฅ์ :
- ์๋ฒ์ ์ํ์ ํ์ฅ์ด ๊ฐ๋ฅํ๋ค.
- ์ค์บ ๋ฒ์๋ฅผ ์ค์ฌ์ฃผ๊ธฐ ๋๋ฌธ์ ์ฟผ๋ฆฌ ๋ฐ์ ์๋๊ฐ ๋นจ๋ผ์ง๋ค.
๋จ์ :
- ๋ฐ์ดํฐ๋ฅผ ์ ์ ํ ๋ถ๋ฆฌํ์ง ๋ชปํ๋ฉด ์ค๋ฉ์ ์๋ฏธ๊ฐ ์์ด์ง ์ ์๋ค.
- ํ ๋ฒ ๋ถํ ๋๋ฉด ์ด์ ์ผ๋ก ๋ค์ ํฉ์น๊ธฐ ์ด๋ ต๋ค.
โจ ๋ง๋ฌด๋ฆฌ
์ค๋ฉ์ ์ผ์ข ์ ๋ก๋๋ฐธ๋ฐ์ฑ ๊ธฐ์ ์ด๋ค. ๋ก๋๋ฐธ๋ฐ์ฑ์ด๋ ์์ ์์ฒญ์ ์ฌ๋ฌ ๊ฐ์ ์๋ฒ๋ ์ฒ๋ฆฌ ์ฅ์น์ ๋ถ์ฐํ์ฌ ๋๋๋ ๊ฒ์ ์๋ฏธํ๋๋ฐ, ์ค๋ฉ์ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ๋ฌ ๋จ์๋ก ์ชผ๊ฐฐ์ ๊ฒฝ์ฐ ๊ทธ ์์ฒด๋ก ๋ก๋๋ฐธ๋ฐ์ฑ์ ์ํํ๊ฒ ๋๋ค.
์ด๋ก์จ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ฐ๋ ์ด ์ ์ ํ์ฅ๋์ด ๊ฐ๊ณ ์๋ค. ์ ๊ธฐ์ ์ผ๋ก ์ฐ๊ฒฐ๋๋ ๊ฐ๋ ๋ค์ ๊ด๊ณ๋ฅผ ์ง์ผ๋ณด๋ ๊ฒ์ด ๋งค์ฐ ์ฌ๋ฐ๋ค๊ณ ๋๋๋ค.
์ฐธ๊ณ ์๋ฃ:
Database์ ํํฐ์ ๋(Partitioning)์ด๋?
'๐ป DEV > Database' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Database] Redis Vs Memcached (0) | 2021.08.10 |
---|---|
[Database] Express/NodeJS ์์ Redis ์ฌ์ฉํ๊ธฐ (0) | 2021.07.18 |
[Database] Row oriented DB, Column oriented DB ๋? (0) | 2021.07.13 |
[Database] DB ํจ๋ฌ๋ค์ (Paradigm) ์ด๋? (0) | 2021.07.08 |
[Database] ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค(RDBMS) ์ SQL (0) | 2021.01.05 |
๋๊ธ