[mongoDB] ์ธ๋ฑ์ค(Index)
- 1) ์ธ๋ฑ์ค๋?
- 1-1) ์ธ๋ฑ์ค์ ๊ตฌ๋ถ
- 1-1-1) ์ญํ
- 1-1-2) ์ ์ฅ ๋ฐฉ์
- 1-1-3) ์ค๋ณต ํ์ฉ ์ฌ๋ถ
- 1-1-4) ๊ธฐ๋ฅ
- 1-2) ์ธ๋ฑ์ค ๋ด๋ถ
- 1-3) ์ธ๋ฑ์ค ํค ์ํธ๋ฆฌ ์๋ฃ ๊ตฌ์กฐ
- 1-1) ์ธ๋ฑ์ค์ ๊ตฌ๋ถ
- 2) ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
- 2-1) ์ธ๋ฑ์ค ๋ ์ธ์ง ์ค์บ
- 2-2) ์ธ๋ฑ์ค ํ๋ฆฌํฝ์ค(Prefix) ์ค์บ
- 2-3) ์ปค๋ฒ๋ง ์ธ๋ฑ์ค
- 2-4) ์ธ๋ฑ์ค ํ ์ค์บ
- 2-5) ์ปดํ์ด๋ ์ธ๋ฑ์ค (Compound Index)
- 2-5-1) ๋ณตํฉ ํ๋ ์ธ๋ฑ์ค
- 2-6) MongoDB์ Hash Index
- 2-7) ๋ฉํฐ ํค ์ธ๋ฑ์ค (Multi key Index)
- 2-7-1) ๋ฉํฐ ํค ์ธ๋ฑ์ค์ ์ ๋ ฌ
- 2-8) Full Text Search Index (์ ๋ฌธ ๊ฒ์ ์ธ๋ฑ์ค)
- 2-8-1) N-Gram ์๊ณ ๋ฆฌ์ฆ
- ํํ์ ๋ถ์๊ณผ N-Gram์ ์ฅ๋จ์
- ์ฐธ๊ณ ์๋ฃ
๊ฐ ์ธ๋ฑ์ค๋ค์ ํน์ฑ๊ณผ ์ฐจ์ด๋ ์๋นํ ์ค์ํ๋ฉฐ, ๋ฌผ๋ฆฌ ์์ค์ ๋ชจ๋ธ๋ง ๋ฐ ์ฑ๋ฅ์์ ์ค์ํ ์์๋ค. ๋ํ DBMS์ ์ฑ๋ฅ์์ ๋น ์ง ์ ์๋ "๋๋ค I/O"์ "์์ฐจ I/O"์ ๋ํด ์ดํด ๋ณธ๋ค.
ํ๋์ ์ด๋ป๊ฒ ๋์คํฌ I/O๋ฅผ ์ค์ด๋๋๊ฐ ๊ด๊ฑด์ธ ๊ฒ๋ค์ด ๋ง๋ค.
์ฟผ๋ฆฌ ํ๋์ ํต์ฌ์ ๋์คํฌ์ ๋จ์ ์ ๋ณด์ํ๊ธฐ ์ํด์ ์ฟผ๋ฆฌ์ ์๋ ๋ฐฉ์์ ๊ฐ์ ํด์ผ ํ๋ ๊ฒ์ด๋ค. ์ผ๋ง๋ ๋๋ค I/O์ ํ์๋ฅผ ์ค์ด๋๋ ์ฆ, ์ฒ๋ฆฌ์ ๊ผญ ํ์ํ ๋ฐ์ดํฐ๋ง ์ฝ๋๋ก ์ฟผ๋ฆฌ๋ฅผ ๊ฐ์ ํ๋ ๊ฒ์ด๋ค.
1) ์ธ๋ฑ์ค๋?
- ์ฑ ์ ๋ง์ง๋ง์ ์๋ '์ฐพ์๋ณด๊ธฐ'๋ฅผ ์ธ๋ฑ์ค
- ์ฑ ์ ๋ด์ฉ์ ๋ฐ์ดํฐ ํ์ผ
- ์ฑ ์ ์ฐพ์๋ณด๊ธฐ์์ ์์๋ผ ์ ์๋ ํ์ด์ง ๋ฒํธ๋ ๋ฐ์ดํฐ ํ์ผ์์ ํด๋น ๋ ์ฝ๋์ ์ฃผ์์ ๋น์ ํ ์ ์๋ค.
DBMS๋ ์ฌ๋๊ณผ ๋๊ฐ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ธ์ ์ํ๋ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฐ์๋ ์๊ฐ์ด ๊ฑธ๋ฆฌ๊ธฐ ๋๋ฌธ์ ์ปฌ๋ผ(๋๋ ์ปฌ๋ผ๋ค)์ ๊ฐ๊ณผ ํด๋น ๋ ์ฝ๋๊ฐ ์ ์ฅ๋ ์์น๋ฅผ ํค์ ๊ฐ์ ์(Key-Value pair)์ผ๋ก ๊ด๋ฆฌํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ฑ ์ '์ฐพ์๋ณด๊ธฐ'์ DBMS ์ธ๋ฑ์ค์ ๊ณตํต์ ์ค์ ์ค์ํ ๊ฒ์ด ๋ฐ๋ก ์ ๋ ฌ์ด๋ค. ์ต๋ํ ๋น ๋ฅด๊ฒ ์ฐพ์ ์ ์๊ฒ ์์๋๋ก ์ ๋ ฌ๋ผ์๋๋ฐ, DBMS์ ์ธ๋ฑ์ค๋ ๋ง์ฐฌ๊ฐ์ง๋ก ์ปฌ๋ผ์ ๊ฐ์ ์ฃผ์ด์ง ์์๋ก ๋ฏธ๋ฆฌ ์ ๋ ฌํด์ ๊ฐ์ง๊ณ ์๋ค.
- ์ ๋ ฌ๋์ด ์๊ธฐ ๋๋ฌธ์ ๊ฐ์ ์์ฃผ ๋น ๋ฅด๊ฒ ์ฐพ์ ์ ์๋ค. = ์ฟผ๋ฆฌ๋ฅผ ๋งค์ฐ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌํ ์ ์๋ค. → ์ธ๋ฑ์ค๋ ๋ฐ์ดํฐ์ ์ ์ฅ ์ฑ๋ฅ์ ํฌ์ํด์ ์๋์ ์ผ๋ก ๋ฐ์ดํฐ์ ์ฝ๊ธฐ ์๋๋ฅผ ํฅ์์ํค๋ ์กด์ฌ์ด๋ค.
1-1) ์ธ๋ฑ์ค์ ๊ตฌ๋ถ
1-1-1) ์ญํ
- ํ๋ผ์ด๋จธ๋ฆฌํค(Primary key)
- ๋ํ๋จผํธ(๋ ์ฝ๋)๋ฅผ ๋ํํ๋ ํ๋๋ค์ ๊ฐ์ผ๋ก ๋ง๋ค์ด์ง ์ธ๋ฑ์ค
- ๋ํ๋จผํธ๋ฅผ ์๋ณํ ์ ์๋ ๊ธฐ์ค๊ฐ
- ์๋ณ์
- Null ํ์ฉ X
- ์ค๋ณต ํ์ฉ X
- ๋ณด์กฐ ํค(Secondary key)
- ํ๋ผ์ด๋จธ๋ฆฌ ํค๋ฅผ ์ ์ธํ ๋๋จธ์ง ๋ชจ๋ ์ธ๋ฑ์ค
1-1-2) ์ ์ฅ ๋ฐฉ์
- B-Tree ์ธ๋ฑ์ค
- ์์ค 99%์ ์ธ๋ฑ์ค์์ ์ฌ์ฉ
- Hash ์ธ๋ฑ์ค
- ๋ฉ๋ชจ๋ฆฌ ๊ธฐ๋ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฌ์ฉ๋จ
1-1-3) ์ค๋ณต ํ์ฉ ์ฌ๋ถ
- ์ ๋ํฌ ์ธ๋ฑ์ค
- ์ ๋ํฌํ์ง ์์ ์ธ๋ฑ์ค
์ธ๋ฑ์ค๊ฐ ์ ๋ํฌํ์ง ์๋์ง๋ ๋จ์ํ๊ฒ ๋์ผํ ๊ฐ์ด 1๊ฐ๋ง ์กด์ฌํ๋์ง 1๊ฐ ์ด์ ์กด์ฌํ ์ ์๋์ง๋ฅผ ์๋ฏธํ์ง๋ง, ์ค์ DBMS ์ ์ฟผ๋ฆฌ๋ฅผ ์คํํด์ผ ํ๋ ์ตํฐ๋ง์ด์ ์๊ฒ๋ ๋๋ฆ ์ค์ํ ๋ฌธ์ ์ด๋ค. ์ ๋ํฌ ์ธ๋ฑ์ค์ ๋ํด์ ๋๋ฑ ์กฐ๊ฑด(Equal, =)์ผ๋ก ๊ฒ์ํ๋ค๋ ๊ฒ์ ๊ทธ ์ฟผ๋ฆฌ๋ ํญ์ 1๊ฑด์ ๋ ์ฝ๋๋ง ๋ฆฌํดํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ฉฐ, ๋ฐ๋๋ก ์ผ์นํ๋ ๋ ์ฝ๋ 1๊ฑด๋ง ์ฐพ์ผ๋ฉด ๋ ์ฐพ์ง ์์๋ ๋๋ค๋ ๊ฒ์ ์ตํฐ๋ง์ด์ ์๊ฒ ์๋ ค ์ฃผ๋ ํจ๊ณผ๋ฅผ ๋ด๊ฒ ๋๋ค.
1-1-4) ๊ธฐ๋ฅ
- ์ ๋ฌธ ๊ฒ์์ฉ ์ธ๋ฑ์ค
- ๊ณต๊ฐ ๊ฒ์์ฉ ์ธ๋ฑ์ค
1-2) ์ธ๋ฑ์ค ๋ด๋ถ
MongoDB ์ ํ์ ์ธ B-Tree ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ๋ณด๋ฉด, MongoDB์ ํ๋ผ์ด๋จธ๋ฆฌ ํค๋ ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค๊ฐ ์๋๋ฏ๋ก ํ๋ผ์ด๋จธ๋ฆฌ ์ธ๋ฑ์ค์ ์ธ์ปจ๋๋ฆฌ ์ธ๋ฑ์ค ๊ฐ์ ๋ด๋ถ ๊ตฌ์กฐ์๋ ์ฐจ์ด๊ฐ ์ ํ ์๋ค.
(ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค : ์ธ๋ฑ์ค ์์ฑ์ ๋ฐ์ดํฐ ํ์ด์ง ์ ์ฒด๋ฅผ ๋ค์ ์ ๋ ฌ, ๋ฆฌํ ํ์ด์ง๊ฐ ๊ณง ๋ฐ์ดํฐ ํ์ด์ง. ๊ฒ์์ ๋น ๋ฅด์ง๋ง ์ ๋ ฅ/์์ /์ญ์ ๋ ๋นํด๋ฌ์คํฐํ๋ณด๋ค ๋๋ฆผ.)
1-3) ์ธ๋ฑ์ค ํค ์ํธ๋ฆฌ ์๋ฃ ๊ตฌ์กฐ
MongoDB๊ฐ ๋ํ๋จผํธ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ณ ๋ํ๋จผํธ๋ค์ ๋ด๋ถ์ ์ผ๋ก BSON์ด๋ผ๋ ํํ์ JSON์ ๋ณํ๋ ํฌ๋งท์ผ๋ก ์ ์ฅ๋๋ค. MongoDB์ ๋ํ๋จผํธ๋ค์ ํค-๊ฐ์์ผ๋ก ๋ JSON ํฌ๋งท์ ์ฌ์ฉํ๋ฏ๋ก ๋ฐ์ดํฐ ํ์ผ์ ํ๋๋ช ๊ณผ ํ๋ ๊ฐ์ด ๊ฐ์ด ์ ์ฅ๋๋ค.
๊ทธ๋์ RDBMS๋ณด๋ค ๋์คํฌ์ ์ ์ฅ๋๋ ๋ฐ์ดํฐ์ ์ฉ๋์ด ๋ ํฌ๋ค. ์ด๋ ๊ฒ ํค-๊ฐ ์์ผ๋ก ๊ตฌ์ฑ๋ ๋ํ๋จผํธ๋ MongoDB์ ์ปฌ๋ ์ ์๋ง ํด๋น๋๋ ์ด์ผ๊ธฐ์ด์ง, ์ธ๋ฑ์ค์ ๋ด๋ถ ์ ์ฅ ๊ตฌ์กฐ๋ ๋ํ๋จผํธ๋ BSON ์๋ฃ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค.
์ผ๋ฐ์ ์ผ๋ก MongoDB๋ฅผ "์คํค๋ง ํ๋ฆฌ(Schema-Free) ๋ฐ์ดํฐ๋ฒ ์ด์ค"๋ก ๋ง์ด ์๊ฐํ๋ค.์ด๋ ์ค์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ ์ปฌ๋ ์ ์๋ ๋ง๋ ์ด์ผ๊ธฐ์ด์ง๋ง, ์ธ๋ฑ์ค์์๋ ๋ง์ง ์๋๋ค.
MongoDB์ ์ธ๋ฑ์ค๋ ๋ด๋ถ์ ์ผ๋ก ๋ณ๋์ ์คํค๋ง๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ๊ฐ ์ธ๋ฑ์ค๊ฐ ์ด๋ค ์ข ๋ฅ์ ์ธ๋ฑ์ค์ด๊ณ ๊ทธ ์ธ๋ฑ์ค๋ค์ ๊ตฌ์ฑํ๋ ํ๋๊ฐ ์ด๋ค ๊ฒ์ธ์ง์ ๋ํ ๋ฉํ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
์ปฌ๋ ์ ์๋ ์ธ์ ๋ ์ง ์ํ๋ ํ๋๋ฅผ ๊ฐ๊ฐํ์ฌ ์ ์ฅํ ์ ์์ง๋ง, ์ธ๋ฑ์ค๋ฅผ ๋ค์ ์์ฑํ์ง ์๋ ์ด์ ์ธ๋ฑ์ค์๋ ์๋ก์ด ํ๋๋ฅผ ์ถ๊ฐํ ์ ์๋ค.
์ธ๋ฑ์ค๋ ์ด๋ฏธ ์คํค๋ง๋ฅผ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ์ธ๋ฑ์ค์ ๊ฐ ํค ์ํธ๋ฆฌ์ ํ๋๋ช ์ ๊ตณ์ด ์ ์ฅํ ํ์๊ฐ ์๋ค. ์ธ๋ฑ์คํ ์ปดํฉํธ(์ฉ๋์ ์๊ฒ ์ ์ง)ํ๊ฒ ์ ์งํด์ผ ํ๋ฏ๋ก ๊ตณ์ด ์ธ๋ฑ์ค ์ํธ๋ฆฌ์ ํ๋๋ช ์ ์ถ๊ฐํด์ ์ป์ ์ ์๋ ๊ฒ์ด ์๊ธฐ ๋๋ฌธ์ด๋ค.
2) B-Tree ์ธ๋ฑ์ค๋ฅผ ํตํ ๋ฐ์ดํฐ ์ฝ๊ธฐ
2-1) ์ธ๋ฑ์ค ๋ ์ธ์ง ์ค์บ
์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ ์ค์ ์ธ๋ฑ์ค ๋ ์ธ์ง ์ค์บ์ ํน์ ๋ฒ์ ๋ด์์ ์ธ๋ฑ์ค ์ค์บ์ ์์ํ ์์น๋ฅผ ์ ํํ์ฌ, ์ค์บ์ด ๋๋๊ณณ์์ ์ ์ ์๊ฒ ๊ฒฐ๊ณผ ๊ฐ์ ๋ฐํํ๋ ๋ฐฉ์์ผ๋ก, ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋๋ฐ ๊ฐ์ฅ ๋ํ์ ์ธ ์ ๊ทผ ๋ฐฉ๋ฒ์ด๋ค. ์์์ ์ ์ฐพ๊ธฐ ์ํด์ ๋ฃจํธ ๋ ธ๋์์๋ถํฐ ๋น๊ต๋ฅผ ์์ํ์ฌ, ๋ธ๋์น ๋ ธ๋๋ฅผ ๊ฑฐ์ณ ๋ง์ง๋ง์ ๋ฆฌํ ๋ ธ๋์ ์์ ์ง์ ์ ์ฐพ๋๋ค. ๋ฆฌํ ๋ ธ๋์์ ์์ ์ง์ ์ ์ฐพ๊ฒ ๋๋ฉด ๋ฆฌํ ๋ ธ๋๊ฐ์ ๋งํฌ๋ฅผ ์ด์ฉํ์ฌ ์ต์ข ์ง์ ๊น์ง ๋ฆฌํ ๋ ธ๋๋ง์ ์ด์ฉํด ์ค์บ์ ํ๋ค. ์ต์ข ์ง์ ์ ๋๋ฌํ๋ฉด ๊ฒฐ๊ณผ๊ฐ์ ์ ์ ์๊ฒ ๋ฐํํ๋ฉฐ ์ฒ๋ฆฌ ๊ณผ์ ์ด ์๋ฃ๋๋ค.
์ธ๋ฑ์ค์ ๋ฆฌํ ๋ ธ๋์์ ๊ฒ์ ์กฐ๊ฑด๊ณผ ์ผ์นํ๋ ๊ฐ๋ค์ ์ค์ ๋ฐ์ดํฐ ํ์ผ์์ ์ฝ์ด์ค๋ ๊ฒ์ ๋๋ค I/O๊ฐ ๋ฐ์ํ๋ ๋ถ๋ถ์ด๋ค. 10๊ฑด์ ๋ฐ์ดํฐ๊ฐ ๊ฒ์ ์กฐ๊ฑด์ ์ผ์นํ๋ค๋ฉด 10๋ฒ์ ๋๋ค I/O๊ฐ ๋ฐ์ํ๋ ๊ฒ์ด๋ฉฐ, ์ด๋ฌํ ์ด์ ๋ก ์ธ๋ฑ์ค๋ฅผ ํตํด ์ฝ์ด์ผํ๋ ๋ฐ์ดํฐ์ ์์ด ์ ์ฒด์ 15~20%๋ฅผ ๋์ผ๋ฉด ์ปฌ๋ ์ ํ ์ค์บ์ด ๋ ํจ์จ์ ์ ๋๋ค.
2-2) ์ธ๋ฑ์ค ํ๋ฆฌํฝ์ค(Prefix) ์ค์บ
๋ฌธ์์ด๋ก ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๋ ๊ฒฝ์ฐ, ๊ทธ ๋ฌธ์์ด๊ณผ ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ์ฐพ๋ ๊ฒ์ด ์๋๋ผ ์ผ๋ถ๋ง ์ผ์นํ๋ ํจํด์ ๊ฐ์ง ๊ฒ์์ ํ๊ฒ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ์ด ๊ฒฝ์ฐ MongoDB ์ญ์ ์ ๊ท์(Regular Expression)์ ์ด์ฉํ์ฌ ๋ฌธ์์ด ๊ฒ์์ ์ํํ ์ ์์ผ๋ฉฐ, MongoDB์ ์ ๊ท์์ PCRE(Perl Compatible Regular Expression)์ ์ ๊ทํํ์์ ์ฌ์ฉํ๋ค. ๊ธฐ์กด์ SQL์ ์ ๊ท์์ ์ต์ํ์ ๋ถ๋ค์ด๋ผ๋ฉด ์กฐ๊ธ ์ฌ์ฉ๋ฒ์ด ๋ค๋ฅด๋ค๊ณ ๋๊ปด์ง ์ ์๋ค.
$regex ์คํผ๋ ์ดํฐ๋ฅผ ์ด์ฉํ์ฌ ์ฌ์ฉ๊ฐ๋ฅํ๋ฉฐ, ๋๋ $regex ์คํผ๋ ์ดํฐ๋ฅผ ์๋ตํ๊ฑฐ๋ ๋ฐฐ์ด์ ์์๋ค์ ๋งค์นญ ์ํฌ๋ ์ฌ์ฉํ ์ ์๋ค.
2-3) ์ปค๋ฒ๋ง ์ธ๋ฑ์ค
MongoDB๋ ๋ฐ์ดํฐ ํ์ผ๋ฟ๋ง ์๋๋ผ ์ธ๋ฑ์ค์๋ ๊ฐ์ ๊ฐ์ง๊ณ ์๋ค. ๊ทธ๋์ ์ธ๋ฑ์ค์ ์๋ ๋ฐ์ดํฐ๊ฐ ์ผ์นํ๋ค๋ฉด ๋ฐ์ดํฐ ํ์ผ์ ์ ๊ทผํ์ง ์๊ณ , ์ธ๋ฑ์ค์์๋ง ๊ฐ์ ์ฐพ์ ๋น ๋ฅด๊ฒ ์ฌ์ฉ์์๊ฒ ๋ฐํํ๊ฒ ๋ฉ๋๋ค. ์ด๋ ๊ฒ ์ธ๋ฑ์ค๋ง ๊ฐ์ง๊ณ ๋ฐ์ดํฐ ๊ฐ์ ์กฐํํ ์ ์๋ ์ต์ ํ๋ฅผ ์ปค๋ฒ๋ง ์ธ๋ฑ์ค๋ผ๊ณ ํฉ๋๋ค. ์ปค๋ฒ๋ง ์ธ๋ฑ์ค๋ก ์ต์ ํ ๋์ด ์๋๊ฒฝ์ฐ ๋๋ค I/O๊ฐ ์ค์ด๋ค๊ณ , ์ฑ๋ฅ์ด ํฅ์๋๋ค.
MongoDB์ ๋ฐ์ดํฐ ํ์ผ์ ํฌ๊ธฐ๊ฐ ์ฆ๊ฐํ๋ฉด์ ์บ์์ ํ์ํ ๋ฐ์ดํฐ์ ์ ์ ์ฌํ์ง ๋ชปํ๋ ๊ฒฝ์ฐ ๊ณ์ํด์ ๋์คํฌ๋ฅผ ์ฝ์ด์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ผ ํ๋ ์ํฉ์ด ๋ฐ์ํ๋ค. ์ด๋ ํ์ ํ ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ํ๋๋ฐ, ์ด๋ฐ ๊ฒฝ์ฐ ์ปค๋ฒ๋ง ์ธ๋ฑ์ค๋ฅผ ํตํด ์ฑ๋ฅ์ ํฅ์ ์ํฌ ์ ์๋ค.
2-4) ์ธ๋ฑ์ค ํ ์ค์บ
์ธ๋ฑ์ค์ ์ฌ์ด์ฆ๋ ์ปฌ๋ ์ ์ ์ฌ์ด์ฆ ๋ณด๋ค ์์ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ฉฐ ์ปฌ๋ ์ ์ ํ์ค์บ ํ๋ ๊ฒ๋ณด๋ค๋ ์ธ๋ฑ์ค๋ฅผ ํ ์ค์บ ํ๋ ๊ฒ์ด ํจ์จ์ ์ด๋ค. ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ๋ ํน์ ํ๋ ๊ฐ ์ ์ฒด๋ฅผ ๊ฐ์ง๊ณ ์ฒ๋ฆฌํด์ผ ํ๋ ์ํฉ์์ ํด๋น ํ๋์ ์ธ๋ฑ์ค๊ฐ ์์ฑ๋์ด ์๋ค๋ฉด, ์ปฌ๋ ์ ์ ๋ฐ์ดํฐ์ ์์ธ์ค ํ์ง ์๊ณ , ์์ํ๋ ์ธ๋ฑ์ค๋ฅผ ํ์ค์บ ํ์ฌ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ๋ ์ธ์ง ์ค์บ ๋ณด๋ค๋ ๋๋ฆฌ์ง๋ง, ์ปฌ๋ ์ ํ ์ค์บ ๋ณด๋ค๋ ๋น ๋ฅด๊ธฐ ๋๋ฌธ์ ํน์ ํ๋๋ฅผ ๋ชจ๋ ์กฐํํ๋ ๊ฒฝ์ฐ๊ฐ ์ฆ๋ค๋ฉด ์ธ๋ฑ์ค ํ ์ค์บ์ ํตํด ์ ์ฒด ํ๋ ๊ฐ์ ๊ฐ์ ธ์ฌ ์ ์๋ค.
2-5) ์ปดํ์ด๋ ์ธ๋ฑ์ค (Compound Index)
์ปดํ์ด๋ ์ธ๋ฑ์ค๋ ํ๋์ ํ๋๊ฐ ์๋ 2๊ฐ ์ด์์ ํ๋๋ฅผ ์กฐํฉํ์ฌ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋ ๊ฒ์ด๋ค. ์ด๋ ํ๋์ ์์๊ฐ ์ค์ํ๋ฐ, ์์ชฝ์ ์ค์ ํ ํ๋์ ๊ฐ์ ๋จผ์ ์ฝ๊ณ , ๋ ๋ฒ์งธ ํ๋๋ก ๋์ด๊ฐ๊ธฐ ๋๋ฌธ์ด๋ค. ์ค์ ๋ก ์ฒซ ๋ฒ์งธ ํ๋์ ์ ๋ ฌ์ ๋ฆฌํ ๋ ธ๋์ ํ์ด์ง ์์๋๋ก ์ ๋ ฌ์ด ๋์ด ์ ์ฅ์ด ๋์ง๋ง, ๋ ๋ฒ์ฌ ํ๋๋ ๋ฆฌํ ๋ ธ๋์ ๊ฐ๊ฐ์ ํ์ด์ง ์์์ ์๋ก ์ ๋ ฌ๋๊ธฐ ๋๋ฌธ์ ๋ ๋ฒ์งธ ํ๋์ ์ ๋ ฌ ์์๊ฐ ๋น ๋ฅด๋ค ํ์ฌ๋, ์ฒซ ๋ฒ์งธ ํ์ด์ง์ ์ ๋ ฌ ์์๊ฐ ๋ฆ๋ค๋ฉด ์ธ๋ฑ์ค ๋ค์ชฝ์ ์์นํ ์๋ ์๋ค.
2-5-1) ๋ณตํฉ ํ๋ ์ธ๋ฑ์ค
์ปดํ์ด๋ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋ ๊ฒฝ์ฐ์ ์ธ๋ฑ์ค๋ฅผ ๊ตฌ์ฑํ๋ ํ๋๋ค์ด ์๋ก ๋ค๋ฅธ ์ ๋ ฌ ๋ฐฉ์์ ๊ฐ์ง ์๋ ์๋ค. ๋ง์ฝ ์ฒซ ๋ฒ์งธ ํ๋๋ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๊ณ , ๋ ๋ฒ์งธ ํ๋๋ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค๋ฉด ์ ๋ ฌ ๋ฐฉ์์ ํผํฉํด์ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋ ๊ฒ๋ง์ผ๋ก ์ ๋ ฌํจ๊ณผ๋ฅผ ๊ฐ์ง ์ ์๋ค.
MongoDB์์๋ ์ ๋ฌธ ๊ฒ์ ์ธ๋ฑ์ค์ ์ผ๋ฐ ๋จ์ผ ํ๋์ ๊ฒฐํฉํด์ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ ์๋ ์๊ณ , ๊ณต๊ฐ ์ธ๋ฑ์ค์ ๋จ์ผ ํ๋๊ฐ์ ์กฐํฉํด์ ์ธ๋ฑ์ค๋ฅผ ๋ง๋ค ์๋ ์์ต๋๋ค. ๋ MongoDB์ ์ปดํ์ด๋ ์ธ๋ฑ์ค๋ ๊ฒฐํฉ๋ ํ๋ ๋จ์๋ก ์ ๋ ฌ ์์๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ ์ฅ์ ์ด ์์ต๋๋ค.
2-6) MongoDB์ Hash Index
ํด์ ์ธ๋ฑ์ค๋ B-Tree ๋งํผ ๋ฒ์ฉ์ ์ด์ง๋ ์์ง๋ง ๊ณ ์ ์ ํน์ฑ๊ณผ ์ฉ๋๋ฅผ ์ง๋ ์ธ๋ฑ์ค ์ค์ ํ๋๋ก, ์ฃผ์ด์ง ํค ๊ฐ์ ์ด์ฉํ์ฌ ๋ชฉํ ๋ ์ฝ๋์ ์ฃผ์๋ฅผ ์ง์ ์ ์ผ๋ก ๊ณ์ฐํ๋ ๋ฐฉ์์ด๋ค. ๋ฐ๋ผ์ ๋จ์ผ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ์๋ ์ต์ ํ ๋์ด ์์ง๋ง, ๋ฒ์๋ฅผ ๊ฒ์ํ๋ค๊ฑฐ๋, ์ ๋ ฌ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์จ๋ค๊ฑฐ๋ ํ๋ ๋ฐฉ์์๋ ์ฌ์ฉ๋์ง ์๋๋ค. ํค ๊ฐ์ ์ฐ์ฐ(ํด์ฑํจ์)๋ฅผ ์ ์ฉํ์ฌ ์ฐพ๊ณ ์ ํ๋ ๋ ์ฝ๋๊ฐ ์๋ ์์น ์ฃผ์์ ๋ฐ๋ก ์ ๊ทผํ๋ค. ์ผ๋ฐ์ ์ธ DBMS์์ ํด์ ์ธ๋ฑ์ค๋ ๋ฉ๋ชจ๋ฆฌ ๊ธฐ๋ฐ์ ํ ์ด๋ธ์ ์ฃผ๋ก ๊ตฌํ๋ผ ์์ผ๋ฉฐ ๋์คํฌ ๊ธฐ๋ฐ์ ๋์ฉ๋ ํ ์ด๋ธ์ฉ์ผ๋ก๋ ๊ฑฐ์ ์ฌ์ฉ๋์ง ์๋๋ค๋ ํน์ง์ด ์๋ค.
MongoDB์์๋ ํด์ ์ธ๋ฑ์ค๋ฅผ ์ง์ํ๋ฉฐ, MongoDB์์์ ํด์ ์ธ๋ฑ์ค๋ ์ฟผ๋ฆฌ์ ๊ฒ์ ์ฑ๋ฅ์ ๋์ด๋๋ฐ ์ฌ์ฉํ๊ธฐ ๋ณด๋ค๋ ํด์ ์ค๋ฉ์ ๊ตฌํํ๊ธฐ ์ํด ๋ ๋ง์ด ์ฌ์ฉํ๋ค.
2-7) ๋ฉํฐ ํค ์ธ๋ฑ์ค (Multi key Index)
MongoDB๋ ๋ํ๋จผํธ ๊ธฐ๋ฐ์ ๋น์ ๊ทํ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ด๋ค. ๋ฐ๋ผ์ ํ๋์ ๋ํ๋จผํธ๊ฐ ๋ฐฐ์ด ํํ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ด ๋ฐ์ํ๋๋ฐ, ๋ฐฐ์ด์ ๊ฐ ์์ดํ ์ ๊ฒ์ํ ์ ์๋ ์ธ๋ฑ์ค๊ฐ ๊ผญ ํ์ํ๋ค. ๊ทธ๋์ MongoDB์์๋ ๋ฉํฐ ํค ์ธ๋ฑ์ค๊ฐ ์กด์ฌํ๋ค. ๋ฉํฐ ํค ์ธ๋ฑ์ค๋ ๋ฐฐ์ด ํ๋์ ๋ํ ํจ์จ์ ์ธ ์ฟผ๋ฆฌ๋ฅผ ์ง์ํ๋ฉฐ, ์ค์นผ๋ผ ๊ฐ ๋ฐ ์๋ธ ๋ํ๋จผํธ ์ ์ฅ๋ ๋ฐฐ์ด์ ํตํด ๊ตฌ์ฑ๋๋ค. ํ๋์ ๋ํ๋จผํธ์ ์ฌ๋ฌ ๊ฐ์ ์ธ๋ฑ์ค ํค๋ฅผ ๊ฐ์ง๋ ํํ์ด๋ฉฐ, ๋ฐ๋๋ก ๋ณด๋ฉด ์ฌ๋ฌ ์ธ๋ฑ์ค ํค๊ฐ ํ๋์ ๋ํ๋จผํธ๋ฅผ ๋ฐ๋ผ๋ณด๋ ๊ตฌ์กฐ๋ฅผ ์๋ฏธํ๋ค.
2-7-1) ๋ฉํฐ ํค ์ธ๋ฑ์ค์ ์ ๋ ฌ
MongoDB 3.6์์ ๋ฐฐ์ด ํ๋์ ๋ํ ์ ๋ ฌ ๋์์ด ๋ณ๊ฒฝ๋์๋๋ฐ, ๋ฉํฐํค ์ธ๋ฑ์ค๋ก ์ธ๋ฑ์ฑ๋ ๋ฐฐ์ด์์ ์ ๋ ฌ ํ ๋ ์ฟผ๋ฆฌ ๊ณํ์ blocking SORT ์คํ ์ด์ง๊ฐ ํฌํจ๋๋ค. ์๋ก์ด ์ ๋ ฌ ๋์์ ์ฑ๋ฅ์ ๋ถ์ ์ ์ธ ์ํฅ์ ๋ฏธ์น ์๋ ์๋ค. Blocking SORT์์ ๋ชจ๋ ์ ๋ ฅ์ ๊ฒฐ๊ณผ ๊ฐ์ ๋ฐํํ๊ธฐ ์ ์ ์ ๋ ฌ ๋จ๊ณ์์ ์ด๋ค์ ธ์ผ ํ๋ค. non-blocking SORT ๋๋ indexed SORT์์์ ์ ๋ ฌ ๋จ๊ณ๋ ์ธ๋ฑ์ค๋ฅผ ์ค์บํ์ฌ ์์ฒญ ๋ ์์๋ก ๊ฒฐ๊ณผ๋ฅผ ์์ฑํ๋ค.
2-8) Full Text Search Index (์ ๋ฌธ ๊ฒ์ ์ธ๋ฑ์ค)
DBMS์์ ์ผ๋ฐ์ ์ผ๋ก ์ ๋ฌธ ๊ฒ์ ์์ง์ ๊ตฌ์ถํ ๋ ์ฌ์ฉํ๋ ์๊ณ ๋ฆฌ์ฆ์ ํฌ๊ฒ ๋ ๊ฐ์ง๋ก ๋๋์ ์๋ค. ํ๋๋ ํํ์ ๋ถ์(์ด๊ทผ ๋ถ์, stemming)๊ณผ N-Gram 2๊ฐ์ง๋ก ๋๋์ด์ง๋ค. ๋ช ์ฌ์ ์กฐ์ฌ ์ฌ์ด๋ฅผ ๋์ด์ฐ๊ธฐ๋ฅผ ํ์ฌ ์ฌ์ฉํ๋ ์๊ตฌ๊ถ ์ธ์ด์์๋ ํํ์ ๋ถ์ ๋ฐฉ๋ฒ์ด ์ฃผ๋ก ์ฌ์ฉ๋๋ค. ํ์ง๋ง, ๋ช ์ฌ์ ์กฐ์ฌ ์ฌ์ด์ ๋ณ๋์ ๊ตฌ๋ถ ๋ฌธ์๊ฐ ์์ด ์ฐ๊ฒฐ๋๋ ์์์๊ถ ์ธ์ด, ํนํ ํ๊ตญ์ด, ์ผ๋ณธ์ด, ์ค๊ตญ์ด์์๋ ์ด๊ทผ ๋ถ์์ด ๊น๋ค๋กญ๊ธฐ ๋๋ฌธ์ ํํ์ ๋ถ์ ๋ณด๋ค๋ N-Gram์ ์ฃผ๋ก ์ฌ์ฉํ๋ค.
MongoDB์ Text Search๋ ํํ์ ๋ถ์ ๋ฐฉ๋ฒ์ ์ง์ํ์ง ์๋๋ค.(..!) ํ๊ตญ์ด ์ง์ ์ญ์ ์์ผ๋ฉฐ, ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ํ๊ธ์ ๋ํ ์ ๋ฌธ ๊ฒ์์์ง์ ์ฌ์ฉํ๋๋ฐ ๋ง์ ์ ์ฝ์ด ์๋ค. ๋ฐ๋ผ์ ํ๊ธ ๊ฒ์์ด ๋๋ฐ๋์ด์ผ ํ๋ ์ํฉ์ด๋ผ๋ฉด ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ ์ ๋ฐ์ ์๋ค.
2-8-1) N-Gram ์๊ณ ๋ฆฌ์ฆ
N-Gram์ด๋ ๊ฐ๋จํ๊ฒ ๋งํด์ ์ ๋ ฅํ ๋ฌธ์์ด์ N๊ฐ์ ๊ธฐ์ค ๋จ์๋ก ์ ๋จํ๋ ๋ฐฉ๋ฒ์ด๋ค. ๊ฐ๊ณ ์๋ n๊ฐ์ ๋จ์ด ๋ญ์น ๋จ์๋ก ๋์ด์ ์ด๋ฅผ ํ๋์ ํ ํฐ์ผ๋ก ๊ฐ์ฃผํ๋ค. ์๋ฅผ ๋ค์ด์ ๋ฌธ์ฅ An adorable little boy is spreading smiles์ด ์์ ๋, ๊ฐ n์ ๋ํด์ n-gram์ ์ ๋ถ ๊ตฌํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
- unigrams : an, adorable, little, boy, is, spreading, smiles
- bigrams(2-gram): an adorable, adorable little, little boy, boy is, is spreading, spreading smiles
- trigrams(3-gram): an adorable little, adorable little boy, little boy is, boy is spreading, is spreading smiles
- 4-grams : an adorable little boy, adorable little boy is, little boy is spreading, boy is spreading smiles
์์ ์์์ฒ๋ผ ์์ด๋ ๋ณดํต ๋จ์ด ๋จ์๋ก ์๋ฅด๋๋ฐ, ํ๊ตญ์ด์ ๊ฒฝ์ฐ๋ ์์ ๋จ์๋ก ์๋ฅด๊ธฐ ๋๋ฌธ์ ์กฐ๊ธ ๋ค๋ฅด๋ค. “๋๋ ๋ฐฐ๊ฐ ์ํ์ ๊ฑธ์ด์ ์ง์ ๊ฐ์ต๋๋ค”๋ฅผ 3-gram์ผ๋ก ๋๋๋ฉด
“๋๋_”, “๋_๋ฐฐ”, “_๋ฐฐ๊ฐ”, “๋ฐฐ๊ฐ_”, “๊ฐ_์”, “_์ํ”, “์ํ์”, “ํ์_”, “์_๊ฑธ”, “_๊ฑธ์ด”, “๊ฑธ์ด์”, “์ด์_”, “์_๊ฐ”, “_๊ฐ์ต”, “๊ฐ์ต๋”, “์ต๋๋ค”
์ด๋ ๊ฒ ์์ ๋จ์๋ก ๋๋์ด์ง๊ฒ ๋๊ณ , ๋ถ์ฉ์ด ์ ๊ฑฐ ๋จ๊ณ๊ฐ ์๊ณ , ํ ํฌ๋์ด์ง ๊ฒฐ๊ณผ์์ ์ค๋ณต ๋จ์ ๋ฌธ์์ด์ ์ค๋ณต์ด ์ ๊ฑฐ ๋๋ฉฐ ์ ๋ํฌํ ๋จ์ ๋ฌธ์์ด๋ง ์ ๋ฌธ ์ธ๋ฑ์ค์ ์ถ๊ฐ๋๋ค.
ํํ์ ๋ถ์๊ณผ N-Gram์ ์ฅ๋จ์
ํํ์ ๋ถ์N-Gram
์ธ์ด ์์กด๋ | ๊ตญ๊ฐ๋ง๋ค ์ฌ์ฉํ๋ ์ธ์ด์ ๋ง๋ ์๊ณ ๋ฆฌ์ฆ์ด ํ์ | ์ธ์ด์ ํน์ฑ๊ณผ ๋ฌด๊ด |
์ธ๋ฑ์ค ํฌ๊ธฐ | ๋ถ์ฉ์ด๋ฅผ ์ ๊ฑฐ ํ ์ ๋ํฌํ ํค์๋๋ง ์ธ๋ฑ์ฑํ๊ธฐ ๋๋ฌธ์ ํฌ๊ธฐ๊ฐ ์์ | ๋ฌธ์์ด์ ๋ฐ์ดํธ ์๋ก ์๋ผ์ ๋ชจ๋ ๋ถ๋ถ์ ์ธ๋ฑ์ฑ ํ๊ธฐ์ ๊ฒ์์ ๊ฐ์น๊ฐ ์๋ ๋ถ๋ถ๋ ์ธ๋ฑ์ฑํ๋ฉฐ, ๋๋ก๋ 2๊ฐ ์ด์์ ์ธ๋ฑ์ค๊ฐ ํ์ํ ๋๋ ์์ด ๋ฐ๋ผ์ ์ฉ๋์ด ํผ |
์ฑ๋ฅ | ์ธ๋ฑ์ค์ ํฌ๊ธฐ๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ์ด ๋น ๋ฆ | ๋ง์ ์ธ๋ฑ์ค ํค๋ฅผ ๊ด๋ฆฌํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ฆผ |
๊ฒ์ ํ์ง | ํํ์ ๋ถ์ ์๊ณ ๋ฆฌ์ฆ์ ๋ฐ๋ผ ํ์ง์ ์ฐจ์ด๊ฐ ๋ง์ด ๋๋ฉฐ, ์๊ณ ๋ฆฌ์ฆ์ ๋ง์ ๋ ธ๋ ฅ๊ณผ ์๊ฐ์ด ํ์ | ์ ์ ๋ ธ๋ ฅ๊ณผ ์๊ฐ์ผ๋ก ํ๊ท ์ด์์ ๊ฒ์ ํ์ง์ด ๋ณด์ฅ |
์ฐธ๊ณ ์๋ฃ
RealMongoDB