๊ฒ์์ด ์๋์์ฑ
(autocomplete, typehead, search-as-you-type, incremental search)์ ๊ดํ ์ด์ผ๊ธฐ.
์๋์์ฑ ๊ฒ์์ด๋ ์ถฉ๋ถํ ๋นจ๋ฆฌ ํ์
๋์ด์ผ ํจ100๋ฐ๋ฆฌ์ด
์ด๋ด์ฌ์ผ ํ๋ค์์ ๋ชจ๋ธ(ranking model)
์ ์ํด ์ ๋ ฌ๋์ด ์์ด์ผ ํ๋ค.๋ง์ ํธ๋ํฝ์ ๊ฐ๋น
ํ ์ ์๋๋ก ํ์ฅ ๊ฐ๋ฅ
ํด์ผ ํ๋ค.์ง์ ๊ฐ๋ฅ
ํด์ผ ํจ์ผ๊ฐ ๋ฅ๋ ์ฌ์ฉ์(DAU)
๋ ์ฝ 1000๋ง๋ช
ํ ์ฌ์ฉ์ ๋น ๋งค์ผ 10๊ฑด
์ ๊ฒ์์ ์ํํ๋ค๊ณ ๊ฐ์ 20๋ฐ์ดํธ
์ ๋ฐ์ดํฐ๋ฅผ ์
๋ ฅ๊ฒ์์ฐฝ์ ๊ธ์๋ฅผ ์
๋ ฅํ ๋๋ง๋ค
ํด๋ผ์ด์ธํธ๋ ๊ฒ์์ด ์๋์์ฑ ๋ฐฑ์๋์ ์์ฒญ
์ ์ ์ก์ด๋น 24,000๊ฑด์ ์ง์(QPS)
๊ฐ ๋ฐ์๊ฐ์
. ๋ฐ๋ผ์ ๋งค์ผ 0.4GB ์ ์ ๊ท ๋ฐ์ดํฐ
๊ฐ ์์คํ
์ ์ถ๊ฐ๋๋ค๋ ์๋ฏธ๋ฐ์ดํฐ ์์ง ์๋น์ค(data gathering service)
์ฌ์ฉ์๊ฐ ์
๋ ฅํ ์ง์๋ฅผ ์ค์๊ฐ์ผ๋ก ์์งํ๋ ์์คํ
๋ฐ์ดํฐ๊ฐ ๋ง์ ์ ํ๋ฆฌ์ผ์ด์
์ ์ค์๊ฐ ์์คํ
์ ๊ทธ๋ค์ง ๋ฐ๋์งํ์ง ์์ง๋ง ์ค๊ณ์์ ๋ง๋๋ ์ถ๋ฐ์ ์ผ๋ก๋ ๊ด์ฐฎ์
์ง์ ์๋น์ค(query service)
์ฃผ์ด์ง ์ง์์ ๋ค์ฏ ๊ฐ์ ์ธ๊ธฐ ๊ฒ์์ด๋ฅผ ์ ๋ ฌํด ๋ด๋๋ ์๋น์ค
์ง์๋ฌธ๊ณผ ์ฌ์ฉ๋น๋๋ฅผ ์ ์ฅํ๋ ๋น๋ ํ
์ด๋ธ(frequency table)
์ด ์๋ค๊ณ ๊ฐ์
์ฒ์์ ํ
์ด๋ธ์ ๋น์ด์๊ณ , ์ฌ์ฉ์๊ฐ ๊ฒ์ํ๋ฉด ์์ฐจ์ ์ผ๋ก ๋น๋ ์์ ์นด์ดํธ
๋ฅผ ๋ฃ์
SELECT * FROM frequency_table
WHERE query Like 'prefix%'
ORDER BY frequency DESC
LIMIT 5
๋ฐ์ดํฐ ์์ด ์ ์ ๋์ ๋์์ง ์์ ์ค๊ณ์. ๋ฐ์ดํฐ๊ฐ ์์ฃผ ๋ง์์ง๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๋ณ๋ชฉ์ด ๋ ๊ฐ๋ฅ์ฑ์ด ์๋ค.
ํธ๋ผ์ด(trie) ์๋ฃ๊ตฌ์กฐ
, ๋ฐ์ดํฐ ์์ง ์๋น์ค
, ์ง์ ์๋น์ค
, ๊ท๋ชจ ํ์ฅ์ด ๊ฐ๋ฅํ ์ ์ฅ์
, ํธ๋ผ์ด ์ฐ์ฐ
ํธ๋ผ์ด
๋ ๋ฌธ์์ด๋ค์ ๊ฐ๋ตํ๊ฒ ์ ์ฅํ ์ ์๋ ์๋ฃ๊ตฌ์กฐ
์ด ์๊ณ ๋ฆฌ์ฆ์ ์ง๊ด์ ์ด์ง๋ง ์ต์
์ ๊ฒฝ์ฐ k๊ฐ ๊ฒฐ๊ณผ๋ฅผ ์ป์ผ๋ ค๊ณ ์ ์ฒด ํธ๋ผ์ด๋ฅผ ๋ค ๊ฒ์ํด์ผ ํ๋ ์ผ์ด ๋ฐ์ํ ์๋ ์๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ์ผ๋ก๋ 1. ์ ๋์ด์ ์ต๋ ๊ธธ์ด๋ฅผ ์ ํ
๊ณผ 2. ๊ฐ ๋
ธ๋์ ์ธ๊ธฐ ๊ฒ์์ด๋ฅผ ์บ์
ํ๋ ๋ฐฉ๋ฒ์ด ์๋ค.
์ฌ์ฉ์๊ฐ ๊ฒ์์ฐฝ์ ๊ธด ๊ฒ์์ด๋ฅผ ์
๋ ฅํ๋ ์ผ์ ๊ฑฐ์ ๋๋ฌผ๊ธฐ์ ๊ฒ์์ด์ ์ต๋ ๊ธธ์ด
๋ฅผ ์ ํํด๋ ๋๋ค.
๊ฐ ๋
ธ๋์ ์ง์์ด๋ฅผ ์ ์ฅํ ๊ณต๊ฐ์ด ๋ง์ด ํ์ํ๊ฒ ๋๋ค๋ ๋จ์ ๋ ์์ง๋ง..
๋น ๋ฅธ ์๋ต์๋๊ฐ ์์ฃผ ์ค์ํ ๋์๋ ์ด ์ ๋ ์ ์ฅ๊ณต๊ฐ์ ํฌ์ํ ๋งํ ๊ฐ์น๊ฐ ์ถฉ๋ถํจ
ํ์ดํ ๋ด์ฉ์ด ๋ณ๊ฒฝ๋ ๋๋ง๋ค ์ค์๊ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์์
ํ๊ฒ ๋๋ฉด
1. ๋งค์ผ ์์ฒ๋ง ๊ฑด์ ์ง์๊ฐ ์
๋ ฅ๋ ํ
๋ฐ ๊ทธ ๋๋ง๋ค ํธ๋ผ์ด๋ฅผ ๊ฐฑ์ ํ๋ฉด ์ง์ ์๋น์ค๋ ์ฌ๊ฐํ๊ฒ ๋๋ ค์ง ๊ฒ
2. ์ผ๋จ ํธ๋ผ์ด๊ฐ ๋ง๋ค์ด์ง๊ณ ๋๋ฉด ์ธ๊ธฐ ๊ฒ์์ด๋ ๊ทธ๋ค์ง ์์ฃผ ๋ฐ๋์ง ์์ ๊ฒ. ๊ทธ๋์ ํธ๋ผ์ด๋ ๊ทธ๋ ๊ฒ ์์ฃผ ๊ฐฑ์ ํ ํ์๊ฐ ์์
์ ์ด์ ๋ก ๋น์ค์ฉ์
์ด๊ฒ ๋๋ค.
๊ฒ์์ฐฝ์ ์
๋ ฅ๋ ์ง์์ ๊ดํ ์๋ณธ ๋ฐ์ดํฐ๊ฐ ๋ณด๊ด๋จ.
์๋ก์ด ๋ฐ์ดํฐ๊ฐ ์ถ๊ฐ
๋ ๋ฟ ์์ ์ ์ด๋ฃจ์ด์ง์ง ์์ผ๋ฉฐ ๋ก๊ทธ ๋ฐ์ดํฐ์ ์ธ๋ฑ์ค๋ฅผ ๊ฑธ์ง ์์.
๋ฐ์ดํฐ ๋ถ์ ์๋น์ค๋ก ๋ถํฐ ๋์ค๋ ๋ก๊ทธ๋ ์๋ ๋ง๊ณ ๋ฐ์ดํฐ ํ์์ด ์ ๊ฐ๊ฐ์ธ ๊ฒฝ์ฐ๊ฐ ๋๋ถ๋ถ
-- ๋ฐ๋ผ์ ์ด ๋ฐ์ดํฐ๋ฅผ ์ ์ทจํฉ(aggregation)
ํ์ฌ ์์คํ
์ด ์ฝ๊ฒ ์๋นํ ์ ์๊ฒ ํด์ผ ํจ
๋ฐ์ดํฐ ์ทจํฉ์ ์ค์๊ฐ์ฑ
์ ๋ํ ์ฒดํฌ๊ฐ ์ค์
์ฃผ๊ธฐ์ ์ผ๋ก ๋น๋๊ธฐ์ ์์
(job)
์ ์คํํ๋ ์๋ฒ ์งํฉ
ํธ๋ผ์ด ์๋ฃ๊ตฌ์กฐ
๋ฅผ ๋ง๋ค๊ณ ํธ๋ผ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ
ํ๋ ์ญํ ์ ๋ด๋น
๋ถ์ฐ ์บ์ ์์คํ
์ผ๋ก ํธ๋ผ์ด ๋ฐ์ดํฐ ๋ฉ๋ชจ๋ฆฌ์ ์ ์งํ์ฌ ์ฝ๊ธฐ ์ฐ์ฐ ์ฑ๋ฅ์ ๋์ด๋ ์ญํ
๋งค์ฃผ ํธ๋ผ์ด DB์ ์ค๋
์ท์ ๋ ์ ๊ฐฑ์
์ง์์ฑ ์ ์ฅ์
ํธ๋ผ์ด DB๋ก ์ฌ์ฉํ ์ ์๋ ์ ํ์ง๋ก๋
๋ฌธ์์ ์ฅ์(document store)
: ์ฃผ๊ธฐ์ ์ผ๋ก ํธ๋ผ์ด๋ฅผ ์ง๋ ฌํํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ ๊ฐ๋ฅ. ๋ชฝ๊ณ ๋๋น(MongoDB)
๊ฐ์ ๋ฌธ์ ์ ์ฅ์๋ฅผ ํ์ฉํ๋ฉด ๋ฐ์ดํฐ ํธ๋ฆฌํ๊ฒ ์ ์ฅ ๊ฐ๋ฅํค-๊ฐ ์ ์ฅ์
: 1) ํธ๋ผ์ด์ ๋ณด๊ด๋ ๋ชจ๋ ์ ๋์ด๋ฅผ ํด์ ํ
์ด๋ธ ํค๋ก ๋ณํ 2) ๊ฐ ํธ๋ผ์ด ๋
ธ๋์ ๋ณด๊ด๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ํด์ ํ
์ด๋ธ ๊ฐ์ผ๋ก ๋ณํ๋ก๋๋ฐธ๋ฐ์
๋ก ์ ์ก๋ก๋๋ฐธ๋ฐ์
๋ ํด๋น ์ง์๋ฅผ API ์๋ฒ
๋ก ๋ณด๋API ์๋ฒ
๋ ํธ๋ผ์ด ์บ์์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ ํด๋น ์์ฒญ์ ๋ํ ์๋์์ฑ ๊ฒ์์ด ์ ์ ์๋ต์ ๊ตฌ์ฑํจ์บ์ ๋ฏธ์ค(CACHE MISS)
๋ ์บ์ ์๋ฒ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํ๊ฑฐ๋ ์บ์ ์๋ฒ์ ์ฅ์ ๊ฐ ์์ด๋ ๋ฐ์ํ ์ ์์์๊ฐํด ๋ณผ ๋งํ ์ต์ ํ ๋ฐฉ์
Ajax ์์ฒญ(request)
: ์์ฒญ์ ๋ณด๋ด๊ณ ๋ฐ๊ธฐ ์ํด ํ์ด์ง๋ฅผ ์๋ก๊ณ ์นจ ํ ํ์๊ฐ ์๋ค๋ ์ฅ์ ๋ธ๋ผ์ฐ์ ์บ์ฑ(browser caching)
: ์ ์๋ ๊ฒ์์ด๋ค์ ๋ธ๋ผ์ฐ์ ์บ์์ ๋ฃ์ด๋๋ฉด ํ์ ์ง์์ ๊ฒฐ๊ณผ๋ ํด๋น ์บ์์์ ๋ฐ๋ก ๊ฐ์ ธ๊ฐ ์ ์์. ๊ตฌ๊ธ ๊ฒ์ ์์ง
์ด ์ด๋ฌํ ์บ์ ๋งค์ปค๋์ฆ์ ์ฌ์ฉ.๋ฐ์ดํฐ ์ํ๋ง(data sampling)
: ๋๊ท๋ชจ ์์คํ
์ ๊ฒฝ์ฐ, ๋ชจ๋ ์ง์ ๊ฒฐ๊ณผ๋ฅผ ๋ก๊น
ํด ๋์ผ๋ฉด CPU ์์๊ณผ ์ ์ฅ๊ณต๊ฐ์ ๋ค๋ ์์งํ๊ฒ ๋จ. N๊ฐ์ ์์ฒญ ๊ฐ์ด๋ฐ 1๊ฐ๋ง ๋ก๊น
ํธ๋ผ์ด
๋ ๊ฒ์์ด ์๋์์ฑ ์์คํ
์ ํต์ฌ ์ปดํฌ๋ํธ
์์
์๋ฒ
๊ฐ ๋ด๋นํ๋ฉฐ, ๋ฐ์ดํฐ ๋ถ์ ์๋น์ค์ ๋ก๊ทธ
๋ DB๋ก๋ถํฐ ์ทจํฉ๋ ๋ฐ์ดํฐ
๋ฅผ ์ด์ฉ
ํธ๋ผ์ด ์บ์ ์์ ํํฐ ๊ณ์ธต(filter layer)
์ ๋๊ณ ๋ถ์ ์ ํ ์ง์์ด๊ฐ ๋ฐํ๋์ง ์๋๋ก ํ๋ ๊ฒ.
ํํฐ ๊ณ์ธต์ ๋๋ฉด ํํฐ ๊ท์น์ ๋ฐ๋ผ ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ์์ ๋กญ๊ฒ ๋ณ๊ฒฝํ ์ ์๋ค๋ ์ฅ์
DB์์ ํด๋น ๊ฒ์์ด๋ฅผ ๋ฌผ๋ฆฌ์ ์ผ๋ก ์ญ์ ํ๋ ๊ฒ์ ๋ค์ ๋ฒ ์
๋ฐ์ดํธ ์ฌ์ดํด์ ๋น๋๊ธฐ์
์ผ๋ก ์งํํ๋ฉด ๋จ.
ํธ๋ผ์ด์ ํฌ๊ธฐ๊ฐ ํ ์๋ฒ์ ๋ฃ๊ธฐ์ ๋๋ฌด ํฐ ๊ฒฝ์ฐ์ ๋์ํ ์ ์๋๋ก..
๊ฐ๋จํ๊ฒ ์ฒซ ๊ธ์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฉ(SHARDING)
ํ๋ ๋ฐฉ๋ฒ์ ์๊ฐํด๋ณผ ์ ์์
์์ด๋์ด
ํน์ ํ ๋๋ฉ์ธ ์ง์
์ด ํ์