Skip to content

Files

Latest commit

ab5b9e1 ยท Mar 23, 2022

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์ด ๋ฌด์—‡์ธ๊ฐ€์š”?