DOing
ํ๋ก์ ๊ธฐ๋ฐ ํผ๋ ์ํคํ ์ฒ ์ค๊ณํ๊ธฐ ๋ณธ๋ฌธ
100๋ง ๊ตฌ๋ ์, 100k ํ๋ก์๋ฅผ ๊ฐ์ง๊ณ ์๋ ์ธํ๋ฃจ์ธ์, ์ฐ์์ธ๋ ์๋์ง๋ง ์๋ง์ ๊ตฌ๋ ์๋ฅผ ๊ฐ์ง๊ณ ์๋ ์ผ๋ฐ์ธ๋ค์ ์์ฆ์๋ ํํ๊ฒ ์ฐพ์๋ณผ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ฐ ๊ณ์ ์ ํ๋ก์ํ๋ฉด, ๋น์ฐํ ๋ด ํผ๋์ ๋ ์ผํ๋ค๊ณ ์๊ฐํ๋ค. ๋น์ฐํ๋ค. ํ์ง๋ง ๋ด๊ฐ ์ง์ ๊ตฌํํ๋ ค๊ณ ํ๋ ๋ญ ํ๋ ๋น์ฐํ๊ฒ ์์๋ค.
์ฌ๋ด์์ "ํ๋ก์ - ํ๋ก์ ๊ธฐ๋ฐ ํผ๋"ํ๋ก์ ํธ์ ๋ฐฑ์๋ ์์ง๋์ด๋ก์จ ์ฐธ์ฌํ์๋ค. DB ์ค๊ณ, API ์ค๊ณ, ๊ธฐ๋ฅ ๊ฐ๋ฐ, ๋ฐฐํฌ์ดํ ๋ชจ๋ํฐ๋ง ์ ๋ฐ์ ์ธ ์์ ๋ค์ ๋ด๋นํ์๋ค. ์ด๋ฒ ํฌ์คํ ์์๋ ํ๋ก์์ ์ํคํ ์ฒ ์ค๊ณ๋จ๊ณ์์ ๊ณ ๋ฏผํ์๋ ์ง์ ๋ค์ ๋ํด์ ์ด์ผ๊ธฐํด๋ณด๋ ค๊ณ ํ๋ค.
[ IN ์ฐ์ฐ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ]
ํ๋ก์ ๊ธฐ๋ฐ ์ํคํ
์ฒ ๊ตฌ์กฐ๋ฅผ ์๊ฐํ ๋ ์ ์ผ ๊ฐ๋จํ๊ฒ ์๊ฐํด๋ผ ์ ์๋ ๋ฐฉ๋ฒ์ผ ๊ฒ์ด๋ค. ๋ด๊ฐ ๋ฐ๋ฅด๊ณ ์๋ ์น๊ตฌ๋ค์ ๊ฒ์๊ธ์ ์กฐํํ๊ธฐ ์ํด์, ๋ด๊ฐ ๋ฐ๋ฅด๋ ์ฌ๋๋ค์ ๋ชจ๋ IN์ ๋ฃ์ด ์ด๋ค์ ๊ฒ์๊ธ์ ์กฐํํ๋ ๋ฐฉ์์ด๋ค. ํ์ง๋ง ๋ฌธ์ ์ ์ด ์๋ค. ํ๋ก์์ ์ซ์๊ฐ ๋์ด๋๊ฒ ๋๋ฉด ์ธ๋ฑ์ค๋ฅผ ์ ๋๋ก ํ์ง ๋ชปํ๋ค๋ ๋ฌธ์ ๋ค.
์ธ์คํ๊ทธ๋จ์์๋ 7,500๊ฐ์ ํ๋ก์ฐ ์ ํ์ด ์์ผ๋ฉฐ(์์ ์ด ํ๋ก์ฐ ํ๋๊ฒ์ ๋ํ์ฌ๋ง, ๋จ์ด ๋๋ฅผ ํ๋ก์ํ๋ ๊ฒ์๋ ์ ์ ํ์ด ์์), ํธ์ํฐ์ ํ์ด์ค๋ถ์์๋ 5,000๊ฐ์ ํ๋ก์ฐ ์ ํ์ด ์๋ค.[1][2][3] ์ด์ ๊ธฐ๋ฐํ์ฌ ์๋น์ค์ 1000๋ช
์ ๋์ ํ๋ก์ฐ ์ ํ์ ๊ฑธ์ด๋๋ค๊ณ ์๊ฐ์ ํ๊ณ , 1000๋ช
์ ํ๋ก์ฐ๋ฅผ ํ ์ ์ ๊ฐ ์์๋ ๋ค์๊ณผ ๊ฐ์ ์ฟผ๋ฆฌ๊ฐ ๋๊ฐ ์ ์๋ค. 'select * from (๊ฒ์๊ธ ํ
์ด๋ธ๋ช
) where user_id in (1,2,3,4,5...1000)' ํ์ง๋ง ์ด๋ฐ์์ผ๋ก in์ ์ ๊ฐ์ด ๋๋ฌด ๋ง์ด ๋ค์ด๊ฐ๊ฒ๋๋ฉด ์ธ๋ฑ์ค๋ฅผ ์ ๋๋ก ํ์ง ๋ชปํ๊ฒ๋๋ฉด์ ์ฑ๋ฅ ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์๋ค.
* eq_range_index_dive_limit
: IN ์ ๋ด์ ๊ฐ์ ํฌ๊ธฐ๊ฐ eq_range_index_dive_limit๊ฐ(default 200)์ ์ด๊ณผํ ๊ฒฝ์ฐ ์คํ๊ณํ์ ์ธ์ธ ๋, index dive ๋ฐฉ์์ด ์๋ index statistics ๋ฐฉ์์ ์ฌ์ฉํ๋๋ก ํ๋ค. index dive๋, ์คํ๊ณํ์ ์ธ์ธ๋ index range scan์ ์ํ ์ต์ ํ์ row๋ฅผ ์์ธกํ๊ธฐ์ํด ์ง์ index๋ฅผ ์ด์ฉํด์ row์๋ฅผ ์์ธกํ๋๋ก ํ๋ ๋ฐฉ์์ด๋ฉฐ[4], index statistics๋ฐฉ์์ MySQL 5.6๋ถํฐ ์ ์ฉ๋ ๋ฐฉ์์ผ๋ก, index dive๊ฐ ์๋ ์ธ๋ฑ์ค ํต๊ณ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ์คํ๊ณํ์ ์ธ์ฐ๋๋ก ํ๋ ๋ฐฉ์์ด๋ค. ํต๊ณ์ ๋ณด๊ฐ ์ ํํ ๋๋ ์์ง๋ง, 100% ์ ๋ขฐํ ์๋์๊ธฐ ๋๋ฌธ์ ์๊ฐ์ง ๋ชปํ ์ฑ๋ฅ์ ํ๋ฅผ ๋ฐ์์ํฌ ์ ์๋ค.[5] [6]
* range_optimizer_max_mem_size
: ์ํํ๋ ์ฟผ๋ฆฌ์ ์ฉ๋์ด range_optimizer_max_mem_size ๊ฐ์ ์ด๊ณผํ๊ฒ๋๋ฉด ์ตํฐ๋ง์ด์ ธ๊ฐ ํ์ค์บ ํน์ ์ด์ธ์ ์ธ๋ฑ์ค๋ฅผ ํ์ฐ๋๋ก ํ๋ค. [7]
* MATERIALIZED select type
: ์ค์ ๋ก ์์์ฟผ๋ฆฌ์ธ select * from (๊ฒ์๊ธ ํ
์ด๋ธ๋ช
) where user_id in (1,2,3,4,5...1000) order by id desc limit 20 ์ ์คํ๊ณํ์ ๋๋ ค๋ณด์์๋ MATERIALIZED ๋ผ๋ select type์ด ๋ฐ์ํ์๋ค.
: MATERIALIZED์ MySQL 5.6 ๋ฒ์ ์ ์ถ๊ฐ๋ ์
๋ ํธ ํ์
์ผ๋ก, IN ์ ๋ด์ ์๋ธ์ฟผ๋ฆฌ๋ฅผ ์์ํ
์ด๋ธ๋ก ๋ง๋ค์ด ์กฐ์ธ์ ํ๋ ํํ๋ก ์ต์ ํ๋ฅผ ํด์ค๋ค. ์ฐธ๊ณ ๋ก 5.6 ๋ฒ์ ์์๋ IN์ ๋ด์ ์๋ธ์ฟผ๋ฆฌ๊ฐ ์กด์ฌํ๋ ๊ฒฝ์ฐ ๋งค ๋ ์ฝ๋ ๋ง๋ค ์๋ธ์ฟผ๋ฆฌ๋ฅผ ์คํ์ํค๋ ํํ๋ก ์ํ๋์๋ค๊ณ ํ๋ค.
[ ๋ค๋ฅธ ์์ ๋คํธ์ํฌ ์๋น์ค ์ํคํ ์ฒ ]
์ด์ ๋๋ก ์๊ฐํ๊ณ ๋๋, MySQL์ ์ฟผ๋ฆฌ ์ฑ๋ฅ ๊ฐ์ ์์ ๋ง์ผ๋ก๋ ๋ ์ ์๋ ๋ฌธ์ ๊ฐ ์๋๋ผ๊ณ ์๊ฐ์ด ๋ค์๊ณ , ๋ค๋ฅธ ์์ ํ ๋คํธ์ํฌ ์๋น์ค๋ค์์๋ ์ด๋ค ์ํคํ ์ฒ๋ฅผ ์ฌ์ฉํ๊ณ ์๋์ง ์กฐ์ฌํ๊ธฐ ์์ํ๋ค.
ํฌ์คํ ์ ์ก, ์ฆ ํฌ์์(fanout)์ ์ด๋ค ์ฌ์ฉ์์ ์ ํฌ์คํ ์ ๊ทธ ์ฌ์ฉ์์ ์น๊ตฌ ๊ด๊ณ์ ์๋ ๋ชจ๋ ์ฌ์ฉ์์๊ฒ ์ ๋ฌํ๋ ๊ณผ์ ์ด๋ค. ๋๋ฆฌ ์๋ ค์ง ์์ ํ ๋คํธ์ํฌ ์๋น์ค๋ค์ ํฌ์์ ๊ธฐ๋ฅ์๋ ํฌ๊ฒ ๋๊ฐ์ง๋ชจ๋ธ์ด ์๋ค. ํ๋๋ ์ฐ๊ธฐ ์์ ์ ํฌ์์ํ๋ ๋ชจ๋ธ(fanout-on-write, ๋๋ push ๋ชจ๋ธ)์ด๊ณ , ๋ค๋ฅธ ํ๋๋ ์ฝ๊ธฐ ์์ ์ ํฌ์์ ํ๋ ๋ชจ๋ธ(fanout-on-read, ๋๋ pull ๋ชจ๋ธ)์ด๋ค. fanout-on-write๋ชจ๋ธ์ ๋ํ ์๋น์ค๋ ํธ์ํฐ๊ฐ ์๊ณ , fanout-on-read ๋ชจ๋ธ์ ๋ํ ์๋น์ค๋ก๋ ํ์ด์ค๋ถ์ด ์๋ค. ๊ฐ๊ฐ์ ๋ชจ๋ธ๋ค์ ๋ํด์ ๊ฐ๋ตํ๊ฒ ์ดํด๋ณด๊ณ , ํธ์ํฐ์ ํ์ด์ค๋ถ์ด ์ ๊ทธ ๋ชจ๋ธ๋ค์ ์ ์ ํ์์ผ๋ฉฐ, ์ ํํ ๋ชจ๋ธ๋ค์ ํ๊ณ์ ์ ๋๊ธฐ๊ธฐ์ํ์ฌ ์ด๋ค ๋ ธ๋ ฅ๋ค์ ํ๋์ง ์์๋ณด๊ฒ ๋ค.
* Push ๋ชจ๋ธ
: ์๋ก์ด ํฌ์คํ
์ ๊ธฐ๋กํ๋ ์์ ์ ๋ด์คํผ๋๋ฅผ ๊ฐฑ์ ํ๊ฒ ๋๋ค. ๋ค์ ๋งํด, ํฌ์คํ
์ด ์๋ฃ๋๋ฉด ๋ฐ๋ก ํด๋น ์ฌ์ฉ์์ ์บ์์ ํด๋น ํฌ์คํ
์ ๊ธฐ๋กํ๋ ๊ฒ์ด๋ค.
: ์ ํฌ์คํ ์ด ๊ธฐ๋ก๋๋ ์๊ฐ์ ๋ด์ค ํผ๋๊ฐ ๊ฐฑ์ ๋จ์ผ๋ก(on-demand๊ฐ ์๋ pre-computed), ๋ด์คํผ๋๋ฅผ ์ฝ๋๋ฐ ๋๋ ์๊ฐ์ด ์งง์์ง๋ค๋ ์ฅ์ ์ด ์๋ค. ํ์ง๋ง ์๋น์ค๋ฅผ ์ ์ฌ์ฉํ์ง ์๋ ๋นํ์ฑํ ์ ์ ์ ๋ด์ค ํผ๋๋ ๊ฐฑ์ ํด์ผํ๋ฏ๋ก ์ปดํจํ ์์์ด ๋ญ๋น๋ ์ ์๋ค๋ ๋ฌธ์ ์ ์ด ์๋ค. ๋ํ ํ๋ก์๊ฐ ๋ง์ ์ฌ์ฉ์์ ๊ฒฝ์ฐ, ์น๊ตฌ ๋ชฉ๋ก์ ๊ฐ์ ธ๊ณ ์ค๊ณ ๊ทธ ๋ชฉ๋ก์ ์๋ ์ฌ์ฉ์ ๋ชจ๋์ ๋ด์คํผ๋๋ฅผ ๊ฐ์ ํ๋ ๋ฐ ๋ง์ ์๊ฐ์ด ์์๋ ์ ์๋ค. ํํ hot-key, hot-spot ๋ฌธ์ , ์ ๋ช ์ธ ๋ฌธ์ , ์ ์คํด ๋น๋ฒ ๋ฌธ์ ๋ฑ๋ฑ...์ด๋ผ๊ณ ๋ถ๋ฅด๋ ๋ฌธ์ ์ด๋ค.
* Pull ๋ชจ๋ธ
: ํผ๋๋ฅผ ์ฝ์ด์ผํ๋ ์์ ์ ๋ด์ค ํผ๋๋ฅผ ๊ฐฑ์ ํ๋ ์์ฒญ ๊ธฐ๋ฐ(on-demand)๋ชจ๋ธ์ด๋ค. ์ฌ์ฉ์๊ฐ ๋ณธ์ธ์ ํผ๋๋ฅผ ๋ก๋ฉํ๋ ์์ ์ ์๋ก์ด ํฌ์คํธ๋ฅผ ๊ฐ์ ธ์ค๊ฒ ๋๋ค.
: ๋นํ์ฑํ๋ ์ฌ์ฉ์์ ๋ํด ์ด๋ ํ ์ปดํจํ ์์๋ ์๋ชจํ์ง ์์๋ ๋๋ค๋ ์ฅ์ ์ด ์๋ค. ๋ํ ๋ฐ์ดํฐ๋ฅผ ์น๊ตฌ ๊ฐ๊ฐ์ ํธ์ํ๋ ์์ ์ด ํ์ ์์ผ๋ฏ๋ก ํซํค๋ฌธ์ ๋ ์๊ธฐ์ง ์๋๋ค. ํ์ง๋ง, ๋ด์คํผ๋๋ฅผ ์ฝ๋๋ฐ ๋ง์ ์๊ฐ์ด ์์๋ ์ ์๋ค๋ ๋จ์ ์ด ์กด์ฌํ๋ค.
[ ํ์ด์ค๋ถ : Pull ๋ชจ๋ธ ]
ํ์ด์ค๋ถ์ ์์ ๊ทธ๋ํ๋ฅผ push ๋ณด๋ค๋ ์ต๋ํ pull ํ๋ ๋ฐฉ์์ ์ ํํด์๋ค. ์ด๋ฌํ ๊ตฌํ ์ ๋ต์ DB์ ๋ง์ ์ฝ๊ธฐ๋ฅผ ์๊ตฌํ๊ฒ๋๋ค. ์ด๋๋ฌธ์ ํ์ด์ค๋ถ์ ์ฃผ์ปค๋ฒ๊ทธ๊ฐ ์ด๊ธฐ ํ์ด์ค๋ถ์ ๋ง๋ค๋ 2005๋ ๋ถํฐ memcache๋ฅผ ์ฌ์ฉํด์๋ค. ํ์ง๋ง, ํ์ด์ค๋ถ ํผ๋์ ์๊ตฌ์ฌํญ์ด ๋ณต์กํด์ง์ ๋ฐ๋ผ์ TAO(The Associations and Objects)๋ฅผ ๋์ ํ๊ฒ ๋์๋ค. TAO๋ ๊ทธ๋ํ ์๋ฃ๊ตฌ์กฐ์ write-through ๋ถ์ฐ์บ์๋ค. TAO์ ํค์๋๋ฅผ ํ๋์ฉ ์ด์ผ๊ธฐํด๋ณด๋ฉด์ ์ข ๋ ์ดํด๋ณด๊ฒ ๋ค.
- ๊ทธ๋ํ ์๋ฃ๊ตฌ์กฐ
ํ์ด์ค๋ถ์ ํผ๋๋ฅผ ๋ณด๋ฉด ์์ ์ด ํ๋ก์ฐํ ์ฌ๋์ ๊ธ ๋ฟ๋ง์๋๋ผ, ๋ด๊ฐ ํ๋ก์ฐํ ์ฌ๋์ด ์ข์์๋ฅผ ๋๋ฅธ ๊ธ, ๋ด๊ฐ ํ๋ก์ฐํ ์ฌ๋์ด ๋๋ฌ๊ฐ์๋ ์ฅ์ ๋ฑ์ผ๋ก ์ด๋ฃจ์ด์ ธ์๋ ๊ฒ์ ์ ์ ์๋ค. ์ข์์, ํ๋ก์ฐ, ๋๊ธ, ๊ณต์ , ์ฅ์ ์ฒดํฌ์ธ, ๋ฉ์ ๋ฑ๋ฑ ๋ค์ํ ์ ๋ณด๋ก ์ฝํ์ ธ์๋ค๋ ๋ป์ด๋ค.
“์จ๋ฆฌ์ค๊ฐ Golden Gate Bridge์ ๊ฐ์ ์น๊ตฌ์ธ bob์ ํ๊ทธํ๋ค, Golden Gate Bridge์ ๊ฐ ๊ธ์ bob์ ์น๊ตฌ์ธ Cathy๊ฐ ๋๊ธ์ ๋จ๊ฒผ๊ณ , ๊ทธ ๋๊ธ์ Cathy์ ์น๊ตฌ์ธ David๊ฐ ์ข์์๋ฅผ ๋๋ ๋ค.” ์ ๊ทธ๋ฆผ์ด ํํํ๋ ๋ฌธ์ฅ์ด๋ค. ์ด ๋ฌธ์ฅ์ ๋ง์ฝ์ ๋ด๊ฐ ๊ฐ์ฅ ์ฒ์์ ๋งํ์๋ OR ์ ์ฌ์ฉํ์๋ค๋ฉด, ํผ๋๋ฅผ ๊ตฌ์ฑํ๊ธฐ ์ํด์ ์๋ง์ ํ ์ด๋ธ๊ณผ ์บ์๋ค์ ํค์ง๊ณ ๋ค๋ ์ด์ผํ ๊ฒ์ด๋ค. “์ด๋ป๊ฒ ํ๋ฉด ์ต์ํ์ ๊ตฌ์กฐ๋ก ์ต๋ํ์ ํํ๋ ฅ์ ๊ฐ์ง๋ฉฐ ํผ๋ ์ ๋ณด๋ฅผ ๋น ๋ฅด๊ฒ ์ฝ์ ์ ์์๊น?”์ ๋ํ ๊ณ ๋ฏผ์ ๋ต์ผ๋ก ํ์ด์ค๋ถ์ ๊ทธ๋ํ ์๋ฃ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ์๋ค.
- ์ฑ๊ฒฉ์ด ๋ค๋ฅธ ๋๊ฐ์ DB(Memcache, MySQL) ์ ์ง์ ๋ํ ์ด๋ ค์
TAO ์ด์ ์๋ ํ์ด์ค๋ถ์ ์น์๋ฒ๊ฐ MySQL์ ์ง์ ์ ๊ทผํ์ฌ ์์ ๊ทธ๋ํ๋ฅผ ์ฝ๊ฑฐ๋ ์์ฑํ์ผ๋ฉฐ, memcahe๋ฅผ lookaside ์บ์๋ก ์ฌ์ฉํ๋ค. memcache๋ ํค-๊ฐ ๋ฐ์ดํฐ ๋ชจ๋ธ์ด ์๋ ๋ฒ์ฉ ๋คํธ์ํฌ ์ธ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ ์ ์ฅ์๋ค. ์บ์ ๋๋ฝ์, ์๋์ผ๋ก ์ฑ์ฐ๊ฑฐ๋ ์บ์ ์ผ๊ด์ฑ์ ์ ์งํด์ฃผ์ง๋ ์์๋ค. ๋๋ฌธ์ ์์ง๋์ด๋ค์ MySQL๊ณผ memcache ๋ผ๋ ๋๊ฐ์ ๋ฐ์ดํฐ ์ ์ฅ์์, ์๋ก ๋ค๋ฅธ ๋ฐ์ดํฐ ๋ชจ๋ธ๋ก ์์ ์ ํ์ด์ผํ๋ค. Memcahce-MySQL ์กฐํฉ์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ ์ํด์๋ ์์คํ ๋ด๋ถ์ ๋ํ ์๋นํ ์ง์์ด ํ์ํ๊ณ , ์ด๋ก ์ธํ ๋ฒ๊ทธ์ ์ฑ๋ฅ๋ฌธ์ ๋ก ์ด์ด์ง๋ ์ค์๊ฐ ์์๋ค. ๋ํ ์ ํ์ ์๊ตฌ์ฌํญ์ด ๋ณํจ์ ๋ฐ๋ผ ํ ์ด๋ธ ์คํค๋ง๋ฅผ ๋ณ๊ฒฝํ๋ ค๋ฉด ๊ฐ ๋ฐ์ดํฐ ๋ฒ ์ด์ค ์ด์์๊ฐ์ ์กฐ์ ์ด ํ์ํ๋ค. TAO๋ ์ด๋ฌํ ์์ ๋ค์ ์ถ์ํํ์ฌ lookaside ์บ์ ์ํคํ ์ฒ์ ๊ทผ๋ณธ์ ์ธ ๋จ์ ์ ํผํ ์ ์์๋ค. TAO๋ persistence DB๋ก MySQL์ ๊ณ์ ์ฌ์ฉํ์ง๋ง, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ์ ๊ทผ์ ์ค์ฌํ๊ณ ์์ฒด ๊ทธ๋ํ ์ธ์ ์บ์๋ฅผ ์ฌ์ฉํ๋ค.
์บ์์ ์ต์ข ์ผ๊ด์ฑ ์ ์ง๋ฅผ ์ํ leader-follower ์บ์ ์ํคํ ์ฒ๋ ํฅ๋ฏธ๋กญ๊ฒ ์ฝ์๋๋ฐ, ์ด๋ Meta ๊ธฐ์ ๋ธ๋ก๊ทธ[8], ํน์ ๋ ผ๋ฌธ์ 4 Architecture๋ก ๊ฐ๋ฉด ๋ ์์ธํ๊ฒ ์ ์ ์๋ค.[9]
[ ํธ์ํฐ : Push ๋ชจ๋ธ ]
ํ์ด์ค๋ถ์ ๊ฒ์ํ ๊ตฌ์กฐ์์๋ถํฐ ์์ํด์์๋ค. ๊ฒ์ํ์ ํํฐ ๊ฒ์์ด๋ผ๋ ๊ธฐ๋ฅ์ฒ๋ผ, ํผ๋๋ฅผ ๊ตฌ์ฑํด๊ฐ๋ค. Pull ๋ชจ๋ธ์ ์ฌ์ฉํ๊ณ , ๋ ๋น ๋ฅด๊ฒ ์กฐํ๊ฐ ๊ฐ๋ฅํ๋๋ก ์บ์๋ฅผ ์ ๊ทน์ ์ผ๋ก ์ฌ์ฉํ๋ค. ์ ๊ทธ๋ฆผ์์์ ํธ์ํฐ ์๊ฐ๋ฅผ ๋ณด๋ฉด, friend with communicate, exchange of quick frequent answer ์ด๋ผ๋ ๋ฌธ์ฅ์ ๋ณผ ์ ์๋ค. ์ ์ด์ ํธ์ํฐ๋ผ๋ ์๋น์ค๋ ๋ฉ์์ง ์ ๋ฌ์ด๋ผ๋ ๊ด์ ์์ ์์๋ ์๋น์ค๋ค. ํธ์ํฐ์ ํธ๋ ์ด๋ ๋งํฌ๋ก ์๋ ค์ง 140์ ์ ํ์ SMS ๊ธ์์๋ก ๋ถํฐ ์์๋์๋ค. ์ด์ฒ๋ผ SMS, ์ด๋ฉ์ผ ์๋น์ค์ ํก์ฌํ๊ฒ ์์ํ ํธ์ํฐ๋ ์ํคํ ์ฒ์๋ ์ด๋ฌํ ํน์ง๋ค์ ๋ด๊ณ ์๋ค. ๋์ ๋ฉ์์ง๋ฅผ ์์ ํ๋ ์ฌ๋๋ค์ ๋๋ฅผ ํ๋ก์ฐํ๋ ์ฌ๋๋ค์ด๋ฉฐ, ๊ฒฐ๊ตญ ๋ด๊ฐ ๋ฉ์์ง์ ์ฌ๋ฆฐ๋ค๋ ๊ฒ์ ๋๋ฅผ ํ๋ก์ฐํ๋ ์ฌ๋๋ค์ ๋ฐ๋ ๋ฉ์์งํจ์ผ๋ก ์์ ๋์ด์ผ ํ๋ค๋ ๊ฒ์ด๋ค. ์ด๋ฉ์ผ์ ๊ฒฝ์ฐ์๋ ์ ์ฒด ๋ฌธ์๋ฅผ ๋ฐฐ๋ฌํ์ง๋ง, ํธ์ํฐ์ ๊ฒฝ์ฐ์๋ ์๋ณธ๋ฉ์์ง๋ ํ๋๋ง ๋๊ณ , ํ๋ก์๋ค์ ํ์๋ผ์ธ์๋ ์ฐธ์กฐํค๋ง ์ ์ฅ์ํค๋ ๋ฐฉ์์ ์ฌ์ฉํ๋ค.
์ฐ๊ธฐ ์์ฒญ์ ๋นํด ์ฝ๊ธฐ ์์ฒญ์ด ๋ง์ ์๋น์ค๋ผ๋ฉด, ์ฐจ๋ผ๋ฆฌ ์ฝ๊ธฐ์ ๋ถ๋ด์ ์ฃผ๋ ํ์ด์ค๋ถ์ Pull ๋ชจ๋ธ๋ณด๋ค๋ ํธ์ํฐ์ Push ๋ชจ๋ธ์ด ์ข์ ์ ํ์ผ ์ ์๋ค. ํ์ง๋ง ์ด ๋ํ ๊ฝค ๋์ ๋น์ฉ์ด ๋ค ์ ์๋ค. ๋ด๊ฐ ํ๋ก์ฐํ๊ณ ์๋ ๋๊ตฐ๊ฐ๊ฐ ํธ์์ ์ธ ๋๋ง๋ค ๋ด ํ์๋ผ์ธ์ ํธ์์ ์ฐธ์กฐ ํค๊ฐ ๋ฐฐ๋ฌ๋๋ค. ์ ์คํด ๋น๋ฒ๋ฅผ ์๋ก ๋ค์ด ์๊ฐํด๋ณด๋ฉด, ์ ์คํด ๋น๋ฒ๋ ํ์ฌ 1.1์ต ํ๋ก์๋ฅผ ๊ฐ์ง๊ณ ์๋ค. 1์ต๋ช ์ค์๋ ์ฌ์ค ํธ์ํฐ๋ฅผ ๋ฐฉ๋ฌธํ์ง ํ๋ฌ์ด ๋์ ์ดํ์ ์ ๋ค๋ ๋ง์ด ํฌํจ๋์ด์์ ๊ฒ์ด๋ค. ํ์ง๋ง ์ด ๋ชจ๋ ์ฌ๋๋ค์๊ฒ ํธ์์ ์ฐธ์กฐํค๋ฅผ ์ ์กํด์ผ๋ง ํ๋ค. ๋๋ต์ ์ผ๋ก ๊ณ์ฐ์ ํด๋ณด๋ฉด 8๋ฐ์ดํธ(์ฐธ์กฐ ํค ํฌ๊ธฐ) x 1์ต = 800MB๋ ๋๋ค. ์ด๋ฐ ์ธํ๋ฃจ์ธ์๋ค์ด ํธ์์ ์์ฑํ๋ ์๊ฐ์ ์์ฒญ๋ ์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํด์ผ ํ๋๋ฐ, DB๋ก ์ด๋ฐ ํธ๋ํฝ์ ์ค์๊ฐ์ผ๋ก ๋ฐ์๋ด๋ ๊ฒ์ ์ด๋ ต๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์์ ํธ์ ์์ ํจ, ์ฆ ํ์๋ผ์ธ์ Redis ํด๋ฌ์คํฐ๋ก ๊ตฌ์ฑํ๋ฉฐ[10] ๊ฒฐ๊ตญ์๋ MySQL๋ก ์ ์ฅํ๊ณ , Gizzard( twitter sharding and replication framework on top of MySQL)๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค๊ณ ํ๋ค.[11]
Pull(fanout-on-read) ๋ชจ๋ธ์ ์ฌ์ฉ์๊ฐ ํผ๋๋ฅผ ์กฐํํ ๋ ํฐ ์ฐ์ฐ์ ํ์๋ก ํ๊ณ , Push(fanout-on-write) ๋ชจ๋ธ์ ์ฌ์ฉ์๊ฐ ๊ธ์ ๊ฒ์ํ ๋ ํฐ ์ฐ์ฐ์ ํ์๋ก ํ๋ค. ๋๋ฌธ์ Pull ๋ชจ๋ธ์ ์ ํํ๋ค๋ฉด "์ด๋ป๊ฒ ํ๋ฉด ์กฐํ์๊ฐ์ ์ค์ผ ์ ์๋๋?"๊ฐ ๊ด๊ฑด์ด๊ณ , ํ์ด์ค๋ถ์ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ์ํด์ ์กฐํ๋ฅผ ๋ ํจ๊ณผ์ ์ผ๋กํ ์์๋ TAO๋ฅผ ๋ง๋ค์๋ค. ์ด์ ๋ฐํด Push(fanout-on-write) ๋ชจ๋ธ์ "์ด ๋ง์ ๋ฐ์ดํฐ๋ค์ ์ด๋ป๊ฒ ์ ์ฅ์ํฌ ๊ฒ์ธ๊ฐ, ์ด๋ป๊ฒํ๋ฉด ๋นจ๋ฆฌ ์ ์ฅ์ํฌ๊ฒ์ธ๊ฐ?"๊ฐ ๊ด๊ฑด์ด๊ณ , ํธ์ํฐ๋ฅผ ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ DB์ ์ต์ข
์ผ๊ด์ฑ๊ณผ MySQL ์ค๋ฉ์ ์ํ Gizzard๋ฅผ ๋์
ํ๋ค. ํ๋๋ฅผ ๋ฐ๋์ ์ ํํ๊ธฐ ๋ณด๋ค๋ pull๊ณผ push๋ฅผ ํผํฉ์ผ๋ก ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ๋ ์์ ์ ์๋ค. ๋๋ถ๋ถ์ ์ฌ์ฉ์์ ๋ํด์๋ Push ๋ชจ๋ธ์ ์ฌ์ฉํ๊ณ , ํ๋ก์๊ฐ ์์ฃผ ๋ง์ ์ฌ์ฉ์์ ๊ฒฝ์ฐ์๋ ํ๋ก์ด๋ก ํ์ฌ๊ธ ํด๋น ์ฌ์ฉ์์ ํฌ์คํ
์ ํ์๋ก ํ ๋ ๊ฐ์ ธ๊ฐ๋๋ก ํ๋ Pull ๋ชจ๋ธ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด ๋ ์ ์์ ๊ฒ์ด๋ค. ์ด์ฒ๋ผ pull๊ณผ push์ ํผํฉ์ผ๋ก ํด๊ฒฐํ ์ ์๋ค๋ ๋
ผ๋ฌธ์ด Yahoo์์ ๋์๋ค.[12] ์ด๋ค ๋ชจ๋ธ์ด ๋ ์ฐ์ํ๊ธฐ ๋ณด๋ค๋ ์๋น์ค ํน์ฑ๊ณผ ํ์ฌ ๊ฐ๋ฐ ์ํฉ์ ๋ง๊ฒ ์ ํํ๋ฉด ๊ทธ๊ฒ์ด ๊ฐ์ฅ ์ต์ ์ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ์๊ฐํ๋ค.
Ref)
[1] https://www.instafollowers.co/blog/limits-on-instagram
[2] https://mention.com/en/reports/instagram/followers/
[3] https://help.twitter.com/en/rules-and-policies/twitter-limits
[4] http://small-dbtalk.blogspot.com/2016/02/
[5] https://jobc.tistory.com/216
[7] https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html
[8] https://engineering.fb.com/2013/06/25/core-data/tao-the-power-of-the-graph/
[9] https://www.usenix.org/system/files/conference/atc13/atc13-bronson.pdf
[10] https://blog.twitter.com/engineering/en_us/a/2012/mysql-at-twitter
[11] https://github.com/twitter-archive/gizzard
[12] https://hyse.org/pdf/distsyspapers/sigmod278-silberstein.pdf
'๋๋ฒ๊น ์ค ๐ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
2๋ ์ฐจ ๊ฐ๋ฐ์์ 2022๋ ํ๊ณ (1) | 2023.01.02 |
---|---|
์ ์ฐ๊ณ ์๋ MySQL ๋์ MongoDB๋ฅผ ๋์ ํ ์ฐ.ssul (0) | 2022.11.05 |
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ๊ทธ๋์ ์ ์ธ๊น? (0) | 2022.10.25 |
[์ฑ ๋ฆฌ๋ทฐ] ์ค๋๋ถํฐ IT๋ฅผ ์์ํฉ๋๋ค (0) | 2022.08.21 |
0.2๋ ์ฐจ ๋ฐ๋๋ฐ๋ํ ์ ์ ๊ฐ๋ฐ์์ 2021 ํ๊ณ (2) | 2021.12.27 |