#Database Sharding
ํ๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ดํฐ ์ฉ๋ ๋๋ ์ปค๋ฅ์ ๋ฑ์ ๋ถํ๊ฐ ๋ง์์ง๋ฉด ํธ๋ํฝ ๋ถ์ฐ ๋ชฉ์ ์ผ๋ก ์ค๋ฉ์ ๊ณ ๋ คํด์ผ ํ๋ค. ์ค๋ฉ์ ์ฌ์ฉํจ์ผ๋ก์จ ์ป์ด์ง๋ ์ฅ์ ์ ํธ๋ํฝ ๋ถ์ฐ ์ด์ธ์ ํน์ DB์ ์ฅ์ ๊ฐ ์ ์ฒด์ ์ฅ์ ๋ก ์ด์ด์ง์ง ์๋ ์ฅ์ ๋ ๊ฐ์ง๊ณ ๊ฐ๋๋ค. (HA ๊ตฌ์ฑ์ผ๋ก Failover ๋๋๋ก ์ค๊ณ)
์ค๋ฉ์ DBMS ๋ ๋ฒจ์์ ๋ถํ ํ๋๊ฒ์ด ์๋
HA(high availability)๋? ์ ๋ณด๊ธฐ์ ์์, HA๋ ๋ฐ๋์งํ ์ ๋๋ก ๊ธด ์๊ฐ๋์ ์ง์์ ์ผ๋ก ์ด์์ด ๊ฐ๋ฅํ ์์คํ ์ด๋ ์ปดํฌ๋ํธ๋ฅผ ๊ฐ๋ฆฌํจ๋ค. ๋๋ฆฌ ์ฐ์ด๊ณ ์์ง๋ง ๋ฌ์ฑํ๊ธฐ ๊ฒฐ์ฝ ์ฝ์ง ์์ ์์คํ ๋ฐ ์ ํ์ ๋ํ ๊ฐ์ฉ์ฑ ํ์ค์ ํํ "ํ์ด๋ธ ๋์ธ" (five 9) ์ด๋ผ๊ณ ๋ถ๋ฅด๋ 99.999%์ ๊ฐ์ฉ์ฑ์ ๋ค ์ ์๋ค. H/W, S/W์ ์ฅ์ ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํ ๋์ฑ ์ด HA์ด๋ฉฐ HA๋ฅผ ์ํ ๋ฐฉ๋ฒ์ผ๋ก ํด๋ฌ์คํฐ๋ง, ์ด์คํ, RAID ๋ฑ์ ๊ธฐ์ ์ด ์์
Failover ์๋ฒ, ์์คํ , ๋คํธ์ํฌ ๋ฑ์์ ์ด์์ด ์๊ฒผ์ ๋ ์๋น ์์คํ ์ผ๋ก ์๋์ ํ๋๋ ๊ธฐ๋ฅ์ด๋ฉฐ failback์ failover์ ๋ฐ๋ผ ์ ํ๋ ์๋ฒ/์์คํ /๋คํธ์ํฌ๋ฅผ ์ฅ์ ๊ฐ ๋ฐ์ํ๊ธฐ ์ ์ ์ํ๋ก ๋๋๋ฆฌ๋ ์ฒ๋ฆฌ๋ฅผ ์๋ฏธ
PK๋ฅผ ๋ชจ๋๋ฌ๋ก ์ฐ์ฐํ ๊ฐ(PK % DB Count)์ผ๋ก DB๋ฅผ ์ฐพ์๊ฐ๋ ๋ฐฉ์ ๋ ์ธ์ง ์ค๋ฉ์ ๋นํด ๋ฐ์ดํฐ๊ฐ ๊ท ์ผํ๊ฒ ๋ถ์ฐ๋์ง๋ง ์ถ๊ฐ ์ฆ์คํ๋ ๊ณผ์ ์์ ์ด๋ฏธ ์์ฑ๋ ๋ฐ์ดํฐ๋ค์ ๋ํด์ ์ฌ์ ๋ ฌ์ด ํ์ํ๋ค.
๋ฐ์ดํฐ๋์ด ์ผ์ ์์ค์์ ์ ์ง๋ ๊ฒ์ผ๋ก ์์๋๋ ๋ฐ์ดํฐ ์ฑ๊ฒฉ์ ๊ฐ์ง ๊ณณ์ ์ ์ฉํ ๋ ์ด์ธ๋ฆฌ๋ ๋ฐฉ์ ๋ฐ์ดํฐ๊ฐ ๊ท ์ผํ๊ฒ ๋ถ์ฐ๋์ด ํธ๋ํฝ์ ์์ ์ ์ผ๋ก ์ํํ๋ฉด์ ๋ฆฌ์์ค๋ฅผ ์ต๋ํ ํ์ฉํ ์ ์๋ ์ฅ์ ์ด ์๋ค.
PK์ ๋ฒ์๋ฅผ ๊ธฐ์ค์ผ๋ก DB๋ฅผ ์ฐพ์๊ฐ๋ ๋ฐฉ์. ๋ชจ๋๋ฌ ์ค๋ฉ์ ๋นํด ๊ธฐ๋ณธ์ ์ผ๋ก ์ฆ์ค๋น์ฉ์ด ๋ค์ง ์๋ ์ฅ์ ์ด ์์ง๋ง ์ผ๋ถ DB์๋ง ํธ๋ํฝ์ด ๋ชฐ๋ฆด ์ ์๋ค. ์ฆ์ค์์ ์ ํฐ ๋น์ฉ์ด ๋ค์ง ์์ ๋ฐ์ดํฐ๊ฐ ๊ธ๊ฒฉํ๊ฒ ์ฆ๊ฐํ ์ฌ์ง๊ฐ ์์ ๊ฒฝ์ฐ ์ฌ์ฉํ๊ธฐ ์ ํฉ ํ์ชฝ์๋ง ํธ๋ํฝ์ด ๋ชฐ๋ฆฌ๋ ๊ฒฝ์ฐ ์ค๋ฉ์ ํ๋ ์๋ฏธ๊ฐ ์์ด์ง๊ณ ๋ชฐ๋ฆฌ๋์ชฝ์ ๋ถํ๊ฐ ์ฌํด์ง๋ฉด ๋ ๋ค์ ๋ถ์ฐ์ฒ๋ฆฌ๋ฅผ ์ํ DB ์ฌ ์ ๋ ฌ ์์ ์ด ํ์ํจ
Schema๊ฐ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋๊ฐ ์ด์์ DB์ ๋๋ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ
๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ ๋ถํ ๋ฐฉ๋ฒ์ด๊ณ range based ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค๋ฉด ๋จ์ํ ๊ตฌ์กฐ๋ก ์์คํ
์ ๊ตฌ์ถ ๊ฐ๋ฅํ๋ค
Row์ ๊ฐฏ์๊ฐ 1/N์ด ๋๋ฉฐ ๊ทธ๋งํผ Index์ ์๋ ์ค์ด๋ค์ด ์์ฐ์ค๋ฝ๊ฒ ์ฑ๋ฅ์ด ํฅ์๋๋ค.
๋จ์ ์ผ๋ก๋ ์ฌ๋ฌ DB์ ๋ํด์ ํํฐ์ ๋ ์ ์ฉ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค JOIN ๋ฌธ์ ๋ Consistency, Replication ๋ฑ ๋ณต์กํ ๋ฌธ์ ๊ฐ ์๊น. ์๋ฒ๊ฐ์ ์ฐ๊ฒฐ๊ณผ์ ์ด ๋ง์์ง๋ฉฐ ๋ฐ์ดํฐ๋ฅผ ์ฐพ๋ ๊ณผ์ ์ด ๋ณต์กํ๊ธฐ ๋๋ฌธ์ latency๊ฐ ์ฆ๊ฐํ๊ฒ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ํ๋์ ์๋ฒ๊ฐ ์ฅ์ ๋ก ์ด์ด์ง ์ ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ์ด ๊บ ์ง ์ ์๋ค๋ ๋จ์ ์ด ์์ด ์ ์ฉ์ ๊ฐ๋ฅํ DB์ ๋ํด์ ๋จ์ํ ์ค๊ณ๊ฐ ํ์ํ๋ค.
ํ
์ด๋ธ์ ์ปฌ๋ผ์ ๊ธฐ์ค์ผ๋ก ๋๋๊ฒ ๋๋๋ฐ ์ด๋ ํ
์ด๋ธ ๋ณ๋ก ์๋ฒ๋ฅผ ๋ถํ ํ๋ ๋ฐฉ์์ผ๋ก ๋ณผ ์ ์๋ค.
์์ฃผ ์ฌ์ฉํ๋ ์ปฌ๋ผ๋ฑ์ ๋ถ๋ฆฌ์์ผ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์๋ค.
๋จ ์๋ฒ์ ๋ฐ์ดํฐ๊ฐ ์ ์ ๊ฑฐ๋ํด์ง๋ฉด ์ถ๊ฐ ์ค๋ฉ์ด ํ์ํ๋ฏ๋ก ์ด๊ธฐ์ ๊ตฌ์กฐ๋ฅผ ์ ์ก์์ผ ํ๋ค.
ํ ์ด๋ธ์ด ์ ์ ์ปค์ง๋ ๊ฒฝ์ฐ ์๋ฒ๋ฅผ ๋ถ๋ฆฌํ๊ฒ ๋๋ ๋ฐฉ์์ผ๋ก ๋ฒ์์ ๋ฐ๋ผ ๋ฐ์ดํฐ๋ฅผ ๋๋๊ธฐ ๋๋ฌธ์ ๋จ์ํ์ง๋ง ๋ฐ์ดํฐ๋ฅผ ๋ถํ ํ๋ ๊ธฐ์ค์ด ์์ธก ๊ฐ๋ฅํ๊ณ ๋ช ํํด์ผ ํ๋ค.
์ํฐํฐ๋ฅผ ํด์ฌ ํจ์์ ๋ฃ์ด์ ๋์ค๋ ๊ฐ์ ํค๋ก ๋ฐ์ดํฐ๋ฅผ ์ค๋ฉํ๋ ๊ธฐ๋ฒ
Modular ํจ์๊ฐ ์ฃผ๋ก ์ฌ์ฉ๋๋ฉฐ ๋ฐ์ดํฐ๊ฐ ๊ท ๋ฑํ๊ฒ ๋ถํฌ๋ ์ ์๋๋ก ํด์ฌ ํจ์๋ฅผ ์ ํด์ผ ํ๋ค. Scaleout์์ ํจ์๋ฅผ ๋ณ๊ฒฝํ๋ ์์ ์ด ๋งค์ฐ ๋น์ธ๋ค.
DB์ ๋ณ๊ฐ๋ก ์ถ์ํ๋ ๋ฃฉ์ ํ ์ด๋ธ์ ๋ง๋ค์ด ์ค๋ ํค์ ํด๋นํ๋ ๋ฐ์ดํฐ๋ฅผ Cacheํด์ ์ฐพ๋ ์์ผ๋ก ๊ตฌํ
๋ฌด์ค๋จ์ผ๋ก Scale out์ด ๊ฐ๋ฅํ์ง๋ฅผ ๊ณ ๋ คํด์ผ ํ๋ค.
Sharding DB๊ฐ ์กฐ์ธ์ด ๋ถ๊ฐ๋ฅํ๋ฏ๋ก ์ญ์ ๊ทํ๋ฅผ ๊ฐ์ํ์ฌ ์ค๊ณํด์ผ ํ๋ค. ๋ฐ์ดํฐ ์ค๋ณต์ ๋์ฉ๋ ์ฒ๋ฆฌ์ ๋ํ ํธ๋ ์ด๋์คํ์ด๋ค.
์ด๋ค์์ผ๋ก Data๋ฅผ ๋๋๊ฑด์ง ๊ณ ๋ฏผํด์ผ ํ๋ค. ๊ฐ ๋ฐฉ๋ฒ๊ณผ ์ํฉ์ ๋ง์ถ์ด Scalableํ ์ํคํ ์ฒ๋ฅผ ์ํ ์ค์ํ ์์์ด๋ค.
DB๊ฐ ์ฌ์ฉํ๋ ํค๊ฐ ์ค๋ณต๋์ง ์๋์ง ๊ณ ๋ คํด์ผ ํ๋ค.
ํ ์ด๋ธ์ ๋จ์๋ฅผ ๊ฐ๋ฅํ ์๊ฒ ์ ์งํด์ผ ํ๋ค.
์ถ์ฒ 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