Skip to content

Latest commit

ย 

History

History
394 lines (212 loc) ยท 14.5 KB

ClusteringReplicationShardingPartitioning.md

File metadata and controls

394 lines (212 loc) ยท 14.5 KB

DB ํด๋Ÿฌ์Šคํ„ฐ๋ง, ๋ฆฌํ”Œ๋ฆฌ์ผ€์ด์…˜

Clustering, Replication
Sharding
Partitioning


Clustering, Replication

Untitled

๊ธฐ๋ณธ์ ์ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์ €์žฅ์†Œ์™€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์„œ๋ฒ„๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.


## 1. Clustering

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„๊ฐ€ ์ฃฝ์œผ๋ฉด ์–ด๋–ป๊ฒŒ ๋Œ€์‘ํ•˜์ง€? ์— ๋น„๋กฏ๋œ ์ƒ๊ฐ์œผ๋กœ Clustering ๋ฐฉ์‹์ด ๋‚˜์˜ค๊ฒŒ ๋˜์—ˆ๋‹ค

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ๋กœ ๋งŒ๋“ค์ž! โ†’ ํด๋Ÿฌ์Šคํ„ฐ๋ง

Clustering์˜ ์žฅ์ 

  • ๋ฐ์ดํ„ฐ ์ค‘๋ณต

    Replication์ด ์ ์šฉ๋œ Clustering ๊ธฐ๋ฒ•์—์„œ โ€œ๋ฐ์ดํ„ฐ ์ค‘๋ณตโ€์€ ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„ ์‚ฌ์ด์˜ ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™”๋ฅผ ์œ„ํ•ด ์ผ์–ด๋‚œ๋‹ค. ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฌ๋Ÿฌ ์„œ๋ฒ„์— ์ค‘๋ณต ์ €์žฅํ•˜๋ฏ€๋กœ์จ ํ•˜๋‚˜์˜ ์„œ๋ฒ„๊ฐ€ ๊ณ ์žฅ๋‚˜๋”๋ผ๋„ ๋‹ค๋ฅธ ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค. (RDB์—์„œ "๋ฐ์ดํ„ฐ ์ค‘๋ณต"์€ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์„ ํ•ด์ง€๋Š” ์š”์†Œ์ด์ง€๋งŒ, Clustering์˜ "๋ฐ์ดํ„ฐ ์ค‘๋ณต"์€ ์žฅ์•  ๊ทน๋ณต ์—ญํ• ์˜ ์š”์†Œ๋ผ ํ•  ์ˆ˜ ์žˆ๋‹ค.)

  • ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ

    ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„๋กœ ๋ถ€ํ•˜๋ฅผ ๋ถ„์‚ฐ์‹œ์ผœ ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ ๋” ๋งŽ์ด ์ˆ˜์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๋†’์€ ๊ฐ€์šฉ์„ฑ

    ์—ฌ๋Ÿฌ ๋Œ€์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„๋ฅผ ๊ฐ€์ง€๋ฏ€๋กœ ๋†’์€ ๊ฐ€์šฉ์„ฑ์„ ๋ณด์žฅํ•œ๋‹ค.


Clustering (Active - Active)

Untitled

์—ฌ๋Ÿฌ ๋Œ€๋กœ ๋‚˜๋ˆˆ ์„œ๋ฒ„๋ฅผ Active(๋™์ž‘์ค‘) ์ƒํƒœ๋กœ ๋‘๋Š” ๋ฐฉ์‹์ด๋‹ค.

์žฅ์ 

  • ๋ฌด์ค‘๋‹จ ์„œ๋น„์Šค ๊ฐ€๋Šฅ

    ํ•˜๋‚˜์˜ ์„œ๋ฒ„๊ฐ€ ์ฃฝ๋”๋ผ๋„ ๋‹ค๋ฅธ Active ์„œ๋ฒ„๊ฐ€ ๋Œ€์‹  ์š”์ฒญ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ค‘๋‹จ์—†์ด ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค

  • ์„ฑ๋Šฅ์ ์ธ ์ธก๋ฉด์—์„œ ์ด๋“

    ์„œ๋ฒ„ 2๋Œ€๊ฐ€ ์šด์˜๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฆฌ์†Œ์Šค๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค. ์ด๋Š” ๋ฆฌ์†Œ์Šค ์†Œ๋ชจ๊ฐ€ ํฌ๋‹ค๋Š” ๋‹จ์ ์„ ๊ฐ–๊ธฐ๋„ ํ•˜์ง€๋งŒ ์„ฑ๋Šฅ์ ์ธ ์ธก๋ฉด์—์„œ ์ด๋“์ด ์žˆ๋‹ค

๋‹จ์ 

  • ๋ณ‘๋ชฉ ํ˜„์ƒ

    ๋‘ ๋Œ€์˜ ์„œ๋ฒ„๊ฐ€ ํ•˜๋‚˜์˜ ์ €์žฅ์†Œ๋ฅผ ๊ณต์œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณ‘๋ชฉํ˜„์ƒ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค

  • ๋น„์šฉ ๋ฌธ์ œ

    ๋‘ ๋Œ€์˜ ์„œ๋ฒ„๋ฅผ ๋™์‹œ์— ์šด์šฉํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋น„์šฉ์ด ๋งŽ์ด ๋“ ๋‹ค


Clustering (Active - Standby)

Untitled

ํ•˜๋‚˜์˜ ์„œ๋ฒ„๋งŒ Active ์ƒํƒœ๋กœ ๋‘๊ณ , ๋‹ค๋ฅธ ์„œ๋ฒ„๋Š” Stand by ์ƒํƒœ๋กœ ๋‘๋Š” ๋ฐฉ์‹์ด๋‹ค. ๋งŒ์•ฝ Active ์„œ๋ฒ„์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ์„ ๋•Œ, Standby ์ƒํƒœ์˜ ์„œ๋ฒ„๋ฅผ Active ์„œ๋ฒ„๋กœ ์ „ํ™˜ํ•œ๋‹ค.

  • Standby ์ƒํƒœ : ๋™์ž‘ํ•˜์ง€ ์•Š๋Š” ๋Œ€๊ธฐ ์ƒํƒœ

์žฅ์ 

  • ๋น„์šฉ ์ ˆ๊ฐ

    Standby ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— Active-Active ๋ฐฉ์‹๋ณด๋‹ค ๋น„์šฉ์„ ์ ˆ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹จ์ 

  • ์ „ํ™˜ ์‹œ๊ฐ„์ด ์˜ค๋ž˜๊ฑธ๋ฆฐ๋‹ค

    Active ์„œ๋ฒ„์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒจ Standby ์„œ๋ฒ„๋ฅผ Active ์„œ๋ฒ„๋กœ ์ „ํ™˜ํ•˜๋Š”๋ฐ ์‹œ๊ฐ„์ด ์˜ค๋ž˜๊ฑธ๋ฆฐ๋‹ค (์ˆ˜์‹ญ์ดˆ ~ ์ˆ˜์‹ญ๋ถ„)


## 2. Replication

์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์†์‹ค๋˜๋ฉด ์–ด๋–ป๊ฒŒ ๋Œ€์‘ํ•˜์ง€? ์— ๋น„๋กฏ๋œ ์ƒ๊ฐ์œผ๋กœ Replication ๋ฐฉ์‹์ด ๋“ฑ์žฅํ–ˆ๋‹ค

  • ์„œ๋ฒ„๊ฐ€ ์ฃฝ์—ˆ์„ ๋•Œ ์„œ๋น„์Šค ์ œ๊ณต ๋ฌธ์ œ โ†’ ์„œ๋ฒ„๋ฅผ ์—ฌ๋Ÿฌ ๋Œ€ ๋‘๋Š” Clustering์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๊ณ ,
  • ๋ฐ์ดํ„ฐ ์†์‹ค๋ฌธ์ œ โ†’ ์ €์žฅ์†Œ๋ฅผ ๋ณต์ œํ•˜๋Š” Replication ๋ฐฉ์‹์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

Replication (๋‹จ์ˆœ ๋ฐฑ์—…)

Untitled

๊ธฐ๋ณธ์ ์ธ Replication ๋ฐฉ์‹์€ Master DB(Primary DB)์™€ Slave DB(Secondary DB)๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

  • ์‚ฌ์šฉ์ž๊ฐ€ Master DB๋กœ CRUD๋ฅผ ์š”์ฒญํ•˜๋ฉด ๋ณ€๊ฒฝ๋œ ๋ฐ์ดํ„ฐ๋ฅผ Slave DB์— ๋™๊ธฐํ™”ํ•œ๋‹ค.
  • Slave DB๋Š” ๋‹จ์ˆœํ•œ ๋ฐฑ์—… ๋ฐ ์กฐํšŒ ์šฉ๋„๋กœ ์‚ฌ์šฉํ•œ๋‹ค.
  • Primary DB์˜ ๋ณต์‚ฌ๋ณธ์„ Replica๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

Replication์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

  • ๋ฐ์ดํ„ฐ ์œ ์‹ค์„ ๋ง‰๊ธฐ ์œ„ํ•ด์„œ

    ๋ฐ์ดํ„ฐ๊ฐ€ ์—ฌ๋Ÿฌ Replica์— ๋ณต์ œ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ญ์ œ๋˜๋”๋ผ๋„ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ๊ธฐ ๋–„๋ฌธ์— ๋ฐ์ดํ„ฐ ์œ ์‹ค ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

  • Replica๊ฐ€ Primary DB์˜ ์—ญํ• ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

    Primary DB์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒจ ๋™์ž‘ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ, Replica ์ค‘ ํ•˜๋‚˜๊ฐ€ Primary DB๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.

  • ์‘๋‹ต ์ง€์—ฐ ์‹œ๊ฐ„์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค

    ์—ฌ๋Ÿฌ ๊ตฐ๋ฐ์—์„œ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ๋Š” ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์šด์˜ํ•˜๋ฉด, ๋ฌผ๋ฆฌ์ ์ธ ์œ„์น˜์— ๊ด€๊ณ„์—†์ด ๋น ๋ฅธ ์‘๋‹ต ์†๋„๋ฅผ ๋ณด์žฅํ•œ๋‹ค.


Replication Lag & ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ

Untitled

Primary DB์—์„œ Secondary DB๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์ œํ•˜๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์„ Replication Lag ๋ผ ํ•œ๋‹ค.

  • ํŠธ๋žœ์žญ์…˜ 1์ด ์ˆ˜ํ–‰๋˜์–ด Primary DB์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐฑ์‹ ํ•˜๋ฉด ๋™๊ธฐํ™”๋ฅผ ์œ„ํ•ด Secondary DB์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐฑ์‹ ํ•˜๊ธฐ ์œ„ํ•ด ํŠธ๋žœ์žญ์…˜ 2๊ฐ€ ์ˆ˜ํ–‰๋œ๋‹ค. โ†’ ์ด๋•Œ, ํŠธ๋žœ์žญ์…˜ 2๊ฐ€ ์ˆ˜ํ–‰๋˜๋Š” ์‹œ๊ฐ„์„ Replication Lag ๋ผ๊ณ  ํ•œ๋‹ค.

Replica๊ฐ€ ๋งŽ์œผ๋ฉด Replication Lag ์‹œ๊ฐ„์ด ๊ธธ์–ด์ง„๋‹ค. ๊ฒฐ๊ตญ ์‹œ๊ฐ„์ฐจ์— ์˜ํ•ด Primary DB์™€ Secondary DB์—์„œ ๋™์ผ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ๊ฒฝ์šฐ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์ง€๊ฒŒ ๋˜๋ฏ€๋กœ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ ์„ 100% ์ง€ํ‚ค์ง€ ๋ชปํ•œ๋‹ค.


Synchronous Replication & Asynchronous Replication

Untitled

  1. Synchronous Replication

    ์‚ฌ์šฉ์ž๊ฐ€ Primary DB๋กœ ๋ฐ์ดํ„ฐ ์“ฐ๊ธฐ ์š”์ฒญ์„ ๋ณด๋ƒˆ์„ ๋•Œ, Primary DB๊ฐ€ ๋ชจ๋“  Replica์— ๋ณ€๊ฒฝ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ ์šฉํ•œ ๋’ค ์“ฐ๊ธฐ ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๋Š” ๋ฐฉ์‹์ด๋‹ค.

    • ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ
    • Replica์— ๋ชจ๋‘ ๋ฐ˜์˜ํ•˜๊ธฐ์ „๊นŒ์ง€ ์‹œ๊ฐ„์ด ์˜ค๋ž˜๊ฑธ๋ฆฐ๋‹ค. (๋งŒ์•ฝ ํ•˜๋‚˜์˜ Replica์— ๋ฐ์ดํ„ฐ ๊ฐฑ์‹  ๋„์ค‘ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํ•ด๋‹น ์“ฐ๊ธฐ ์š”์ฒญ ์ž์ฒด๊ฐ€ ์‹คํŒจํ•œ๋‹ค)

    ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์ด ์ค‘์š”ํ•œ ์‹œ์Šคํ…œ์—์„œ Synchronous Replication ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.

  2. Asynchronous Replication

    ์‚ฌ์šฉ์ž๊ฐ€ ์“ฐ๊ธฐ ์š”์ฒญ์„ ๋ณด๋ƒˆ์„ ๋•Œ, Primary DB์—๋งŒ ์ ์šฉ ํ›„ ๋ฐ”๋กœ ์‘๋‹ต ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๋Š” ๋ฐฉ์‹์ด๋‹ค. ์‘๋‹ต ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ธ ํ›„ ๋‚˜๋จธ์ง€ Replica์— ๋ณ€๊ฒฝ ๋‚ด์šฉ์„ ๋ฐ˜์˜ํ•œ๋‹ค.

    • ๋ฐ์ดํ„ฐ ์“ฐ๊ธฐ ์—ฐ์‚ฐ ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.(์‘๋‹ต์ด ๋น ๋ฅด๋‹ค)
    • Secondary DB๋Š” Primary DB ๋ณด๋‹ค ์ตœ์‹  ๋ฐ์ดํ„ฐ ๋ฐ˜์˜์ด ๋А๋ฆด ์ˆ˜ ๋ฐ–์— ์—†๋‹ค. โ†’ ์ด์™€ ๊ฐ™์€ ์ง€์—ฐํ˜„์ƒ์„ Lag์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

    ํผํฌ๋จผ์Šค๊ฐ€ ์ค‘์š”ํ•œ ์‹œ์Šคํ…œ์—์„œ Synchronous Replication ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.


Partitioning

ํ•˜๋‚˜์˜ ํฐ table์„ 'ํŒŒํ‹ฐ์…˜(partition)'์ด๋ผ๋Š” ์ž‘์€ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„์–ด ๊ด€๋ฆฌ ๊ธฐ๋ฒ•์„ Partitioning์ด๋ผ๊ณ  ํ•œ๋‹ค.

  • Partitioning ๊ธฐ๋ฒ•์„ ํ†ตํ•ด ์†Œํ”„ํŠธ์›จ์–ด์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌํ•˜์—ฌ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ณ  ๊ด€๋ฆฌ๋ฅผ ๋ณด๋‹ค ์ˆ˜์›”ํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค

Partitioning ๊ธฐ๋ฒ• ๋“ฑ์žฅ ๋ฐฐ๊ฒฝ

๋ฐ์ดํ„ฐ์˜ ๊ทœ๋ชจ ๋˜ํ•œ ๋Œ€์šฉ๋Ÿ‰ํ™” ๋˜๋ฉด์„œ, ๊ธฐ์กด์— ์‚ฌ์šฉํ•˜๋Š” DB ์‹œ์Šคํ…œ์˜ย ์šฉ๋Ÿ‰(storage)์˜ ํ•œ๊ณ„์™€ ์„ฑ๋Šฅ(performance)์˜ ์ €ํ•˜๋ฅผ ์ผ์œผ์ผฐ๋‹ค.

VLDB(Very Large DBMS)์™€ ๊ฐ™์ด ํ•˜๋‚˜์˜ DBMS์— ๋„ˆ๋ฌด ํฐ table์ด ๋“ค์–ด๊ฐ€๋ฉด์„œ ์šฉ๋Ÿ‰๊ณผ ์„ฑ๋Šฅ ์ธก๋ฉด์—์„œ ๋งŽ์€ ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋˜์—ˆ๊ณ , ์ด๋Ÿฐ ์ด์Šˆ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ Partitioning ๊ธฐ๋ฒ•์ด ๋“ฑ์žฅํ–ˆ๋‹ค.


Partitioning์˜ ๋ชฉ์ 

  • ํŠน์ • DML๊ณผ Query์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚จ๋‹ค.

    ์ฃผ๋กœ ๋Œ€์šฉ๋Ÿ‰ Data WRITE ํ™˜๊ฒฝ์—์„œ ํšจ์œจ์ ์ด๊ณ , ํŠนํžˆ, Full Scan์—์„œ ๋ฐ์ดํ„ฐ Access์˜ ๋ฒ”์œ„๋ฅผ ์ค„์—ฌ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ๊ฐ€์ ธ์˜จ๋‹ค.

  • ๋ฌผ๋ฆฌ์ ์ธ ํŒŒํ‹ฐ์…”๋‹์œผ๋กœ ์ธํ•ด ์ „์ฒด ๋ฐ์ดํ„ฐ์˜ ํ›ผ์† ๊ฐ€๋Šฅ์„ฑ์ด ์ค„์–ด๋“ค๊ณ  ๋ฐ์ดํ„ฐ ๊ฐ€์šฉ์„ฑ์ด ํ–ฅ์ƒ๋œ๋‹ค

    ๊ฐ ๋ถ„ํ•  ์˜์—ญ(partition๋ณ„๋กœ)์„ ๋…๋ฆฝ์ ์œผ๋กœ ๋ฐฑ์—…ํ•˜๊ณ  ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ํฐ table๋“ค์„ ์ œ๊ฑฐํ•˜์—ฌ ๊ด€๋ฆฌ๋ฅผ ์‰ฝ๊ฒŒ ํ•ด์ค€๋‹ค.


Partitioning ์žฅ๋‹จ์ 

์žฅ์ 

  • ํŒŒํ‹ฐ์…˜(partition)'์ด๋ผ๋Š” ์ž‘์€ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„์–ด ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ์†์‹คํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์ค„์–ด๋“ค์–ด ๋ฐ์ดํ„ฐ ๊ฐ€์šฉ์„ฑ์ด ํ–ฅ์ƒ๋œ๋‹ค.
  • partition ๋‹จ์œ„๋กœ I/O ๋ถ„์‚ฐ์ด ๊ฐ€๋Šฅํ•˜์—ฌ UPDATE ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚จ๋‹ค
  • ๋ฐ์ดํ„ฐ ์ „์ฒด ๊ฒ€์ƒ‰ ์‹œ ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ํƒ์ƒ‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— Full Scan์—์„œ ๋ฐ์ดํ„ฐ Access์˜ ๋ฒ”์œ„๋ฅผ ์ค„์—ฌ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ๊ฐ€์ ธ์˜จ๋‹ค.

๋‹จ์ 

  • table๊ฐ„ JOIN์— ๋Œ€ํ•œ ๋น„์šฉ์ด ์ฆ๊ฐ€ํ•œ๋‹ค.

Vertical Partitioning

6.png

ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”์—์„œ ํฌ๊ธฐ๊ฐ€ ํฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๊ฑฐ๋‚˜ ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๋Š” Attribute๋ฅผ ๋…๋ฆฝ์ ์ธ ํ…Œ์ด๋ธ”๋กœ ์ชผ๊ฐœ๋Š” ๋ฐฉ์‹์ด๋‹ค.

  • ํฌ๊ธฐ๊ฐ€ ํฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๋Š” Attribute : BLOB , Text
  • ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ : ํŒจ์Šค์›Œ๋“œ

๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง„ Column์„ ๊ฒ€์ƒ‰ํ•  ๋•Œ ์‹œ๊ฐ„์ด ์˜ค๋ž˜๊ฑธ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— Vertical Partitioning์„ ํ†ตํ•ด ์„œ๋ฒ„์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.


Horizontal Partitioning

5.png

Sharding๊ณผ ๋™์ผํ•œ ๊ฐœ๋…์œผ๋กœ ์Šคํ‚ค๋งˆ(schema)๊ฐ€ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋‘ ๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”์— ๋‚˜๋ˆ„์–ด ์ €์žฅํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

  • ์ผ๋ฐ˜์ ์œผ๋กœ ๋ถ„์‚ฐ ์ €์žฅ ๊ธฐ์ˆ ์—์„œ ํŒŒํ‹ฐ์…”๋‹์€ ์ˆ˜ํ‰ ๋ถ„ํ• ์„ ์˜๋ฏธํ•œ๋‹ค.
  • ๋ณดํ†ต ์ˆ˜ํ‰ ๋ถ„ํ• ์„ ํ•œ๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ๋Š” ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์•ˆ์—์„œ ์ด๋ฃจ์–ด์ง€๋Š” ๊ฒฝ์šฐ๋ฅผ ์ง€์นญํ•œ๋‹ค.

Partitioning์€ ์–ธ์ œ ์‚ฌ์šฉํ• ๊นŒ?

  • ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ๊ฐ€ 2 GB ๋ณด๋‹ค ํฐ ๊ฒฝ์šฐ ํŒŒํ‹ฐ์…”๋‹์„ ๊ณ ๋ คํ•ด์•ผํ•œ๋‹ค.
  • ํŠน์ • ๊ธฐ๊ฐ„์˜ ๋‚ด์šฉ๋งŒ Updateํ•  ์ˆ˜ ์žˆ๊ณ , ์ด์ „ ๊ธฐ๊ฐ„์˜ ๋‚ด์šฉ์€ Read๋งŒ ๊ฐ€๋Šฅํ•  ๊ฒฝ์šฐ ํŒŒํ‹ฐ์…”๋‹์„ ๊ณ ๋ คํ•ด์•ผํ•œ๋‹ค. (Read๋งŒ ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ๋“ค์„ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”๋กœ ํŒŒํ‹ฐ์…”๋‹ํ•œ๋‹ค)

Sharding

๋ฐ์ดํ„ฐ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์•„์„œ ๊ฒ€์ƒ‰์ด ๋А๋ฆฐ๋ฐ,, ๋” ๋น ๋ฅด๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์„๊นŒ? ๋ผ๋Š” ์ƒ๊ฐ์—์„œ ๋น„๋กฏ๋˜์–ด Sharding ๋ฐฉ์‹์ด ๋“ฑ์žฅํ–ˆ๋‹ค.

  • ๋น ๋ฅธ ๊ฒ€์ƒ‰์„ ์œ„ํ•ด Table์„ ๋‚˜๋ˆ„์ž โ†’ Sharding

Sharding

Untitled

ํ…Œ์ด๋ธ”์„ Row(ํ–‰) ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„์–ด์„œ ์—ฌ๋Ÿฌ Shard์— ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

  • ํƒ€๊ฒŸ ๋ฐ์ดํ„ฐ๊ฐ€ ์–ด๋–ค Shard์— ์กด์žฌํ•˜๋Š”์ง€๋งŒ ์•Œ๋ฉด ๊ฒ€์ƒ‰์„ ๋น ๋ฅด๊ฒŒ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค

Sharding ํŽ˜์ดํผ๋ฅผ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๊ณ ๋ คํ•ด์•ผํ•  ์‚ฌํ•ญ โ†’ Shard Key

  1. ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์‚ฐ๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์–ด๋–ป๊ฒŒ ๋ถ„์‚ฐ์‹œ์ผœ ์ €์žฅํ•  ์ง€
  2. ๋ถ„์‚ฐ๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ์ฝ์„ ์ง€

Shard Key๋ž€ ์—ฌ๋Ÿฌ Shard๋ฅผ ์„ ํƒํ• ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ํ‚ค์ด๋‹ค. Shard Key ๊ฒฐ์ • ๋ฐฉ์‹์— ๋”ฐ๋ผ Sharding ๋ฐฉ๋ฒ•์ด ๋‚˜๋‰œ๋‹ค.


Hash Sharding

Untitled

Hash Function์„ ์‚ฌ์šฉํ•˜์—ฌ Shard Key๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

  • Shard n ์—์„œ n์€ Shard Key์ด๋‹ค.

์žฅ์ 

  • ๊ตฌํ˜„์ด ๊ฐ„๋‹จํ•˜๋‹ค

    Shard์˜ ์ˆ˜ ๋งŒํผ ํ•ด์‹ฑํ•˜์—ฌ Shard Key๋ฅผ ๊ฒฐ์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ตฌํ˜„์ด ๊ฐ„๋‹จํ•˜๋‹ค

๋‹จ์ 

  • Shard๊ฐ€ ๋Š˜์–ด๋‚˜๋ฉด ๊ธฐ์กด์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋“ค์— ๋Œ€ํ•œ ์ •ํ•ฉ์„ฑ์ด ๊นจ์ง„๋‹ค.

    Shard์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚˜๋ฉด Hash Function์˜ ๊ณ„์‚ฐ ๋ฐฉ์‹๋„ ๋ณ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์—(Id % Shard ๊ฐœ์ˆ˜) ๊ธฐ์กด์— ์ €์žฅ๋œ ๋ฐฉ์‹์ด ๋‹ฌ๋ผ์ง„๋‹ค. โ†’ ๊ธฐ์กด์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋“ค์— ๋Œ€ํ•œ ์ •ํ•ฉ์„ฑ ๊นจ์ง„๋‹ค.

    Shard๋ฅผ ํ™•์žฅํ•  ๊ฒฝ์šฐ, Hash Sharding์„ ์‚ฌ์šฉํ•˜์—ฌ Shard key๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐฉ์‹์€ ์ ์ ˆํ•˜์ง€ ์•Š๋‹ค.

  • Hash Function์œผ๋กœ Shard Key๋ฅผ ๊ฒฐ์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ณต๊ฐ„ ํšจ์œจ์ด ์ข‹์ง€ ์•Š๋‹ค

    ํŠน์ • Shard์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋ชฐ๋ฆด ์ˆ˜ ์žˆ๋‹ค.


Dynamic Sharding

Untitled

Hash Sharding ๋ฐฉ์‹์˜ ํ™•์žฅ์„ฑ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Dynamic Sharding ๋ฐฉ์‹์ด ๋“ฑ์žฅํ–ˆ๋‹ค.

  • Locator Service ๋ผ๋Š” ํ…Œ์ด๋ธ” ์ •๋ณด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ Shard Key๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.

์žฅ์ 

  • Shard ํ™•์žฅ์— ์œ ์—ฐํ•˜๋‹ค

    Shard๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ, Locator Service์— ํ•ด๋‹น Shard ์ •๋ณด๋งŒ ์ถ”๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค

๋‹จ์ 

  • Locator Service ์— ์˜์กด์ ์ธ ๋ฐฉ์‹์ด๋‹ค

    ๋ฐ์ดํ„ฐ๋ฅผ ์žฌ๋ฐฐ์น˜ํ•  ๊ฒฝ์šฐ, Locator Service๋„ ๋™๊ธฐํ™”ํ•ด์•ผํ•œ๋‹ค.

    Locator Service์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ(๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  Shard๋ฅผ ๊ณ ๋ฅด๋Š”๋ฐ ๋ฌธ์ œ ๋ฐœ์ƒ), DB์—๋„ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค

Hash Sharding, Dynamic Sharding์˜ ๊ฒฝ์šฐ key-value ํ˜•์‹์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” NoSQL์— ์ ํ•ฉํ•œ ๋ฐฉ์‹์ด๋‹ค.


Entity Group

Untitled

Entity Group์€ ๊ด€๊ณ„๊ฐ€ ์žˆ๋Š” Entity๋ฅผ ๊ฐ™์€ Shard์— ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

์žฅ์ 

  • ๋‹จ์ผ Shard ๋‚ด์—์„œ ์ฟผ๋ฆฌ๊ฐ€ ํšจ์œจ์ ์ด๊ณ  ๊ฐ•ํ•œ ์‘์ง‘๋„๋ฅผ ๊ฐ€์ง„๋‹ค

๋‹จ์ 

  • ๋‹ค๋ฅธ Shard์˜ Entity์™€ ์—ฐ๊ด€๋  ๊ฒฝ์šฐ ๋น„ํšจ์œจ์ ์ด๋‹ค

    ์„œ๋กœ ๋‹ค๋ฅธ Shard ์†์˜ Entity์™€ ์—ฐ๊ด€๋œ ์ฟผ๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•  ๊ฒฝ์šฐ ๋น„ํšจ์œจ์ ์ด๋‹ค.

Sharding์€ ์–ธ์ œํ• ๊นŒ?

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์•„์„œ index ์‚ฌ์ด์ฆˆ๊ฐ€ ํฐ ๊ฒฝ์šฐ ์ƒค๋”ฉ์„ ๊ณ ๋ คํ•œ๋‹ค. (index ์‚ฌ์ด์ฆˆ๋ฅผ ์ค„์—ฌ ์ ‘๊ทผ ์†๋„๋ฅผ ๋†’ํžŒ๋‹ค)
  • ์ง€์—ญ๋ณ„๋กœ

์ƒค๋”ฉ์€ ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ๊ณณ์—์„œ ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ ์กฐ์ž‘ํ•˜๋Š”๋ฐ์— ๋ณต์žก๋„๋ฅผ ๋”ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์ƒค๋”ฉ์„ ์“ฐ๊ธฐ ์ „์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํผํฌ๋จผ์Šค๋ฅผ ์˜ฌ๋ฆด ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•(vertical partitioning, storage ํ‚ค์šฐ๊ธฐ)์„ ์•Œ์•„๋ณด๊ณ  ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.


์ฐธ๊ณ 

[10๋ถ„ ํ…Œ์ฝ”ํ†ก] ๐Ÿ‘จโ€๐Ÿ’ปํžˆ๋ธŒ๋ฆฌ์˜ Sharding, Clustering, Replication

Clustering vs Replicationย vs Sharding

์ƒค๋”ฉ ์‹œ์Šคํ…œ ๊ฐœ์š”, NHN์˜ ์•ˆ๊ณผ ๋ฐ–: Sharding Platform, MySQL Shard ๋ฐ์ดํ„ฐ ์žฌ๋ถ„๋ฐฐ

[DB] DB ํŒŒํ‹ฐ์…”๋‹(Partitioning)์ด๋ž€, Database์˜ ํŒŒํ‹ฐ์…”๋‹(Partitioning)์ด๋ž€?

ClusterReplicationPartitioning.md

์ƒค๋”ฉ & ํŒŒํ‹ฐ์…”๋‹

๋ฉด์ ‘ ์˜ˆ์ƒ ์งˆ๋ฌธ

Clustering์ด ๋ฌด์—‡์ธ๊ฐ€์š”?

Replication์ด ๋ฌด์—‡์ธ๊ฐ€์š”?

Sharding์ด ๋ฌด์—‡์ธ๊ฐ€์š”?

Partitioning์ด ๋ฌด์—‡์ธ๊ฐ€์š”?