Skip to content

Latest commit

ย 

History

History
107 lines (77 loc) ยท 6.21 KB

File metadata and controls

107 lines (77 loc) ยท 6.21 KB

#Database Sharding

Table of Contents

ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ฐ์ดํ„ฐ ์šฉ๋Ÿ‰ ๋˜๋Š” ์ปค๋„ฅ์…˜๋“ฑ์˜ ๋ถ€ํ•˜๊ฐ€ ๋งŽ์•„์ง€๋ฉด ํŠธ๋ž˜ํ”ฝ ๋ถ„์‚ฐ ๋ชฉ์ ์œผ๋กœ ์ƒค๋”ฉ์„ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค. ์ƒค๋”ฉ์„ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ์–ป์–ด์ง€๋Š” ์žฅ์ ์€ ํŠธ๋ž˜ํ”ฝ ๋ถ„์‚ฐ ์ด์™ธ์— ํŠน์ • DB์˜ ์žฅ์• ๊ฐ€ ์ „์ฒด์˜ ์žฅ์• ๋กœ ์ด์–ด์ง€์ง€ ์•Š๋Š” ์žฅ์ ๋„ ๊ฐ€์ง€๊ณ  ๊ฐ‘๋‹ˆ๋‹ค. (HA ๊ตฌ์„ฑ์œผ๋กœ Failover ๋˜๋„๋ก ์„ค๊ณ„)

์ƒค๋”ฉ์€ DBMS ๋ ˆ๋ฒจ์—์„œ ๋ถ„ํ• ํ•˜๋Š”๊ฒƒ์ด ์•„๋‹Œ

HA(high availability)๋ž€? ์ •๋ณด๊ธฐ์ˆ ์—์„œ, HA๋ž€ ๋ฐ”๋žŒ์งํ•œ ์ •๋„๋กœ ๊ธด ์‹œ๊ฐ„๋™์•ˆ ์ง€์†์ ์œผ๋กœ ์šด์˜์ด ๊ฐ€๋Šฅํ•œ ์‹œ์Šคํ…œ์ด๋‚˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ๋„๋ฆฌ ์“ฐ์ด๊ณ  ์žˆ์ง€๋งŒ ๋‹ฌ์„ฑํ•˜๊ธฐ ๊ฒฐ์ฝ” ์‰ฝ์ง€ ์•Š์€ ์‹œ์Šคํ…œ ๋ฐ ์ œํ’ˆ์— ๋Œ€ํ•œ ๊ฐ€์šฉ์„ฑ ํ‘œ์ค€์— ํ”ํžˆ "ํŒŒ์ด๋ธŒ ๋‚˜์ธ" (five 9) ์ด๋ผ๊ณ  ๋ถ€๋ฅด๋Š” 99.999%์˜ ๊ฐ€์šฉ์„ฑ์„ ๋“ค ์ˆ˜ ์žˆ๋‹ค. H/W, S/W์˜ ์žฅ์• ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ๋Œ€์ฑ…์ด HA์ด๋ฉฐ HA๋ฅผ ์œ„ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ํด๋Ÿฌ์Šคํ„ฐ๋ง, ์ด์ค‘ํ™”, RAID ๋“ฑ์˜ ๊ธฐ์ˆ ์ด ์žˆ์Œ

Failover ์„œ๋ฒ„, ์‹œ์Šคํ…œ, ๋„คํŠธ์›Œํฌ ๋“ฑ์—์„œ ์ด์ƒ์ด ์ƒ๊ฒผ์„ ๋•Œ ์˜ˆ๋น„ ์‹œ์Šคํ…œ์œผ๋กœ ์ž๋™์ „ํ™˜๋˜๋Š” ๊ธฐ๋Šฅ์ด๋ฉฐ failback์€ failover์— ๋”ฐ๋ผ ์ „ํ™˜๋œ ์„œ๋ฒ„/์‹œ์Šคํ…œ/๋„คํŠธ์›Œํฌ๋ฅผ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์ „์˜ ์ƒํƒœ๋กœ ๋˜๋Œ๋ฆฌ๋Š” ์ฒ˜๋ฆฌ๋ฅผ ์˜๋ฏธ

Sharding Type

Modular sharding

PK๋ฅผ ๋ชจ๋“ˆ๋Ÿฌ๋กœ ์—ฐ์‚ฐํ•œ ๊ฐ’(PK % DB Count)์œผ๋กœ DB๋ฅผ ์ฐพ์•„๊ฐ€๋Š” ๋ฐฉ์‹ ๋ ˆ์ธ์ง€ ์ƒค๋”ฉ์— ๋น„ํ•ด ๋ฐ์ดํ„ฐ๊ฐ€ ๊ท ์ผํ•˜๊ฒŒ ๋ถ„์‚ฐ๋˜์ง€๋งŒ ์ถ”๊ฐ€ ์ฆ์„คํ•˜๋Š” ๊ณผ์ •์—์„œ ์ด๋ฏธ ์ƒ์„ฑ๋œ ๋ฐ์ดํ„ฐ๋“ค์— ๋Œ€ํ•ด์„œ ์žฌ์ •๋ ฌ์ด ํ•„์š”ํ•˜๋‹ค.

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

Range sharding

PK์˜ ๋ฒ”์œ„๋ฅผ ๊ธฐ์ค€์œผ๋กœ DB๋ฅผ ์ฐพ์•„๊ฐ€๋Š” ๋ฐฉ์‹. ๋ชจ๋“ˆ๋Ÿฌ ์ƒค๋”ฉ์— ๋น„ํ•ด ๊ธฐ๋ณธ์ ์œผ๋กœ ์ฆ์„ค๋น„์šฉ์ด ๋“ค์ง€ ์•Š๋Š” ์žฅ์ ์ด ์žˆ์ง€๋งŒ ์ผ๋ถ€ DB์—๋งŒ ํŠธ๋ž˜ํ”ฝ์ด ๋ชฐ๋ฆด ์ˆ˜ ์žˆ๋‹ค. ์ฆ์„ค์ž‘์—…์— ํฐ ๋น„์šฉ์ด ๋“ค์ง€ ์•Š์•„ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ธ‰๊ฒฉํ•˜๊ฒŒ ์ฆ๊ฐ€ํ•  ์—ฌ์ง€๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•˜๊ธฐ ์ ํ•ฉ ํ•œ์ชฝ์—๋งŒ ํŠธ๋ž˜ํ”ฝ์ด ๋ชฐ๋ฆฌ๋Š” ๊ฒฝ์šฐ ์ƒค๋”ฉ์„ ํ•˜๋Š” ์˜๋ฏธ๊ฐ€ ์—†์–ด์ง€๊ณ  ๋ชฐ๋ฆฌ๋Š”์ชฝ์˜ ๋ถ€ํ•˜๊ฐ€ ์‹ฌํ•ด์ง€๋ฉด ๋˜ ๋‹ค์‹œ ๋ถ„์‚ฐ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ DB ์žฌ ์ •๋ ฌ ์ž‘์—…์ด ํ•„์š”ํ•จ

Sharding์˜ Partitioning ์ข…๋ฅ˜

Horizontal Partitioning

horizontal-partitioning Schema๊ฐ€ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋‘๊ฐœ ์ด์ƒ์˜ DB์— ๋‚˜๋ˆ  ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ• ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์˜ ๋ถ„ํ•  ๋ฐฉ๋ฒ•์ด๊ณ  range based ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋‹จ์ˆœํ•œ ๊ตฌ์กฐ๋กœ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ• ๊ฐ€๋Šฅํ•˜๋‹ค

Row์˜ ๊ฐฏ์ˆ˜๊ฐ€ 1/N์ด ๋˜๋ฉฐ ๊ทธ๋งŒํผ Index์˜ ์ˆ˜๋„ ์ค„์–ด๋“ค์–ด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋œ๋‹ค.

๋‹จ์ ์œผ๋กœ๋Š” ์—ฌ๋Ÿฌ DB์— ๋Œ€ํ•ด์„œ ํŒŒํ‹ฐ์…”๋‹ ์ ์šฉ์‹œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค JOIN ๋ฌธ์ œ๋‚˜ Consistency, Replication ๋“ฑ ๋ณต์žกํ•œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊น€. ์„œ๋ฒ„๊ฐ„์˜ ์—ฐ๊ฒฐ๊ณผ์ •์ด ๋งŽ์•„์ง€๋ฉฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๋Š” ๊ณผ์ •์ด ๋ณต์žกํ•˜๊ธฐ ๋•Œ๋ฌธ์— latency๊ฐ€ ์ฆ๊ฐ€ํ•˜๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ•˜๋‚˜์˜ ์„œ๋ฒ„๊ฐ€ ์žฅ์• ๋กœ ์ด์–ด์งˆ ์‹œ ๋ฐ์ดํ„ฐ์˜ ๋ฌด๊ฒฐ์„ฑ์ด ๊บ ์งˆ ์ˆ˜ ์žˆ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์–ด ์ ์šฉ์‹œ ๊ฐ€๋Šฅํ•œ DB์— ๋Œ€ํ•ด์„œ ๋‹จ์ˆœํ•œ ์„ค๊ณ„๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

Vertibcal Partitioning

vertical-partitioning ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ์„ ๊ธฐ์ค€์œผ๋กœ ๋‚˜๋ˆ„๊ฒŒ ๋˜๋Š”๋ฐ ์ด๋Š” ํ…Œ์ด๋ธ” ๋ณ„๋กœ ์„œ๋ฒ„๋ฅผ ๋ถ„ํ• ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ์ปฌ๋Ÿผ๋“ฑ์„ ๋ถ„๋ฆฌ์‹œ์ผœ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. ๋‹จ ์„œ๋ฒ„์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์ ์  ๊ฑฐ๋Œ€ํ•ด์ง€๋ฉด ์ถ”๊ฐ€ ์ƒค๋”ฉ์ด ํ•„์š”ํ•˜๋ฏ€๋กœ ์ดˆ๊ธฐ์— ๊ตฌ์กฐ๋ฅผ ์ž˜ ์žก์•„์•ผ ํ•œ๋‹ค.

Range Based Partitioning

ํ…Œ์ด๋ธ”์ด ์ ์  ์ปค์ง€๋Š” ๊ฒฝ์šฐ ์„œ๋ฒ„๋ฅผ ๋ถ„๋ฆฌํ•˜๊ฒŒ ๋˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ฒ”์œ„์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚˜๋ˆ„๊ธฐ ๋–„๋ฌธ์— ๋‹จ์ˆœํ•˜์ง€๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„ํ• ํ•˜๋Š” ๊ธฐ์ค€์ด ์˜ˆ์ธก ๊ฐ€๋Šฅํ•˜๊ณ  ๋ช…ํ™•ํ•ด์•ผ ํ•œ๋‹ค.

Key / Hash Based Partitioning

์—”ํ‹ฐํ‹ฐ๋ฅผ ํ•ด์‰ฌ ํ•จ์ˆ˜์— ๋„ฃ์–ด์„œ ๋‚˜์˜ค๋Š” ๊ฐ’์„ ํ‚ค๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒค๋”ฉํ•˜๋Š” ๊ธฐ๋ฒ•

Modular ํ•จ์ˆ˜๊ฐ€ ์ฃผ๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ท ๋“ฑํ•˜๊ฒŒ ๋ถ„ํฌ๋  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์‰ฌ ํ•จ์ˆ˜๋ฅผ ์ •ํ•ด์•ผ ํ•œ๋‹ค. Scaleout์‹œ์— ํ•จ์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ์ž‘์—…์ด ๋งค์šฐ ๋น„์‹ธ๋‹ค.

Directory Based Partitioning

DB์™€ ๋ณ„๊ฐœ๋กœ ์ถ”์ƒํ™”๋œ ๋ฃฉ์—…ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค์–ด ์ƒค๋“œ ํ‚ค์— ํ•ด๋‹นํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ Cacheํ•ด์„œ ์ฐพ๋Š” ์‹์œผ๋กœ ๊ตฌํ˜„

Sharding์‹œ์— ๊ณ ๋ คํ•ด์•ผ ํ•  ํฌ์ธํŠธ

๋ฐ์ดํ„ฐ ์žฌ๋ถ„๋ฐฐ (Rebalancing)

๋ฌด์ค‘๋‹จ์œผ๋กœ Scale out์ด ๊ฐ€๋Šฅํ•œ์ง€๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค.

๋ฐ์ดํ„ฐ ์กฐ์ธ

Sharding DB๊ฐ„ ์กฐ์ธ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ์—ญ์ •๊ทœํ™”๋ฅผ ๊ฐ์•ˆํ•˜์—ฌ ์„ค๊ณ„ํ•ด์•ผ ํ•œ๋‹ค. ๋ฐ์ดํ„ฐ ์ค‘๋ณต์€ ๋Œ€์šฉ๋Ÿ‰ ์ฒ˜๋ฆฌ์— ๋Œ€ํ•œ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„์ด๋‹ค.

Partitioning๊ธฐ๋ฒ•

์–ด๋–ค์‹์œผ๋กœ Data๋ฅผ ๋‚˜๋ˆŒ๊ฑด์ง€ ๊ณ ๋ฏผํ•ด์•ผ ํ•œ๋‹ค. ๊ฐ ๋ฐฉ๋ฒ•๊ณผ ์ƒํ™ฉ์— ๋งž์ถ”์–ด Scalableํ•œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์œ„ํ•œ ์ค‘์š”ํ•œ ์š”์†Œ์ด๋‹ค.

Global Unique Key

DB๊ฐ„ ์‚ฌ์šฉํ•˜๋Š” ํ‚ค๊ฐ€ ์ค‘๋ณต๋˜์ง€ ์•Š๋Š”์ง€ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค.

Compact Table

ํ…Œ์ด๋ธ”์˜ ๋‹จ์œ„๋ฅผ ๊ฐ€๋Šฅํ•œ ์ž‘๊ฒŒ ์œ ์ง€ํ•ด์•ผ ํ•œ๋‹ค.

์ถœ์ฒ˜ https://jins-dev.tistory.com/entry/%EB%8C%80%EC%9A%A9%EB%9F%89-Data-%EC%B2%98%EB%A6%AC%EB%A5%BC-%EC%9C%84%ED%95%9C-%EC%9B%B9-%EC%84%9C%EB%B9%84%EC%8A%A4%EC%9D%98-%EC%83%A4%EB%94%A9Sharding-%EA%B8%B0%EB%B2%95 https://woowabros.github.io/experience/2020/07/06/db-sharding.html