์๊ฐ
โ๊ทธ ์๋ฆฌ์ ๋จธ๋ฌผ๋ ค๋ฉด ์ต๋ํ ๋นจ๋ฆฌ ๋ฌ๋ ค์ผ ํด์.
๊ทธ๋ฆฌ๊ณ ์ด๋๊ฐ์ ๊ฐ๋ ค๋ฉด ์ต์ํ ๋ ๋ฐฐ๋ ๋ ๋นจ๋ฆฌ ๋ฌ๋ ค์ผ ํด์!โ
(c) ์ด์ํ ๋๋ผ์ ์จ๋ฆฌ์ค
์ผ๋ง ์ ๊ฐ์๋ฅผ ํด๋ฌ๋ผ๊ณ ๋ถํ์ ๋ฐ์์ต๋๋ค. ๋ถ์๊ฐ ์ฐ๋ฆฌ ํ์ฌ๋ ๋ฐ์ดํฐ ๋ชจ๋ธ ์ค๊ณ ์ฃผ์ ์ ๋ํด ์ค๋ซ๋์(๋๋ก๋ ๋ช ๋
๋์) ํ๋ก์ ํธ์ ์ฐธ์ฌํ๊ธฐ ๋๋ฌธ์ IT ๊ธฐ์ ์ธ๊ณ์์ ์ฐ๋ฆฌ ์ฃผ๋ณ์์ ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง ๋์น๊ธฐ ๋๋ฌธ์
๋๋ค. ์ฐ๋ฆฌ ํ์ฌ์์๋(๊ทธ๋ฐ ์ผ์ด ์ผ์ด๋ฌ์ต๋๋ค) ๋ง์ ํ๋ก์ ํธ๊ฐ NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ์ง ์์ต๋๋ค(์ ์ด๋ ์ง๊ธ์). ๊ทธ๋์ ์ ๋ ๊ฐ์์์ HBase์ ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ณ๋๋ก ์ฃผ์๋ฅผ ๊ธฐ์ธ์ด๊ณ ์๋ฃ์ ํ๋ ์ ํ
์ด์
๋ฐฉํฅ์ ๊ทธ์ชฝ์ผ๋ก ๋ง์ถ๋ ค๊ณ ๋
ธ๋ ฅํ์ต๋๋ค. ํ ๋ฒ๋ ์ฌ์ฉํด ๋ณธ ์ ์ด ์๋ ์ฌ๋์ ํจ๊ณผ๊ฐ ์์์ต๋๋ค. ํนํ ๋ช ๋
์ ์ ์ฝ์ ์์ ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ๋ชจ๋ธ ์ค๊ณ์ ์ผ๋ถ ๊ธฐ๋ฅ์ ์ค๋ช
ํ์ต๋๋ค.
์ต๊ทผ์ ๋๋ "ํ ์ผ์ด ์์ด์"(๊ฒฉ๋ฆฌ ๊ธฐ๊ฐ์ด ๊ธด XNUMX์ ์ฃผ๋ง์ด ํนํ ๋์์ด ๋จ) ์ค์ค๋ก์๊ฒ ์ง๋ฌธํ์ต๋๋ค. ์ด๋ก ์ ๊ณ์ฐ์ด ์ค์ ์ ์ผ๋ง๋ ์ผ์นํ ๊น์? ์ฌ์ค ์ด ๊ธ์ ์์ด๋์ด๋ ์ด๋ ๊ฒ ํ์ํ๋ค. ๋ฉฐ์น ๋์ NoSQL์ ์ฌ์ฉํด ์จ ๊ฐ๋ฐ์๋ NoSQL์์ ์๋ก์ด ๊ฒ์ ๋ฐฐ์ฐ์ง ๋ชปํ ์๋ ์์ต๋๋ค(๋ฐ๋ผ์ ๊ธฐ์ฌ์ ์ ๋ฐ์ ์ฆ์ ๊ฑด๋๋ธ ์๋ ์์ต๋๋ค). ์ด ์๋๋ผ๋ฉด ๋ถ์๊ฐ์์ง NoSQL์ ๋ค๋ฃจ์ง ์์ ๋ถ๋ค์๊ฒ๋ HBase์ ๋ฐ์ดํฐ ๋ชจ๋ธ ์ค๊ณ ๊ธฐ๋ฅ์ ๋ํ ๊ธฐ๋ณธ์ ์ธ ์ดํด๋ฅผ ์ป๋ ๋ฐ ๋์์ด ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์์ ๋ถ์
์ ์๊ฐ์๋ NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ ์ ์คํ๊ฒ ์๊ฐํ๊ณ ์ฅ๋จ์ ์ ๋ฐ์ ธ๋ณผ ํ์๊ฐ ์์ต๋๋ค. ์ข ์ข ๋ฌธ์ ๋ ์ ํต์ ์ธ ๊ด๊ณํ DBMS๋ฅผ ์ฌ์ฉํ์ฌ ํด๊ฒฐ๋ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. ๋ฐ๋ผ์ ํน๋ณํ ์ด์ ์์ด๋ NoSQL์ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค. ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ๋ค๋ฉด ์ฌ๊ธฐ์์์ ์ค๊ณ ์ ๊ทผ ๋ฐฉ์์ด ๋ค์ ๋ค๋ฅด๋ค๋ ์ ์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค. ํนํ ์ด์ ์ ๊ด๊ณํ DBMS๋ง ๋ค๋ฃจ์๋ ์ฌ๋๋ค์๊ฒ๋ ๊ทธ ์ค ์ผ๋ถ๊ฐ ํน์ดํ ์ ์์ต๋๋ค(๋ด ๊ด์ฐฐ์ ๋ฐ๋ฅด๋ฉด). ๋ฐ๋ผ์ "๊ด๊ณํ" ์ธ๊ณ์์๋ ์ผ๋ฐ์ ์ผ๋ก ๋ฌธ์ ์์ญ ๋ชจ๋ธ๋ง๋ถํฐ ์์ํ๊ณ ํ์ํ ๊ฒฝ์ฐ ๋ชจ๋ธ์ ๋น์ ๊ทํํฉ๋๋ค. NoSQL์์๋ ์ฐ๋ฆฌ๋ ๋ฐ์ดํฐ ์์ ์ ๋ํด ์์๋๋ ์๋๋ฆฌ์ค๋ฅผ ์ฆ์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค. ์ฒ์์๋ ๋ฐ์ดํฐ๋ฅผ ๋น์ ๊ทํํฉ๋๋ค. ๋ํ ์๋์์ ์ค๋ช ํ ์ฌ๋ฌ ๊ฐ์ง ๋ค๋ฅธ ์ฐจ์ด์ ์ด ์์ต๋๋ค.
๊ณ์ํด์ ์ฐ๊ตฌํ ๋ค์๊ณผ ๊ฐ์ "ํฉ์ฑ" ๋ฌธ์ ๋ฅผ ๊ณ ๋ คํด ๋ณด๊ฒ ์ต๋๋ค.
์ผ๋ถ ์ถ์์ ์ธ ์์ ๋คํธ์ํฌ ์ฌ์ฉ์์ ์น๊ตฌ ๋ชฉ๋ก์ ๋ํ ์ ์ฅ ๊ตฌ์กฐ๋ฅผ ์ค๊ณํด์ผ ํฉ๋๋ค. ๋จ์ํํ๊ธฐ ์ํด ์ฐ๋ฆฌ๋ ๋ชจ๋ ์ฐ๊ฒฐ์ด (Linkedin์ด ์๋ Instagram์์์ ๊ฐ์ด) ๋ฐฉํฅ์ด ์ง์ ๋์ด ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ๊ตฌ์กฐ๋ฅผ ํตํด ๋ค์์ ํจ๊ณผ์ ์ผ๋ก ์ํํ ์ ์์ด์ผ ํฉ๋๋ค.
- ์ฌ์ฉ์ A๊ฐ ์ฌ์ฉ์ B๋ฅผ ์ฝ๋์ง ์ฌ๋ถ์ ๋ํ ์ง๋ฌธ์ ๋ตํ์ญ์์ค(์ฝ๊ธฐ ํจํด).
- ์ฌ์ฉ์ B์์ ์ฌ์ฉ์ A๋ฅผ ๊ตฌ๋ /ํํดํ๋ ๊ฒฝ์ฐ ์ฐ๊ฒฐ ์ถ๊ฐ/์ ๊ฑฐ ํ์ฉ(๋ฐ์ดํฐ ๋ณ๊ฒฝ ํ ํ๋ฆฟ)
๋ฌผ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ค์ํ ์ต์ ์ด ์์ต๋๋ค. ์ผ๋ฐ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฐ๋ฆฌ๋ ๋จ์ํ ๊ด๊ณ ํ ์ด๋ธ์ ๋ง๋ค๊ณ (์๋ฅผ ๋ค์ด ์ด "์น๊ตฌ"๋ฅผ ํฌํจํ๋ ๊ฐ์กฑ, ์ง์ฅ ๋ฑ์ ์ฌ์ฉ์ ๊ทธ๋ฃน์ ์ ์ฅํด์ผ ํ๋ ๊ฒฝ์ฐ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅ) ํ ์ด๋ธ์ ๋ง๋ค๊ณ ์ต์ ํํ ๊ฒ์ ๋๋ค. ์ก์ธ์ค ์๋๋ ์ธ๋ฑ์ค/ํํฐ์ ๋์ ์ถ๊ฐํฉ๋๋ค. ์๋ง๋ ์ต์ข ํ ์ด๋ธ์ ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ ๋๋ค.
USER_ID
์น๊ตฌ ์์ด๋
Vasya
ํํฐ
Vasya
ะะปั
์ดํ์์๋ ์ดํด๋ฅผ ๋๊ธฐ ์ํด ์์ด๋ ๋์ ์ด๋ฆ์ ํ๊ธฐํ๊ฒ ์ต๋๋ค.
HBase์ ๊ฒฝ์ฐ ๋ค์์ ์๊ณ ์์ต๋๋ค.
- Full Table Scan์ด ์๋ ํจ์จ์ ์ธ ๊ฒ์์ด ๊ฐ๋ฅ ํค๋ก๋ง ๋
์ ์ ์ผ๋ก
- ์ฌ์ค, ์ด๊ฒ์ด ๋ฐ๋ก ๋ง์ ์ฌ๋๋ค์๊ฒ ์น์ํ SQL ์ฟผ๋ฆฌ๋ฅผ ๊ทธ๋ฌํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์์ฑํ๋ ๊ฒ์ด ๋์ ์๊ฐ์ธ ์ด์ ์ ๋๋ค. ๋ฌผ๋ก ๊ธฐ์ ์ ์ผ๋ก๋ ๋์ผํ Impala์์ ์กฐ์ธ ๋ฐ ๊ธฐํ ๋ก์ง์ด ํฌํจ๋ SQL ์ฟผ๋ฆฌ๋ฅผ HBase๋ก ๋ณด๋ผ ์ ์์ง๋ง ์ผ๋ง๋ ํจ๊ณผ์ ์ผ๊น์?
๋ฐ๋ผ์ ์ฌ์ฉ์ ID๋ฅผ ํค๋ก ์ฌ์ฉํด์ผ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ "์น๊ตฌ ID๋ฅผ ์ด๋์ ์ด๋ป๊ฒ ์ ์ฅํด์ผ ํ ๊น์?"๋ผ๋ ์ฃผ์ ์ ๋ํ ์ฒซ ๋ฒ์งธ ์๊ฐ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ์ด์ฉ๋ฉด ์ด์ ์ ์ฅํ๋ ์์ด๋์ด์ผ ์๋ ์์ต๋๋ค. ๊ฐ์ฅ ๋ถ๋ช ํ๊ณ "์์งํ" ์ต์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ์ต์ 1(๊ธฐ๋ณธ๊ฐ)์ถ๊ฐ ์ฐธ์กฐ์ฉ):
RowKey
์ฐ์ฌ
Vasya
1: ํํธ์ผ
2: ์ฌ๋ฆฌ์ผ
3: ๋ค์ค
ํํฐ
1: ๋ง์ค
2: ๋ฐ์ค
์ฌ๊ธฐ์ ๊ฐ ๋ผ์ธ์ ํ ๋ช ์ ๋คํธ์ํฌ ์ฌ์ฉ์์ ํด๋นํฉ๋๋ค. ์ด์๋ ์ด๋ฆ์ด ์์ต๋๋ค: 1, 2, ... - ์น๊ตฌ ์์ ๋ฐ๋ผ ์น๊ตฌ์ ID๊ฐ ์ด์ ์ ์ฅ๋ฉ๋๋ค. ๊ฐ ํ์๋ ์๋ก ๋ค๋ฅธ ์ด ์๊ฐ ์๋ค๋ ์ ์ ์ ์ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ ๊ทธ๋ฆผ์ ์์์ ํ ํ์๋ 1๊ฐ์ ์ด(2, 3, 1)์ด ์๊ณ ๋ ๋ฒ์งธ ํ์๋ 2๊ฐ์ ์ด(XNUMX๊ณผ XNUMX)๋ง ์์ต๋๋ค. ์ฌ๊ธฐ์ ์ฐ๋ฆฌ๋ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋ ๋ ๊ฐ์ HBase ์์ฑ์ ์ฌ์ฉํ์ต๋๋ค.
- ์ด ๊ตฌ์ฑ์ ๋์ ์ผ๋ก ๋ณ๊ฒฝํ๋ ๊ธฐ๋ฅ(์น๊ตฌ ์ถ๊ฐ -> ์ด ์ถ๊ฐ, ์น๊ตฌ ์ ๊ฑฐ -> ์ด ์ญ์ )
- ํ๋ง๋ค ์ด ๊ตฌ์ฑ์ด ๋ค๋ฅผ ์ ์์ต๋๋ค.
์์ ์๊ตฌ ์ฌํญ์ ์ค์ํ๋์ง ๊ตฌ์กฐ๋ฅผ ํ์ธํด ๋ณด๊ฒ ์ต๋๋ค.
- ๋ฐ์ดํฐ ์ฝ๊ธฐ: Vasya๊ฐ Olya๋ฅผ ๊ตฌ๋ ํ๋์ง ํ์ธํ๋ ค๋ฉด ๋ค์์ ๋นผ์ผ ํฉ๋๋ค. ์ ์ฒด ๋ผ์ธ RowKey = "Vasya" ํค๋ฅผ ์ฌ์ฉํ์ฌ Olya๋ฅผ "๋ง๋ " ๋๊น์ง ์ด ๊ฐ์ ์ ๋ ฌํฉ๋๋ค. ๋๋ Olya๋ฅผ "์ถฉ์กฑํ์ง ์์"์ผ๋ก ๋ชจ๋ ์ด์ ๊ฐ์ ๋ฐ๋ณตํ๊ณ False๋ฅผ ๋ฐํํฉ๋๋ค.
- ๋ฐ์ดํฐ ํธ์ง: ์น๊ตฌ ์ถ๊ฐ: ๋น์ทํ ์์ ์ ๊ฒฝ์ฐ ๋นผ๊ธฐ๋ ํ์ํฉ๋๋ค. ์ ์ฒด ๋ผ์ธ RowKey = "Vasya" ํค๋ฅผ ์ฌ์ฉํ์ฌ ์น๊ตฌ์ ์ด ์๋ฅผ ๊ณ์ฐํฉ๋๋ค. ์ ์น๊ตฌ์ ID๋ฅผ ์ ์ด์ผ ํ๋ ์ด์ ์๋ฅผ ๊ฒฐ์ ํ๋ ค๋ฉด ์ด ์ด ์น๊ตฌ ์๊ฐ ํ์ํฉ๋๋ค.
- ๋ฐ์ดํฐ ๋ณ๊ฒฝ: ์น๊ตฌ ์ญ์ :
- ๋นผ์ผํจ ์ ์ฒด ๋ผ์ธ RowKey = "Vasya" ํค๋ฅผ ์ฌ์ฉํ์ฌ ์ญ์ ํ ์น๊ตฌ๊ฐ ๊ธฐ๋ก๋ ์ด์ ์ฐพ๊ธฐ ์ํด ์ด์ ์ ๋ ฌํฉ๋๋ค.
- ๋ค์์ผ๋ก ์น๊ตฌ๋ฅผ ์ญ์ ํ ํ ๋ฒํธ ๋งค๊ธฐ๊ธฐ์ "๊ฐ๊ฒฉ"์ด ์๊ธฐ์ง ์๋๋ก ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ํ๋์ ์ด๋ก "์ด๋"ํด์ผ ํฉ๋๋ค.
์ด์ "์กฐ๊ฑด๋ถ ์ ์ฉ" ์ธก๋ฉด์์ ๊ตฌํํด์ผ ํ๋ ์ด๋ฌํ ์๊ณ ๋ฆฌ์ฆ์ด ์ผ๋ง๋ ์์ฐ์ ์ธ์ง ํ๊ฐํด ๋ณด๊ฒ ์ต๋๋ค.
- ๋ฐ์ดํฐ ์ฝ๊ธฐ: ์ ์ฒด ์ค์ ๋นผ๊ณ ํ๋ ๋ด์์ ๋ชจ๋ ์ด์ ๋ฐ๋ณตํด์ผ ํฉ๋๋ค. ์ด๋ ๋น์ฉ์ ์ํ ์ถ์ ์น๊ฐ ๋๋ต O(n)์ด ๋จ์ ์๋ฏธํฉ๋๋ค.
- ๋ฐ์ดํฐ ํธ์ง: ์น๊ตฌ ์ถ๊ฐ: ์น๊ตฌ ์๋ฅผ ๊ฒฐ์ ํ๋ ค๋ฉด ํ์ ๋ชจ๋ โโ์ด์ ๋ฐ๋ณตํ ๋ค์ ์ ์ด์ ์ฝ์ ํด์ผ ํฉ๋๋ค. => O(n)
- ๋ฐ์ดํฐ ๋ณ๊ฒฝ: ์น๊ตฌ ์ญ์ :
- ์ถ๊ฐ์ ์ ์ฌ - ์ ํ์ ๋ชจ๋ ์ด์ ํต๊ณผํด์ผ ํจ => O(n)
- ์ด์ ์ ๊ฑฐํ ํ์๋ "์ด๋"ํด์ผ ํฉ๋๋ค. ์ด "์ ๋ฉด"์ ๊ตฌํํ๋ ๊ฒฝ์ฐ ํ๋ ๋ด์์ ์ต๋ (n-1)๊ฐ์ ์์
์ด ํ์ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ฌ๊ธฐ์ ์ค์ ๋ถ๋ถ์์๋ ๊ณ ์ ๋ ์์ ์์
์ ๋ํด "์์ฌ ์ํํธ"๋ฅผ ๊ตฌํํ๋ ๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ ๊ฒ์
๋๋ค. ์ฆ, n์ ๊ด๊ณ์์ด ์ผ์ ํ ์๊ฐ์ด ์์๋ฉ๋๋ค. ์ด ์์ ์๊ฐ(์ ํํ๋ O(2))์ O(n)์ ๋นํด ๋ฌด์๋ ์ ์์ต๋๋ค. ์ ๊ทผ ๋ฐฉ์์ ์๋ ๊ทธ๋ฆผ์ ์ค๋ช
๋์ด ์์ต๋๋ค. "๋ง์ง๋ง" ์ด์ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ๋ ค๋ ์ด์ ๋ณต์ฌํ ๋ค์ ๋ง์ง๋ง ์ด์ ์ญ์ ํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
์ ์ฒด์ ์ผ๋ก ๋ชจ๋ ์๋๋ฆฌ์ค์์ ์ฐ๋ฆฌ๋ O(n)์ ์ ๊ทผ์ ๊ณ์ฐ ๋ณต์ก์ฑ์ ๋ฐ์์ต๋๋ค.
์๋ง๋ ์ฐ๋ฆฌ๋ ๊ฑฐ์ ํญ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ ์ฒด ํ์ ์ฝ์ด์ผ ํ๋ฉฐ, XNUMX๊ฐ ์ค XNUMX๊ฐ์ ๊ฒฝ์ฐ์๋ ๋ชจ๋ ์ด์ ์ดํด๋ณด๊ณ ์ด ์น๊ตฌ ์๋ฅผ ๊ณ์ฐํด์ผ ํ๋ค๋ ๊ฒ์ ์ด๋ฏธ ์๊ณ ๊ณ์ค ๊ฒ์
๋๋ค. ๋ฐ๋ผ์ ์ต์ ํ๋ฅผ ์๋ํ๊ธฐ ์ํด ๊ฐ ๋คํธ์ํฌ ์ฌ์ฉ์์ ์ด ์น๊ตฌ ์๋ฅผ ์ ์ฅํ๋ "count" ์ด์ ์ถ๊ฐํ ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ, ์ด ์น๊ตฌ ์๋ฅผ ๊ณ์ฐํ๊ธฐ ์ํด ์ ์ฒด ํ์ ์ฝ์ ์๋ ์์ง๋ง "count" ์ด์ ํ๋๋ง ์ฝ์ ์ ์์ต๋๋ค. ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ ๋ "์นด์ดํธ"๋ฅผ ์
๋ฐ์ดํธํ๋ ๊ฒ์ ์์ง ์๋ ๊ฒ์
๋๋ค. ์ ๊ฒ. ์ฐ๋ฆฌ๋ ํฅ์๋๋ค ์ต์
2(๊ฐ์):
RowKey
์ฐ์ฌ
Vasya
1: ํํธ์ผ
2: ์ฌ๋ฆฌ์ผ
3: ๋ค์ค
์นด์ดํธ: 3
ํํฐ
1: ๋ง์ค
2: ๋ฐ์ค
์นด์ดํธ: 2
์ฒซ ๋ฒ์งธ ์ต์ ๊ณผ ๋น๊ตํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๋ฐ์ดํฐ ์ฝ๊ธฐ: "Vasya๊ฐ Olya๋ฅผ ์ฝ๋์?"๋ผ๋ ์ง๋ฌธ์ ๋ํ ๋ต๋ณ์ ์ป์ผ๋ ค๋ฉด ์๋ฌด๊ฒ๋ ๋ณํ์ง ์์์ต๋๋ค => O(n)
- ๋ฐ์ดํฐ ํธ์ง: ์น๊ตฌ ์ถ๊ฐ: ์ด์ ์ ์ฒด ํ์ ์ฝ๊ณ ํด๋น ์ด์ ๋ฐ๋ณตํ ํ์๊ฐ ์๊ณ "count" ์ด์ ๊ฐ๋ง ๊ฐ์ ธ์ฌ ์ ์์ผ๋ฏ๋ก ์ ์น๊ตฌ ์ฝ์ ์ ๋จ์ํํ์ต๋๋ค. ์ ์น๊ตฌ๋ฅผ ์ฝ์ ํ ์ด ๋ฒํธ๋ฅผ ์ฆ์ ๊ฒฐ์ ํ์ธ์. ์ด๋ก ์ธํด ๊ณ์ฐ ๋ณต์ก์ฑ์ด O(1)๋ก ๊ฐ์๋ฉ๋๋ค.
- ๋ฐ์ดํฐ ๋ณ๊ฒฝ: ์น๊ตฌ ์ญ์ : ์น๊ตฌ๋ฅผ ์ญ์ ํ ๋ ์ด ์ด์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ํ ์ ์ผ์ชฝ์ผ๋ก "์ด๋"ํ ๋ I/O ์์ ์๋ฅผ ์ค์ผ ์๋ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ญ์ ํด์ผ ํ ์ด์ ์ฐพ๊ธฐ ์ํด ์ด์ ๋ฐ๋ณตํด์ผ ํ๋ ํ์์ฑ์ ์ฌ์ ํ โโ๋จ์ ์์ผ๋ฏ๋ก => โโO(n)
- ๋ฐ๋ฉด์ ์ด์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฐ์ดํธํ ๋๋ง๋ค "count" ์ด์ ์ ๋ฐ์ดํธํด์ผ ํ์ง๋ง ์ด๋ ์ผ์ ํ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ฏ๋ก O ๊ธฐํธ ํ๋ ์์ํฌ ๋ด์์๋ ๋ฌด์๋ ์ ์์ต๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ต์
2๊ฐ ์กฐ๊ธ ๋ ์ต์ ์ผ๋ก ๋ณด์ด์ง๋ง โํ๋ช
๋ณด๋ค๋ ์งํโ์ ๊ฐ๊น์ต๋๋ค. "ํ๋ช
"์ ์ด๋ฃจ๊ธฐ ์ํด์๋ ์ฐ๋ฆฌ๊ฐ ํ์๋ก ํ ๊ฒ์ด๋ค ์ต์
3(์ด).
๋ชจ๋ ๊ฒ์ "๊ฑฐ๊พธ๋ก"๋๋ฆฌ์: ์ฐ๋ฆฌ๋ ์ง์ ํ๊ฒ ์ต๋๋ค ์ด ์ด๋ฆ ์ฌ์ฉ์ ID! ์ด ์์ฒด์ ๊ธฐ๋ก๋ ๋ด์ฉ์ ๋ ์ด์ ์ค์ํ์ง ์์ต๋๋ค. ์ซ์ 1๋ก ๋์ญ์์ค(์ผ๋ฐ์ ์ผ๋ก "๊ฐ์กฑ/์น๊ตฌ/๊ธฐํ" ๊ทธ๋ฃน๊ณผ ๊ฐ์ด ์ ์ฉํ ํญ๋ชฉ์ด ์ฌ๊ธฐ์ ์ ์ฅ๋ ์ ์์ต๋๋ค). ์ด ์ ๊ทผ ๋ฐฉ์์ ์ด์ ์ NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์
๊ฒฝํ์ด ์๋ ์ค๋น๋์ง ์์ "์ผ๋ฐ์ธ"์ ๋๋ผ๊ฒ ํ ์ ์์ง๋ง, ์ด ์์
์์ HBase์ ์ ์ฌ๋ ฅ์ ํจ์ฌ ๋ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ ๊ฒ์ ๋ฐ๋ก ์ด ์ ๊ทผ ๋ฐฉ์์
๋๋ค.
RowKey
์ฐ์ฌ
Vasya
ํํฐ์: 1
์ฌ๋ฆฌ์ผ: 1
๋ค์ค: 1
ํํฐ
๋ง์ค : 1
๋ฐ์ค: 1
์ฌ๊ธฐ์ ์ฐ๋ฆฌ๋ ํ ๋ฒ์ ์ฌ๋ฌ ๊ฐ์ง ์ด์ ์ ์ป์ต๋๋ค. ์ด๋ฅผ ์ดํดํ๊ธฐ ์ํด ์๋ก์ด ๊ตฌ์กฐ๋ฅผ ๋ถ์ํ๊ณ ๊ณ์ฐ ๋ณต์ก์ฑ์ ์ถ์ ํด ๋ณด๊ฒ ์ต๋๋ค.
- ๋ฐ์ดํฐ ์ฝ๊ธฐ: Vasya๊ฐ Olya๋ฅผ ๊ตฌ๋ ํ๋์ง ์ฌ๋ถ์ ๋ํ ์ง๋ฌธ์ ๋ตํ๋ ค๋ฉด "Olya" ์ด ํ๋๋ฅผ ์ฝ๋ ๊ฒ์ผ๋ก ์ถฉ๋ถํฉ๋๋ค. ํด๋น ์ด์ด ์์ผ๋ฉด ๋๋ต์ True์ด๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด โ False => O(1)์ ๋๋ค.
- ๋ฐ์ดํฐ ํธ์ง: ์น๊ตฌ ์ถ๊ฐ: ์น๊ตฌ ์ถ๊ฐ: "์น๊ตฌ ID" ์ด์ ์๋ก ์ถ๊ฐํ๋ฉด ๋ฉ๋๋ค => O(1)
- ๋ฐ์ดํฐ ๋ณ๊ฒฝ: ์น๊ตฌ ์ญ์ : ์น๊ตฌ ID ์ด๋ง ์ญ์ => O(1)
๋ณด์๋ค์ํผ ์ด ์คํ ๋ฆฌ์ง ๋ชจ๋ธ์ ์ค์ํ ์ฅ์ ์ ํ์ํ ๋ชจ๋ ์๋๋ฆฌ์ค์์ ํ๋์ ์ด๋ง ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ ์ฒด ํ์ ์ฝ์ง ์๊ณ ์ด ํ์ ๋ชจ๋ โโ์ด์ ์ด๊ฑฐํ์ง ์๋๋ค๋ ๊ฒ์ ๋๋ค. ์ฌ๊ธฐ์ ๋ฉ์ถ ์๋ ์์ง๋ง...
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ก์ธ์คํ ๋ ์ฑ๋ฅ์ ์ต์ ํํ๊ณ I/O ์์ ์ ์ค์ด๋ ๊ฒฝ๋ก๋ฅผ ๋ฐ๋ผ ์กฐ๊ธ ๋ ๋์๊ฐ ์ ์์ต๋๋ค. ์ ์ฒด ๊ด๊ณ ์ ๋ณด๋ฅผ row key ์์ฒด์ ์ง์ ์ ์ฅํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น์? ์ฆ, userID.friendID์ ๊ฐ์ ํค ํฉ์ฑ์ ๋ง๋์๊ฒ ์ต๋๊น? ์ด ๊ฒฝ์ฐ์๋ ์ค์ ์ด์ ์ ํ ์ฝ์ ํ์์กฐ์ฐจ ์์ต๋๋ค(์ต์ 4(ํ)):
RowKey
์ฐ์ฌ
๋ฐ์ค.ํํธ์ผ
ํํฐ์: 1
๋ฐ์ค.์ฌ๋ฆฌ์ผ
์ฌ๋ฆฌ์ผ: 1
๋ฐ์ค.๋ค์ค
๋ค์ค: 1
ํํธ์ผ.๋ง์ค
๋ง์ค : 1
ํํธ์ผ.๋ฐ์ค
๋ฐ์ค: 1
๋ถ๋ช ํ ์ด์ ๋ฒ์ ์์์ ๊ฐ์ด ์ด๋ฌํ ๊ตฌ์กฐ์์ ๋ชจ๋ ๋ฐ์ดํฐ ์กฐ์ ์๋๋ฆฌ์ค์ ํ๊ฐ๋ O(1)์ด ๋ ๊ฒ์ ๋๋ค. ์ต์ 3๊ณผ์ ์ฐจ์ด์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ I/O ์์ ํจ์จ์ฑ์๋ง ์์ต๋๋ค.
๊ธ์, ๋ง์ง๋ง "ํ". ์ต์ 4์์๋ ํ ํค์ ๊ธธ์ด๊ฐ ๊ฐ๋ณ์ ์ด์ด์ ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น ์ ์๋ค๋ ์ ์ ์ฝ๊ฒ ์ ์ ์์ต๋๋ค(์ฌ๊ธฐ์ HBase๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ดํธ ์งํฉ์ผ๋ก ์ ์ฅํ๊ณ ํ ์ด๋ธ์ ํ์ ํค๋ณ๋ก ์ ๋ ฌ๋๋ค๋ ์ ์ ๊ธฐ์ตํฉ๋๋ค). ๋ํ ์ผ๋ถ ์๋๋ฆฌ์ค์์๋ ์ฒ๋ฆฌํด์ผ ํ ์ ์๋ ๊ตฌ๋ถ ๊ธฐํธ๋ ์์ต๋๋ค. ์ด๋ฌํ ์ํฅ์ ์ ๊ฑฐํ๊ธฐ ์ํด userID ๋ฐ friendID์ ํด์๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ๋ ํด์ ๋ชจ๋ ์ผ์ ํ ๊ธธ์ด๋ฅผ ๊ฐ์ง๋ฏ๋ก ๊ตฌ๋ถ ๊ธฐํธ ์์ด ๊ฐ๋จํ ์ฐ๊ฒฐํ๋ฉด ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค(์ต์ 5(ํด์)):
RowKey
์ฐ์ฌ
dc084ef00e94aef49be885f9b01f51c01918fa783851db0dc1f72f83d33a5994
ํํฐ์: 1
dc084ef00e94aef49be885f9b01f51c0f06b7714b5ba522c3cf51328b66fe28a
์ฌ๋ฆฌ์ผ: 1
dc084ef00e94aef49be885f9b01f51c00d2c2e5d69df6b238754f650d56c896a
๋ค์ค: 1
1918fa783851db0dc1f72f83d33a59949ee3309645bd2c0775899fca14f311e1
๋ง์ค : 1
1918fa783851db0dc1f72f83d33a5994dc084ef00e94aef49be885f9b01f51c0
๋ฐ์ค: 1
๋ถ๋ช
ํ ์ฐ๋ฆฌ๊ฐ ๊ณ ๋ คํ๊ณ ์๋ ์๋๋ฆฌ์ค์์ ์ด๋ฌํ ๊ตฌ์กฐ๋ก ์์
ํ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋ณต์ก์ฑ์ ์ต์
4, ์ฆ O(1)๊ณผ โโ๋์ผํ ๊ฒ์
๋๋ค.
์ ์ฒด์ ์ผ๋ก ๊ณ์ฐ ๋ณต์ก์ฑ์ ๋ํ ๋ชจ๋ ์ถ์ ์น๋ฅผ ํ๋์ ํ์ ์์ฝํด ๋ณด๊ฒ ์ต๋๋ค.
์น๊ตฌ ์ถ๊ฐ
์น๊ตฌ ํ์ธ ์ค
์น๊ตฌ ์ญ์
์ต์
1(๊ธฐ๋ณธ๊ฐ)
O (N)
O (N)
O (N)
์ต์
2(๊ฐ์)
O (1)
O (N)
O (N)
์ต์
3(์ด)
O (1)
O (1)
O (1)
์ต์
4(ํ)
O (1)
O (1)
O (1)
์ต์
5(ํด์)
O (1)
O (1)
O (1)
๋ณด์๋ค์ํผ ์ต์ 3-5๊ฐ ๊ฐ์ฅ ์ ํธ๋๋ ๊ฒ์ผ๋ก ๋ณด์ด๋ฉฐ ์ด๋ก ์ ์ผ๋ก ํ์ํ ๋ชจ๋ ๋ฐ์ดํฐ ์กฐ์ ์๋๋ฆฌ์ค๋ฅผ ์ผ์ ํ ์๊ฐ์ ์คํํ๋๋ก ๋ณด์ฅํฉ๋๋ค. ์ฐ๋ฆฌ ์์ ์กฐ๊ฑด์์๋ ๋ชจ๋ ์ฌ์ฉ์์ ์น๊ตฌ ๋ชฉ๋ก์ ์ป์ด์ผ ํ๋ค๋ ๋ช ์์ ์ธ ์๊ตฌ ์ฌํญ์ด ์์ง๋ง ์ค์ ํ๋ก์ ํธ ํ๋์์๋ ํ๋ฅญํ ๋ถ์๊ฐ๋ก์ ๊ทธ๋ฌํ ์์ ์ด ๋ฐ์ํ ์ ์๋ค๊ณ "์์ธก"ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. โ๋นจ๋๋ฅผ ํด์ธ์.โ ๋ฐ๋ผ์ ์ ๋ ์ต์ 3์ ๊ณต๊ฐํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ค์ ํ๋ก์ ํธ์์ ์ด ์์ฒญ์ ์ด๋ฏธ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ํด๊ฒฐ๋์์ ๊ฐ๋ฅ์ฑ์ด ๋์ผ๋ฏ๋ก ์ ์ฒด ๋ฌธ์ ์ ๋ํ ์ผ๋ฐ์ ์ธ ๋น์ ์ด ์์ผ๋ฉด ๋ง๋ค์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ต์ข ๊ฒฐ๋ก .
์คํ ์ค๋น
๋๋ ์์ ์ด๋ก ์ ์ฃผ์ฅ์ ์ค์ ๋ก ํ ์คํธํ๊ณ ์ถ์ต๋๋ค. ์ด๊ฒ์ด ๊ธด ์ฃผ๋ง ๋์ ๋ฐ์ํ ์์ด๋์ด์ ๋ชฉํ์์ต๋๋ค. ์ด๋ฅผ ์ํด์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ฉ์ ๋ํด ์ค๋ช ๋ ๋ชจ๋ ์๋๋ฆฌ์ค์์ "์กฐ๊ฑด๋ถ ์ ํ๋ฆฌ์ผ์ด์ "์ ์๋ ์๋์ ์์ ๋คํธ์ํฌ ๊ท๋ชจ(n)์ ์ฆ๊ฐ์ ๋ฐ๋ฅธ ์๊ฐ ์ฆ๊ฐ๋ฅผ ํ๊ฐํด์ผ ํฉ๋๋ค. ์ฐ๋ฆฌ๊ฐ ๊ด์ฌ์ ๊ฐ๊ณ ์คํ ์ค์ ์ธก์ ํ ๋์ ๋งค๊ฐ๋ณ์๋ ํ๋์ "๋น์ฆ๋์ค ์์ "์ ์ํํ๊ธฐ ์ํด "์กฐ๊ฑด๋ถ ์ ์ฉ"์ด ์๋นํ ์๊ฐ์ ๋๋ค. "์ฌ์ ๊ฑฐ๋"๋ ๋ค์ ์ค ํ๋๋ฅผ ์๋ฏธํฉ๋๋ค.
- ์ ์น๊ตฌ ํ๋ช ์ถ๊ฐ
- ์ฌ์ฉ์ A๊ฐ ์ฌ์ฉ์ B์ ์น๊ตฌ์ธ์ง ํ์ธ
- ์น๊ตฌ XNUMX๋ช ์ญ์
๋ฐ๋ผ์ ์ด๊ธฐ ์ค๋ช ์ ์ค๋ช ๋ ์๊ตฌ ์ฌํญ์ ๊ณ ๋ คํ๋ฉด ๊ฒ์ฆ ์๋๋ฆฌ์ค๋ ๋ค์๊ณผ ๊ฐ์ด ๋ํ๋ฉ๋๋ค.
- ๋ฐ์ดํฐ ๊ธฐ๋ก. ํฌ๊ธฐ n์ ์ด๊ธฐ ๋คํธ์ํฌ๋ฅผ ๋ฌด์์๋ก ์์ฑํฉ๋๋ค. "ํ์ค ์ธ๊ณ"์ ๋ ๊ฐ๊น์์ง๊ธฐ ์ํด ๊ฐ ์ฌ์ฉ์๊ฐ ๊ฐ์ง๊ณ ์๋ ์น๊ตฌ์ ์๋ ์์ ๋ณ์์ ๋๋ค. "์กฐ๊ฑด๋ถ ์ ํ๋ฆฌ์ผ์ด์ "์ด ์์ฑ๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ HBase์ ์ฐ๋ ์๊ฐ์ ์ธก์ ํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ๊ฒฐ๊ณผ ์๊ฐ์ ์ถ๊ฐ๋ ์ด ์น๊ตฌ ์๋ก ๋๋๋๋ค. ์ด๊ฒ์ด ํ๋์ "๋น์ฆ๋์ค ์ด์"์ ๋ํ ํ๊ท ์๊ฐ์ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
- ๋ฐ์ดํฐ ์ฝ๊ธฐ. ๊ฐ ์ฌ์ฉ์์ ๋ํด ์ฌ์ฉ์๊ฐ ๊ตฌ๋ ํ๋์ง ์ฌ๋ถ์ ๋ํ ๋ต๋ณ์ ์ป์ด์ผ ํ๋ "์ฑ๊ฒฉ" ๋ชฉ๋ก์ ๋ง๋ญ๋๋ค. ๋ชฉ๋ก์ ๊ธธ์ด๋ ๋๋ต ์ฌ์ฉ์์ ์น๊ตฌ ์์ด๋ฉฐ, ์ฒดํฌ๋ ์น๊ตฌ ์ค ์ ๋ฐ์ "์"๋ก ๋๋ตํ๊ณ ๋๋จธ์ง ์ ๋ฐ์ "์๋์"๋ก ๋๋ตํด์ผ ํฉ๋๋ค. ํ์ธ์ "์"์ "์๋์"๊ฐ ๋ฒ๊ฐ์ ๋ํ๋๋ ์์๋ก ์ํ๋ฉ๋๋ค(์ฆ, ๋ ๋ฒ์งธ ๊ฒฝ์ฐ๋ง๋ค ์ต์ 1๊ณผ 2์ ๋ํ ์ค์ ๋ชจ๋ ์ด์ ํต๊ณผํด์ผ ํฉ๋๋ค). ๊ทธ๋ฐ ๋ค์ ์ด ์์ ์๊ฐ์ ํ ์คํธ๋ ์น๊ตฌ ์๋ก ๋๋์ด ๊ณผ๋ชฉ๋น ํ๊ท ์์ ์๊ฐ์ ์ป์ต๋๋ค.
- ๋ฐ์ดํฐ ์ญ์ . ์ฌ์ฉ์์๊ฒ์ ๋ชจ๋ ์น๊ตฌ๋ฅผ ์ ๊ฑฐํฉ๋๋ค. ๊ฒ๋ค๊ฐ ์ญ์ ์์๋ ๋ฌด์์์ ๋๋ค. ์ฆ, ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋กํ๋ ๋ฐ ์ฌ์ฉ๋ ์๋ ๋ชฉ๋ก์ "์์ต๋๋ค". ๊ทธ๋ฐ ๋ค์ ์ด ํ์ธ ์๊ฐ์ ์ ๊ฑฐ๋ ์น๊ตฌ ์๋ก ๋๋์ด ํ์ธ๋น ํ๊ท ์๊ฐ์ ๊ตฌํฉ๋๋ค.
5๊ฐ์ง ๋ฐ์ดํฐ ๋ชจ๋ธ ์ต์
๊ฐ๊ฐ๊ณผ ์์
๋คํธ์ํฌ์ ๋ค์ํ ํฌ๊ธฐ์ ๋ํด ์๋๋ฆฌ์ค๋ฅผ ์คํํ์ฌ ์๊ฐ์ด ์ฑ์ฅํจ์ ๋ฐ๋ผ ์ด๋ป๊ฒ ๋ณํํ๋์ง ํ์ธํด์ผ ํฉ๋๋ค. ๋ฌผ๋ก ํ๋์ n ๋ด์์ ๋คํธ์ํฌ ์ฐ๊ฒฐ๊ณผ ํ์ธํ ์ฌ์ฉ์ ๋ชฉ๋ก์ 5๊ฐ์ง ์ต์
๋ชจ๋์์ ๋์ผํด์ผ ํฉ๋๋ค.
๋ ๋์ ์ดํด๋ฅผ ์ํด ๋ค์์ n= 5์ ๋ํด ์์ฑ๋ ๋ฐ์ดํฐ์ ์์
๋๋ค. ์์ฑ๋ "์์ฑ๊ธฐ"๋ ์ธ ๊ฐ์ ID ์ฌ์ ์ ์ถ๋ ฅ์ผ๋ก ์์ฑํฉ๋๋ค.
- ์ฒซ ๋ฒ์งธ๋ ์ฝ์ ์ฉ์ ๋๋ค.
- ๋ ๋ฒ์งธ๋ ํ์ธ์ ์ํ ๊ฒ์ ๋๋ค.
- ์ธ ๋ฒ์งธ โ ์ญ์ ์ฉ
{0: [1], 1: [4, 5, 3, 2, 1], 2: [1, 2], 3: [2, 4, 1, 5, 3], 4: [2, 1]} # ะฒัะตะณะพ 15 ะดััะทะตะน
{0: [1, 10800], 1: [5, 10800, 2, 10801, 4, 10802], 2: [1, 10800], 3: [3, 10800, 1, 10801, 5, 10802], 4: [2, 10800]} # ะฒัะตะณะพ 18 ะฟัะพะฒะตััะตะผัั
ััะฑัะตะบัะพะฒ
{0: [1], 1: [1, 3, 2, 5, 4], 2: [1, 2], 3: [4, 1, 2, 3, 5], 4: [1, 2]} # ะฒัะตะณะพ 15 ะดััะทะตะน
๋ณด์๋ค์ํผ, ํ์ธ์ ์ํด ์ฌ์ ์ ์๋ 10๋ณด๋ค ํฐ ๋ชจ๋ ID๋ ํ์คํ False๋ผ๋ ๋๋ต์ ์ ๊ณตํ๋ ID์ ๋๋ค. '์น๊ตฌ' ์ถ๊ฐ, ํ์ธ, ์ญ์ ๋ ์ฌ์ ์ ๋ช ์๋ ์์๋๋ก ์ ํํ๊ฒ ์ํ๋ฉ๋๋ค.
์คํ์ Windows 10์ ์คํํ๋ ๋
ธํธ๋ถ์์ ์ํ๋์์ต๋๋ค. ์ฌ๊ธฐ์ HBase๋ ํ๋์ Docker ์ปจํ
์ด๋์์ ์คํ๋๊ณ Python๊ณผ Jupyter Notebook์ ๋ค๋ฅธ ์ปจํ
์ด๋์์ ์คํ๋์์ต๋๋ค. Docker์๋ 2๊ฐ์ CPU ์ฝ์ด์ 2GB์ RAM์ด ํ ๋น๋์์ต๋๋ค. ํ
์คํธ ๋ฐ์ดํฐ ์์ฑ ๋ฐ ์๊ฐ ์ธก์ ์ ์ํ "์กฐ๊ฑด๋ถ ์ ํ๋ฆฌ์ผ์ด์
" ๋ฐ "ํ์ดํ" ์๋ฎฌ๋ ์ด์
๊ณผ ๊ฐ์ ๋ชจ๋ ๋ก์ง์ Python์ผ๋ก ์์ฑ๋์์ต๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ HBase ์์
์ ์ฌ์ฉ๋์์ต๋๋ค.
ํน์ ๋ ธํธ๋ถ์ ์ปดํจํ ์ฑ๋ฅ์ ๊ณ ๋ คํ์ฌ n = 10, 30, โฆ์ ๋ํ ์ถ์๊ฐ ์คํ์ ์ผ๋ก ์ ํ๋์์ต๋๋ค. 170 - ์ ์ฒด ํ ์คํธ ์ฃผ๊ธฐ(๋ชจ๋ n์ ๋ํ ๋ชจ๋ ์ต์ ์ ๋ํ ๋ชจ๋ ์๋๋ฆฌ์ค)์ ์ด ์๋ ์๊ฐ์ด ํจ์ฌ ๋ ํฉ๋ฆฌ์ ์ด๊ณ ํ ๋ฒ์ ๋ค๊ณผํ ๋์ ์ ํฉํ๋ ๊ฒฝ์ฐ(ํ๊ท 15๋ถ).
์ฌ๊ธฐ์๋ ์ด ์คํ์์ ์ ๋์ ์ธ ์ฑ๋ฅ ์์น๋ฅผ ์ฃผ๋ก ํ๊ฐํ๋ ๊ฒ์ด ์๋๋ผ๋ ์ ์ ์ธ๊ธํ ํ์๊ฐ ์์ต๋๋ค. ์๋ก ๋ค๋ฅธ ๋ ๊ฐ์ง ์ต์ ์ ์๋์ ์ผ๋ก ๋น๊ตํ๋ ๊ฒ์กฐ์ฐจ ์์ ํ ์ ํํ์ง ์์ ์ ์์ต๋๋ค. ์ด์ ์ฐ๋ฆฌ๋ n์ ๋ฐ๋ฅธ ์๊ฐ ๋ณํ์ ์ฑ๊ฒฉ์ ๊ด์ฌ์ด ์์ต๋๋ค. ์์ "ํ ์คํธ ์คํ ๋" ๊ตฌ์ฑ์ ๊ณ ๋ คํ๋ฉด ๋ฌด์์ ๋ฐ ๊ธฐํ ์์ธ์ ์ํฅ์ด "์ ๊ฑฐ๋" ์๊ฐ ์ถ์ ์น๋ฅผ ์ป๋ ๊ฒ์ด ๋งค์ฐ ์ด๋ ต์ต๋๋ค( ๊ทธ๋ฌํ ์์ ์ ์ค์ ๋์ง ์์์ต๋๋ค).
์คํ๊ฒฐ๊ณผ
์ฒซ ๋ฒ์งธ ํ
์คํธ๋ ์น๊ตฌ ๋ชฉ๋ก์ ์์ฑํ๋ ๋ฐ ์์๋๋ ์๊ฐ์ด ์ด๋ป๊ฒ ๋ณํ๋๊ฐ์
๋๋ค. ๊ทธ ๊ฒฐ๊ณผ๋ ์๋ ๊ทธ๋ํ์ ๋์ ์์ต๋๋ค.
์์๋๋ก ์ต์
3-5๋ ๋คํธ์ํฌ ํฌ๊ธฐ์ ์ฆ๊ฐ์ ๊ตฌ๋ณํ ์ ์๋ ์ฑ๋ฅ ์ฐจ์ด์ ์์กดํ์ง ์๋ ๊ฑฐ์ ์ผ์ ํ "๋น์ฆ๋์ค ํธ๋์ญ์
" ์๊ฐ์ ๋ณด์ฌ์ค๋๋ค.
์ต์
2๋ ์ผ์ ํ์ง๋ง ์ฝ๊ฐ ๋ ๋์ ์ฑ๋ฅ์ ๋ณด์ฌ์ค๋๋ค. ์ต์
2-3์ ๋นํด ๊ฑฐ์ ์ ํํ 5๋ฐฐ์
๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ ์ด๋ก ๊ณผ ๊ด๋ จ์ด ์๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ปํ ์๋ฐ์ ์์ต๋๋ค. ์ด ๋ฒ์ ์์๋ HBase์์ I/O ์์
์๊ฐ ์ ํํ 2๋ฐฐ ๋ ๋ง์ต๋๋ค. ์ด๋ ์์น์ ์ผ๋ก ํ
์คํธ ๋ฒค์น๊ฐ ์ฐ์ํ ์ ํ์ฑ์ ์ ๊ณตํ๋ค๋ ๊ฐ์ ์ ์ธ ์ฆ๊ฑฐ๊ฐ ๋ ์ ์์ต๋๋ค.
๋ํ ์์ํ ๋๋ก ์ต์
1์ ๊ฐ์ฅ ๋๋ฆฐ ๊ฒ์ผ๋ก ๋ฐํ์ก์ผ๋ฉฐ ๋คํธ์ํฌ ํฌ๊ธฐ์ ์๋ก๋ฅผ ์ถ๊ฐํ๋ ๋ฐ ์์๋๋ ์๊ฐ์ด ์ ํ์ ์ผ๋ก ์ฆ๊ฐํ๋ ๊ฒ์ ๋ณด์ฌ์ค๋๋ค.
์ด์ ๋ ๋ฒ์งธ ํ
์คํธ ๊ฒฐ๊ณผ๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์ต์
3-5๋ ๋ค์ ์์๋๋ก ์๋ํฉ๋๋ค. ์ฆ, ๋คํธ์ํฌ ํฌ๊ธฐ์ ๊ด๊ณ์์ด ์ผ์ ํ ์๊ฐ์
๋๋ค. ์ต์
1๊ณผ 2๋ ๋คํธ์ํฌ ํฌ๊ธฐ๊ฐ ์ฆ๊ฐํจ์ ๋ฐ๋ผ ์๊ฐ์ด ์ ํ์ ์ผ๋ก ์ฆ๊ฐํ๊ณ ์ ์ฌํ ์ฑ๋ฅ์ ๋ณด์ฌ์ค๋๋ค. ๋์ฑ์ด, ์ต์
2๋ ์กฐ๊ธ ๋ ๋๋ฆฐ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค. ์ด๋ ๋ถ๋ช
ํ ์ถ๊ฐ "์นด์ดํธ" ์ด์ ๊ต์ ํ๊ณ ์ฒ๋ฆฌํด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ฉฐ, ์ด๋ n์ด ์ฑ์ฅํจ์ ๋ฐ๋ผ ๋์ฑ ๋์ ๋๊ฒ ๋ฉ๋๋ค. ํ์ง๋ง ์ด ๋น๊ต์ ์ ํ์ฑ์ ์๋์ ์ผ๋ก ๋ฎ๊ธฐ ๋๋ฌธ์ ๊ฒฐ๋ก ์ ๋ด๋ฆฌ์ง๋ ์๊ฒ ์ต๋๋ค. ๋ํ ์ด๋ฌํ ๋น์จ(์ต์
1 ๋๋ 2๊ฐ ๋ ๋น ๋ฆ)์ ์คํ๋ง๋ค ๋ณ๊ฒฝ๋์์ต๋๋ค(์์กด์ฑ ๋ฐ "์๋๋ฐฉ"์ ํน์ฑ์ ์ ์งํ๋ฉด์).
์, ๋ง์ง๋ง ๊ทธ๋ํ๋ ์ ๊ฑฐ ํ ์คํธ ๊ฒฐ๊ณผ์ ๋๋ค.
์ด๋ฒ์๋ ๋๋ ์ผ์ด ์๋๋๋ค. ์ต์
3~5๋ ์ผ์ ํ ์๊ฐ์ ์ ๊ฑฐ๋ฅผ ์ํํฉ๋๋ค.
๋์ฑ์ด ํฅ๋ฏธ๋กญ๊ฒ๋ ์ต์
4์ 5๋ ์ด์ ์๋๋ฆฌ์ค์ ๋ฌ๋ฆฌ ์ต์
3์ ๋นํด ๋์ ๋๊ฒ ์ฝ๊ฐ ๋์ ์ฑ๋ฅ์ ๋ณด์ฌ์ค๋๋ค. ๋ถ๋ช
ํ ํ ์ญ์ ์์
์ ์ผ๋ฐ์ ์ผ๋ก ๋
ผ๋ฆฌ์ ์ธ ์ด ์ญ์ ์์
๋ณด๋ค ๋น์ฉ์ด ๋ ๋ง์ด ๋ญ๋๋ค.
์์๋๋ก ์ต์ 1๊ณผ 2๋ ์๊ฐ์ด ์ ํ์ ์ผ๋ก ์ฆ๊ฐํ๋ ๊ฒ์ ๋ณด์ฌ์ค๋๋ค. ๋์์ ์ต์ 2๋ ์นด์ดํธ ์ด์ "์ ์ง"ํ๊ธฐ ์ํ ์ถ๊ฐ I/O ์์ ์ผ๋ก ์ธํด ์ต์ 1๋ณด๋ค ์ง์์ ์ผ๋ก ๋๋ฆฝ๋๋ค.
์คํ์ ์ผ๋ฐ์ ์ธ ๊ฒฐ๋ก :
- ์ต์ 3-5๋ HBase๋ฅผ ํ์ฉํ๋ฏ๋ก ๋ ๋์ ํจ์จ์ฑ์ ๋ณด์ฌ์ค๋๋ค. ๋ํ ์ฑ๋ฅ์ ์์์ ๋ฐ๋ผ ์๋ก ๋ค๋ฅด๋ฉฐ ๋คํธ์ํฌ ํฌ๊ธฐ์ ์์กดํ์ง ์์ต๋๋ค.
- ์ต์ 4์ 5์ ์ฐจ์ด๋ ๊ธฐ๋ก๋์ง ์์์ต๋๋ค. ํ์ง๋ง ์ด๊ฒ์ด ์ต์ 5๋ฅผ ์ฌ์ฉํด์๋ ์ ๋๋ค๋ ์๋ฏธ๋ ์๋๋๋ค. ํ ์คํธ ๋ฒค์น์ ์ฑ๋ฅ ํน์ฑ์ ๊ณ ๋ คํ์ฌ ์ฌ์ฉ๋ ์คํ ์๋๋ฆฌ์ค์์๋ ์ด๋ฅผ ๊ฐ์งํ ์ ์์์ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.
- ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ "๋น์ฆ๋์ค ์ด์"์ ์ํํ๋ ๋ฐ ํ์ํ ์๊ฐ ์ฆ๊ฐ์ ํน์ฑ์ ์ผ๋ฐ์ ์ผ๋ก ๋ชจ๋ ์ต์ ์ ๋ํด ์ด์ ์ ์ป์ ์ด๋ก ์ ๊ณ์ฐ์ ํ์ธํ์ต๋๋ค.
์ปคํผ์ฝ
์ํ๋ ๋๋ต์ ์ธ ์คํ์ ์ ๋์ ์ธ ์ง์ค๋ก ๋ฐ์๋ค์ฌ์๋ ์ ๋ฉ๋๋ค. ๊ณ ๋ ค๋์ง ์๊ณ ๊ฒฐ๊ณผ๋ฅผ ์๊ณกํ๋ ์์ธ์ด ๋ง์ด ์์ต๋๋ค(์ด๋ฌํ ๋ณ๋์ ํนํ ๋คํธ์ํฌ ํฌ๊ธฐ๊ฐ ์์ ๊ทธ๋ํ์์ ๋ณผ ์ ์์ต๋๋ค). ์๋ฅผ ๋ค์ด, happybase์์ ์ฌ์ฉํ๋ ์ ์ฝ์ ์๋, ๋ด๊ฐ Python์ผ๋ก ์์ฑํ ๋ ผ๋ฆฌ๋ฅผ ๊ตฌํํ๋ ์๊ณผ ๋ฐฉ๋ฒ(์ฝ๋๊ฐ ์ต์ ์ผ๋ก ์์ฑ๋์๊ณ ๋ชจ๋ ๊ตฌ์ฑ ์์์ ๊ธฐ๋ฅ์ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ๋ค๊ณ ๋ ๋งํ ์ ์์ต๋๋ค), ์๋ง๋ HBase ์บ์ฑ ๊ธฐ๋ฅ, ๋ด ๋ ธํธ๋ถ์์ Windows 10์ ๋ฐฑ๊ทธ๋ผ์ด๋ ํ๋ ๋ฑ ์ผ๋ฐ์ ์ผ๋ก ์ฐ๋ฆฌ๋ ๋ชจ๋ ์ด๋ก ์ ๊ณ์ฐ์ด ์คํ์ ์ผ๋ก ๊ทธ ํ๋น์ฑ์ ์ ์ฆํ๋ค๊ณ ๊ฐ์ ํ ์ ์์ต๋๋ค. ๊ธ์, ์๋๋ฉด ์ ์ด๋ ๊ทธ๋ฌํ "์ ๋ฉด ๊ณต๊ฒฉ"์ผ๋ก ๊ทธ๋ค์ ๋ฐ๋ฐํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํ์ต๋๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก, HBase์์ ๋ฐ์ดํฐ ๋ชจ๋ธ์ ์ค๊ณํ๊ธฐ ์์ํ ๋ชจ๋ ์ฌ๋์ ์ํ ๊ถ์ฅ ์ฌํญ์ ์ด์ ์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ๊ฒฝํ์ ์์ฝํ๊ณ "๊ณ๋ช "์ ๊ธฐ์ตํ๋ ๊ฒ์ ๋๋ค.
- ์ค๊ณํ ๋ ์ฐ๋ฆฌ๋ ๋๋ฉ์ธ ๋ชจ๋ธ์ด ์๋ ๋ฐ์ดํฐ ์กฐ์์ ์์ ๊ณผ ํจํด์ ๋ฐํ์ผ๋ก ์งํํฉ๋๋ค.
- ํจ์จ์ ์ธ ์ก์ธ์ค(์ ์ฒด ํ ์ด๋ธ ์ค์บ ์์) โ ํค๋ก๋ง ๊ฐ๋ฅ
- ๋น์ ๊ทํ
- ์๋ก ๋ค๋ฅธ ํ์๋ ์๋ก ๋ค๋ฅธ ์ด์ด ํฌํจ๋ ์ ์์ต๋๋ค.
- ์คํผ์ปค์ ๋์ ๊ตฌ์ฑ
์ถ์ฒ : habr.com