์ค๋ฉ์ ๊ฐ๋ ์ ์ดํดํ๊ธฐ ์ํด, understanding-database-sharding์ ๋ฒ์ญํ ๊ธ์ ๋๋ค.
shard์ ์ฌ์ ์ ์๋ฏธ๋ (์ ๋ฆฌยท๊ธ์ ๋ฑ์) ์กฐ๊ฐ, ํํธ์ด๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ธก๋ฉด์์ ๋ณธ๋ค๋ฉด sharding์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์กฐ๊ฐ์ผ๋ก ๋๋๋ ๊ฒ์ผ๋ก ์๊ฐํด๋ณผ ์ ์๋ค.
์ค๋ฉ(sharding)์ horizontal partitioning
๊ณผ ๊ด๋ จ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค๊ณ ํจํด์ด๋ค. ํ ํ
์ด๋ธ์ row๋ค์ ์ฌ๋ฌ ๊ฐ์ ์๋ก ๋ค๋ฅธ ํ
์ด๋ธ, ์ฆ ํํฐ์
์ผ๋ก ๋ถ๋ฆฌํ๋ ๊ฒ์ ๋งํ๋ค.
vertical partitioning
์ ๊ฒฝ์ฐ ์ด ์ ์ฒด๊ฐ ์์ ํ ์๋ก์ด ํ
์ด๋ธ๋ก ๋ถ๋ฆฌ๋๊ธฐ ๋๋ฌธ์, ํ
์ด๋ธ ๋ด์ ๋ฐ์ดํฐ๋ค์ ๋
๋ฆฝ์ ์ด๋ฉฐ ์ด๊ณผ ํ์ด ๋ชจ๋ ๋ฌ๋ผ์ง๋ค.
shards๋ ์ค๋ฉ์ ํตํด ๋๋์ด์ง ๋ธ๋ก๋ค์ ๋งํ๋ค. ์ค๋ฉ์ ๋ฐ์ดํฐ๋ฅผ ์์ ๋ฉ์ด๋ฆฌ(smaller chunks)๋ก ์ชผ๊ฐ๋ ๊ฒ์ด๊ณ , ์ด ์์ ๋ฉ์ด๋ฆฌ๋ฅผ logical shards
๋ผ๊ณ ๋ถ๋ฅธ๋ค. logical shards๋ ๋ถ๋ฆฌ๋ physical shard
, ์ฆ database node์ ๋ฟ๋ ค์ง๋ค.
database node: ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ธ์คํด์ค๋ฅผ ๋งํ๋ค. main node๋ ์ฐ๊ธฐ, ๊ทธ ์ธ์ ๋ ธ๋๋ ์ฝ๊ธฐ ์ ์ฉ์ผ๋ก ์ฌ์ฉ๋๋ ๊ฒ์ด ์ ํ์ ์ด๋ค. main node๋ฅผ ๋ณ๊ฒฝํ์ ๋ ๋๋จธ์ง node๋ค์ ๊ทธ์ ๋ฐ๋ผ ๋ณํ๊ฒ ๋๋ ๊ตฌ์กฐ๋ค. (์ฐธ๊ณ )
shards๋ค์ ์๋ฆฝ์ฑ์ด ๊ฐํ๊ธฐ ๋๋ฌธ์ ๊ฐ์ ๋ฐ์ดํฐ๋ ์ปดํจํฐ ์์์ ๊ณต์ ํ์ง ์๋๋ค. (๋ฌผ๋ก reference table๋ก ์ฌ์ฉํ ๋ชฉ์ ์ผ๋ก ๊ฐ shards์ ํน์ ํ ์ด๋ธ์ ๋ณต์ ํ ์๋ ์๋ค.)
์ฃผ๋ก application level์์ ์คํ๋๋ค. ์ฌ๊ธฐ์ application์ด๋ ์ด๋ค shards์ ์ฝ๊ธฐ์ ์ฐ๊ธฐ๋ฅผ ์ ์กํ ์ง๋ฅผ ์ ์ํ๋ ์ฝ๋๋ฅผ ํฌํจํ๊ณ ์๋ ๊ฒ
์ ๋งํ๋ค. ์ด๋ค ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ ์์คํ
์ ๋ด์ฅ๋ sharding ๋ฅ๋ ฅ์ด ์์ด์ database level์์ ๋ฐ๋ก ์ฌ์ฉํ ์๋ ์๋ค.
๋ฐ์ดํฐ๊ฐ ๋ง๋ shard์ ๋ค์ด๊ฐ๋ ๊ฒ์ด ์ค์ํ๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ฐ์ดํฐ๋ฅผ ์๊ฑฐ๋ ์ฟผ๋ฆฌ๊ฐ ๋งค์ฐ ๋๋ ค์ง๋ค. ๋ณดํธ์ ์ธ sharding ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
๋ค๋ฅธ ๋ง๋ก hash based sharding์ด๋ผ๊ณ ๋ ๋ถ๋ฆฐ๋ค. ์๋ก ์ฐ์ธ ๋ฐ์ดํฐ(๊ณ ๊ฐ์ number ID, ํด๋ผ์ด์ธํธ์ IP์ฃผ์, ์ฐํธ ๋ฒํธ์ ๊ฐ์)๋ก๋ถํฐ value๋ฅผ ๋ฐ์ ํด๋น ๋ฐ์ดํฐ๊ฐ ์ด๋ shard๋ก ๊ฐ์ง ๊ฒฐ์ ํ๋ hash ํจ์์ ์ฐ๊ฒฐํ๋ ๋ฐฉ์์ด๋ค.
hash ํจ์๋ ๊ณ ๊ฐ ์ด๋ฉ์ผ๊ณผ ๊ฐ์ ๋ฐ์ดํฐ ์กฐ๊ฐ์ Input์ผ๋ก ๋ฐ์, hash value๋ผ๋ ์์ ํ ๋ค๋ฅธ ํํ์ value๋ฅผ Ouput์ผ๋ก ๋ด๋ณด๋ธ๋ค. sharding์ ๊ด์ ์์ ๋ดค์ ๋ hash value๋ ๋ค์ด์ค๋ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋ shard๋ฅผ ๊ฒฐ์ ํ๋ shard ID๊ฐ ๋ ๊ฒ์ด๋ค.
์ฌ๋ฐ๋ฅธ shard์ ์ผ๊ด์ฑ ์๋ ๋ฐฉ์์ผ๋ก ๋ค์ด๊ฐ ์ ์๋๋ก entry๋ฅผ ์์น์ํค๊ธฐ ์ํด, hash ํจ์์ ๋ค์ด๊ฐ๋ value๋ค์ ๊ฐ์ column์์ ๋์์ผ ํ๋ค. ์ด colum์ shard key๋ผ๊ณ ๋ถ๋ฅธ๋ค.
key based sharding์ด ๋ง์ด ์ฐ์ด๊ธด ํ์ง๋ง, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋ฒ๋ฅผ ๋์ ์ผ๋ก ์ถ๊ฐํ๊ฑฐ๋ ์ ๊ฑฐํ ๋ ์ด๋ ค์ธ ์ ์๋ค. ์๋ฒ๋ฅผ ์ถ๊ฐํ ๋ ๊ฐ๊ฐ์ ์๋ฒ๋ ๊ทธ์ ์์ํ๋ hash value๊ฐ ์์ด์ผ ํ๊ณ , ์กด์ฌํ๋ ๋ง์ entry๋ค์ ๋ง๋ hash value์ ๋ค์ ๋งคํ๋๊ณ , ์ ํฉํ ์๋ฒ์ migrate ๋์ด์ผ ํ๋ค. ๋ฐ์ดํฐ๋ฅผ rebalancingํ๋ ๊ฒ์ ์์ํ๋ค๋ฉด ์๋ก์ด hash ํจ์ ๋ฟ ์๋๋ผ ์์ hsah ํจ์๋ ์ ํจํ์ง ์๊ฒ ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก migration์ ํ๋ ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ์ฐ์ง ๋ชปํ๊ณ , ์ด ์๋ฐ์ ์๋ค.
์ด ์ ๋ต์ ๊ฐ์ฅ ํฐ ์ฅ์ ์ hotspots๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ๋ฐ์ดํฐ๋ฅผ ๊ณจ๊ณ ๋ฃจ ๋ถ๋ฐฐํ ์ ์๊ณ , ์๊ณ ๋ฆฌ์ฆ์ ์ผ๋ก ๋ถ๋ฐฐํ๊ธฐ ๋๋ฌธ์ range๋ directory์ ๋ค๋ฅด๊ฒ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ์ด๋์ ์์นํ๋์ง ๋งํด์ฃผ๋ map์ ๊ฐ์ง ํ์๊ฐ ์๋ค.
์ฃผ์ด์ง value์ ๋ฒ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ชผ๊ฐ ๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ด๋ค ๋ธ๋๋์ ์นดํ๋ก๊ทธ์ ๋ชจ๋ ์ํ์ ๋ํ ์ ๋ณด๊ฐ ๋ค์ด์๋ค๊ณ ํ์. ์ด ๋ฐฉ์์ ์ ์ฉํ๋ฉด, ๋ช๋ช ๊ฐ์ shard๋ฅผ ๋ง๋ค๊ณ ๊ฐ๊ฒฉ ๋ฒ์์ ๋ฐ๋ผ์ ์ํ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ฒ ๋ ์ ์์ ๊ฒ์ด๋ค.
๊ฐ์ฅ ํฐ ์ฅ์ ์ ์คํ์ด ๋น๊ต์ ๊ฐ๋จํ๋ค๋ ๊ฒ์ด๋ค. ๋ชจ๋ shard๋ค์ ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์๊ณ , original ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฟ ์๋๋ผ ์๋ก๊ฐ ๋๊ฐ์ ์คํค๋ง๋ฅผ ๊ฐ์ง๊ฒ ๋๋ค. application code๋ ๊ทธ์ ๋ฐ์ดํฐ๊ฐ ์ด๋ค ๋ฒ์์ธ์ง ์ฝ๊ณ ๊ทธ์ ์์ํ๋ shard์ ์ฐ๋ฉด ๋๋ค.
๋ฐ๋ฉด, ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ณจ๊ณ ๋ฃจ ๋ถ๋ฐฐํ์ง๋ ๋ชปํ๊ธฐ ๋๋ฌธ์ ์์ ๋งํ ๋ฐ์ดํฐ๋ฒ ์ด์ค hotspots๊ฐ ์๊ธธ ์ ์๋ค. ์ ๊ทธ๋ฆผ ์์ผ๋ก๋ ๋ชจ๋ shard๋ค์ด ๊ฐ์ ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ง๋ง, ํน์ ๋ฐ์ดํฐ๊ฐ ๋ค๋ฅธ ๋ฐ์ดํฐ์ ๋นํด ๋ ๋ง์ด ์ฐพ์์ง ์ ์๊ธฐ ๋๋ฌธ์ ์ฝ๋ ํ์๊ฐ ๋ถ๊ท ํํ ์ ์๋ค.
์ด sharding์ ์คํํ๊ธฐ ์ํด์๋ ๋ฐ๋์ ์ด๋ค shard๊ฐ ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณ ์๋์ง๋ฅผ ์ถ์ ํ ์ ์๋ shard key๋ฅผ ์ฌ์ฉํ๋ lookup table์ ๋ง๋ค๊ณ ์ ์งํด์ผ ํ๋ค.
๊ฐ๋จํ ๋งํ๋ฉด ํน์ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์ ์ ์๋(where specific data can be found) ์ ์ ์ธ ์ ๋ณด๋ฅผ ๊ฐ๊ณ ์๋ ํ ์ด๋ธ์ด๋ค.
Delivery Zone ์ด์ shard key๋ก ์ ์๋๋ค. shard key๋ก๋ถํฐ ์จ ๋ฐ์ดํฐ๋ ๊ฐ๊ฐ์ ํ์ด ์ด๋ค shard์ ์ฐ์ฌ์ ธ์ผ ํ๋์ง๋ฅผ lookup ํ ์ด๋ธ๊ณผ ํจ๊ป ์ฐ์ฌ์ง๋ค. range based sharding๊ณผ ๋น์ทํด ๋ณด์ด์ง๋ง, ๋ฒ์๋ฅผ ๊ธฐ์ค์ผ๋ก shard key์ ๋ฐ์ดํฐ๋ฅผ ๋ด๋ ค์ฃผ๋ ๊ฒ๊ณผ ๋ค๋ฅด๊ฒ ๊ฐ ํค๋ค์ ๊ฐ์ ์์ ๋ง์ ํน๋ณํ shard์ ๋ค์ด๊ฐ๊ฒ ๋๋ค.
ํด๋น ๋ฐฉ๋ฒ์ shard key๊ฐ ๋ฎ์ cardinality๋ฅผ ๊ฐ์ง ๋ ์ข์ ์ ํ์ด๋ค. hash ํจ์๋ฅผ ๊ฑฐ์น์ง ์๊ธฐ ๋๋ฌธ์ key based sharding๊ณผ๋ ๋ค๋ฅด๋ค. ๊ทธ์ lookup table์์ key๋ฅผ ๋ณด๊ณ ์ด๋์ ๋ฐ์ดํฐ๋ฅผ ์ธ์ง ๊ฒฐ์ ํ๋ ๊ฒ ๋ฟ์ด๋ค.
์ ์ฐ์ฑ(flexibility)์ด๋ค. range based sharding์ ๋ฒ์์ ๊ตญํ๋๊ณ , key based sharding์ ๋ง๋ค๊ณ ๋ ๋ค ๋ฐ๊พธ๊ธฐ ๋งค์ฐ ์ด๋ ค์ด hash ํจ์์ ๊ตญํ๋๋ค. ๋ฐ๋ฉด directory based sharding์ ๋ฐ์ดํฐ๋ฅผ ์ชผ๊ฐ๊ธฐ ์ํ entry๋ค์ ์ด๋ค ์์คํ ์ด๋ ์๊ณ ๋ฆฌ์ฆ์ ์๊ด ์์ด entry๋ฅผ ํ ๋นํ ์ ์๋๋ก ํด์ค๋ค. ๋์ ์ผ๋ก shard๋ฅผ ์ถ๊ฐํ๋ ๊ฒ๋ ๋น๊ต์ ์ฝ๋ค.
๋ฐ๋ฉด ์ฟผ๋ฆฌํ๊ฑฐ๋ writeํ๊ธฐ ์ ์ lookup table์ ์ฐ๊ฒฐ์ด ํ์ํ๊ธฐ ๋๋ฌธ์, application ํผํฌ๋จผ์ค์ ์ ์ข์ ์ํฅ(detrimental impact)์ ์ค ์ ์๋ค. ๊ฒ๋ค๊ฐ lookup table์ ์คํจ ์ง์ ์ด ๋ ์ ์๋ค. lookup table์ด ์์๋๋ฉด ๋ฐ์ดํฐ๋ฅผ ์๋ก ์ฐ๊ฑฐ๋ ์กด์ฌํ๋ ๋ฐ์ดํฐ์ ์ ๊ทผํ๋ ๊ฒ์ ์ํฅ์ ์ค ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ฌ๋ฌ ๋ณต์ก์ฑ ๋๋ฌธ์, sharding์ ๋๊ท๋ชจ์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ๋ ์ฃผ๋ก ์ฌ์ฉ๋๋ค.
sharding์ ํ๊ธฐ ์ , ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ต์ ํํ ์ ์๋ ๋ชจ๋ ๋ค๋ฅธ ์ต์ ๋ค์ ๊ฒํ ํด์ผ ํ๋ค. ์ต์ ๋ค์ ๋ค์๊ณผ ๊ฐ๋ค.
monolithic ์ ํ๋ฆฌ์ผ์ด์ (๋ชจ๋ ์ปดํฌ๋ํธ๋ค์ด ๊ฐ์ ์๋ฒ์ ์๋)์ ์์ ํ๋ค๋ฉด, ์์ ๋ง์ ๋จธ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฎ๊ฒจ ํผํฌ๋จผ์ค๋ฅผ ํฅ์์ํฌ ์ ์๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ ๊ฑด๋ค์ง ์๊ธฐ ๋๋ฌธ์ sharding๋งํผ ๋ณต์กํ์ง ์์ง๋ง, ๋๋จธ์ง ์ธํ๋ผ์๋ ๋ณ๊ฐ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์์ง ํ์ฅํ๋ ๊ฒ์ ํ์ฉํ๋ค.
์ฝ๊ธฐ ํผํฌ๋จผ์ค๊ฐ ๋ฌธ์ ๋ผ๋ฉด, ์บ์ฑ๋ ์ข์ ๋ฐฉ๋ฒ์ด๋ค. ์ด๋ฏธ ์์ฒญ๋ ๋ฐ์ดํฐ๋ค์ ์ผ์์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๊ณ , ๋์ค์ ์ ๊ทผํ ๋ ํจ์ฌ ๋น ๋ฅด๊ฒ ์ ๊ทผํ ์ ์๊ฒ ํด์ค๋ค.
์ฝ๊ธฐ ํผํฌ๋จผ์ค๋ฅผ ๋์ฌ์ค ๋ค๋ฅธ ๋ฐฉ๋ฒ์ primary server์์ ๋ฐ์ดํฐ๋ฅผ ์นดํผํด ํ ๊ฐ ์ด์์ secondary server๋ฅผ ๋ง๋๋ ๊ฒ์ด๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์๋ก ์ฐ์ธ ๊ฒ๋ค์ secondary๋ก ์นดํผ๋๊ธฐ ์ ์ primary๋ก ๊ฐ๊ณ , ์ฝ๊ธฐ๋ secondary์์๋ง ๋ฐ์ํ๋ค.
์ฝ๊ธฐ์ ์ฐ๊ธฐ๋ฅผ ๋๋๋ ๊ฒ์ ํ ๊ฐ์ ๋จธ์ ์์ ๋๋ฌด ๋ง์ด ๋ก๋ํ๋ ๊ฒ์ ๋ฐฉ์งํด์ฃผ๊ณ , ๋๋ ค์ง๊ฑฐ๋ ์ถฉ๋์ด ์๊ธฐ๋ ๊ฒ์ ๋ง์์ค๋ค. computing resource, ์ฆ ๋์ด ๋ ๋ง์ด ๋ค๊ธฐ ๋๋ฌธ์ ๋๊ตฐ๊ฐ์๊ฒ๋ ์ ์ฝ์ด ๋ ์ ์๊ธด ํ๋ค.
๋๋ถ๋ถ์ ์ํฉ์์ ๋ ๋ง์ ์์์ ๊ฐ์ง ๋จธ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ scaling up ํ๋ ๊ฒ์ sharding์ ๋นํด ๊ณต์๊ฐ ์ ๊ฒ ๋ ๋ค. replica๋ฅผ ๋ง๋๋ ๊ฒ๊ณผ ๊ฐ์ด ์๋ฒ๋ฅผ ์ ๊ทธ๋ ์ด๋ํ๋ ๊ฒ์ ๋น์ฉ์ด ๋ ๋ ๋ค. ๋ฐ๋ผ์ ์ ๊ทธ๋ ์ด๋๊ฐ ๋ฒ ์คํธ ์ต์ ์ด๋ผ๋ฉด ๋ฆฌ์ฌ์ด์ง์ ๊ฑฐ์ณ์ผํ ๊ฒ์ด๋ค.
sharding์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ํ ํ์ฅ์ ๊ณ ๋ คํ ๋ ์ข์ ํด๊ฒฐ์ฑ ์ด ๋ ์ ์๋ค. ํ์ง๋ง ๋ณต์ก์ฑ๊ณผ ์ ์ฌ์ ์คํจ ์ง์ ์ ๋ง๋ค ์๋ ์๋ค. ์ด๋ค ์ด์๊ฒ๋ ํ์ํ ์๋ ์์ง๋ง, ๋ค๋ฅธ ๊ฒฝ์ฐ sharding์ด ์ฃผ๋ ์ด์ ๋ณด๋ค sharded architecture๋ฅผ ๋ง๋ค๊ณ ์ ์งํ๋๋ฐ ๋๋ ์๊ฐ๊ณผ ๋น์ฉ์ด ์๋์ ์ผ ์๋ ์๋ค.
์์ผ๋ก ๋์๊ฐ๊ธฐ ์ํด, ์ ๋ณด๋ฅผ ์ต๋ํ ์ฐพ์๋ณด๊ณ application์ ์ ์ฉํ๋ ๊ฒ์ด ์ข์ ๊ฒ์ด๋ค.
์ ๋ณด๊ณ ๊ฐ๋๋ค.