๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป DEV/Database

[Database] ์ƒค๋”ฉ(Sharding) ์ด๋ž€?

by vodkassi 2021. 7. 14.
728x90

โœจ Sharding ์ด๋ž€?

Shard ๋Š” ์กฐ๊ฐ, ํŒŒํŽธ์ด๋ผ๋Š” ์˜๋ฏธ๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ๋‹จ์–ด์ด๋‹ค. ์ด์ฒ˜๋Ÿผ DB ๋ฅผ ์กฐ๊ฐ์œผ๋กœ ๋‚˜๋ˆ„์–ด ๊ด€๋ฆฌํ•˜๋Š” ๊ฐœ๋…์„ "sharding" ์ด๋ผ๊ณ  ํ•œ๋‹ค. Horizontal Partitioning ๊ณผ ์—ฐ๊ด€์„ฑ์ด ๋†’๋‹ค. (๋™์ผํ•œ ๊ฐœ๋…์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค)

 

โœจ Partitioning ์ด๋ž€?

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ถ„ํ• ์„ ์ผ์ปซ๋Š” ์šฉ์–ด๋กœ, DB๋ฅผ ์—ฌ๋Ÿฌ ๋ถ€๋ถ„์œผ๋กœ ๋ถ„ํ• ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋ถ„ํ•œ๋œ ๊ฐ ๋ถ€๋ถ„์„ 'ํŒŒํ‹ฐ์…˜' ์ด๋ผ๊ณ  ๋ถ€๋ฅด๋ฉฐ, ๋ฐ์ดํ„ฐ๊ฐ€ ๋„ˆ๋ฌด ์ปค์ ธ์„œ (VLDB : Very Large DBMS) ์กฐํšŒ ์‹œ๊ฐ„์ด ๊ธธ์–ด์ง€๊ฑฐ๋‚˜ ์„ฑ๋Šฅ ํ–ฅ์ƒ ๋“ฑ์˜ ์ด์œ ๋กœ ํ–‰ํ•ด์ง„๋‹ค.

 

Horizontal Partitioning (Sharding):

ํ…Œ์ด๋ธ”์˜ ๊ฐ ํ–‰์„ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์— ๋ถ„์‚ฐ์‹œํ‚ค๋Š” ๊ฒƒ์ด๋‹ค. ์žฅ์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. 

  • ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ฐ์ดํ„ฐ ๋ถ„ํ• ์ด ๋˜๋ฉฐ index ์˜ ๊ฐœ์ˆ˜๋„ ์ž‘์•„์ง€๋ฏ€๋กœ ์„ฑ๋Šฅ ํ–ฅ์ƒ์— ๋„์›€์ด ๋œ๋‹ค.
  • ๋ถ„ํ• ๋œ ํ…Œ์ด๋ธ”์€ ๊ฐ™์€ ์Šคํ‚ค๋งˆ๋ฅผ ๊ฐ–๋Š”๋‹ค.

Verical Partitioning:

ํ…Œ์ด๋ธ”์˜ ์ผ๋ถ€ ์—ด์„ ๋นผ์„œ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์— ๋ถ„์‚ฐ์‹œํ‚ค๋Š” ๊ฒƒ์ด๋‹ค. ์žฅ์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ์ปฌ๋Ÿผ์„ ๋ถ„๋ฆฌ์‹œ์ผœ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

 

Vertical vs Horizontal Shards

 

โœจ 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)์ด๋ž€?

Database sharding์ด๋ž€?

 

๋Œ“๊ธ€