๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’Ž/mongoDB

[mongoDB] ์ธ๋ฑ์Šค(Index)

by dar0m! 2022. 7. 18.
  • 1) ์ธ๋ฑ์Šค๋ž€?
    • 1-1) ์ธ๋ฑ์Šค์˜ ๊ตฌ๋ถ„
      • 1-1-1) ์—ญํ• 
      • 1-1-2) ์ €์žฅ ๋ฐฉ์‹
      • 1-1-3) ์ค‘๋ณต ํ—ˆ์šฉ ์—ฌ๋ถ€
      • 1-1-4) ๊ธฐ๋Šฅ
    • 1-2) ์ธ๋ฑ์Šค ๋‚ด๋ถ€
    • 1-3) ์ธ๋ฑ์Šค ํ‚ค ์—”ํŠธ๋ฆฌ ์ž๋ฃŒ ๊ตฌ์กฐ
  • 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) ์—ญํ• 

  1. ํ”„๋ผ์ด๋จธ๋ฆฌํ‚ค(Primary key)
    1. ๋„ํ๋จผํŠธ(๋ ˆ์ฝ”๋“œ)๋ฅผ ๋Œ€ํ‘œํ•˜๋Š” ํ•„๋“œ๋“ค์˜ ๊ฐ’์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ์ธ๋ฑ์Šค
    2. ๋„ํ๋จผํŠธ๋ฅผ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ์ค€๊ฐ’
    3. ์‹๋ณ„์ž
    4. Null ํ—ˆ์šฉ X
    5. ์ค‘๋ณต ํ—ˆ์šฉ X
  2. ๋ณด์กฐ ํ‚ค(Secondary key)
    1. ํ”„๋ผ์ด๋จธ๋ฆฌ ํ‚ค๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ๋ชจ๋“  ์ธ๋ฑ์Šค

1-1-2) ์ €์žฅ ๋ฐฉ์‹

  1. B-Tree ์ธ๋ฑ์Šค
    1. ์‹œ์ค‘ 99%์˜ ์ธ๋ฑ์Šค์—์„œ ์‚ฌ์šฉ
  2. Hash ์ธ๋ฑ์Šค
    1. ๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๋ฐ˜์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์‚ฌ์šฉ๋จ

1-1-3) ์ค‘๋ณต ํ—ˆ์šฉ ์—ฌ๋ถ€

  1. ์œ ๋‹ˆํฌ ์ธ๋ฑ์Šค
  2. ์œ ๋‹ˆํฌํ•˜์ง€ ์•Š์€ ์ธ๋ฑ์Šค

์ธ๋ฑ์Šค๊ฐ€ ์œ ๋‹ˆํฌํ•œ์ง€ ์•„๋‹Œ์ง€๋Š” ๋‹จ์ˆœํ•˜๊ฒŒ ๋™์ผํ•œ ๊ฐ’์ด 1๊ฐœ๋งŒ ์กด์žฌํ•˜๋Š”์ง€ 1๊ฐœ ์ด์ƒ ์กด์žฌํ•  ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ์˜๋ฏธํ•˜์ง€๋งŒ, ์‹ค์ œ DBMS ์˜ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•ด์•ผ ํ•˜๋Š” ์˜ตํ‹ฐ๋งˆ์ด์ €์—๊ฒŒ๋Š” ๋‚˜๋ฆ„ ์ค‘์š”ํ•œ ๋ฌธ์ œ์ด๋‹ค. ์œ ๋‹ˆํฌ ์ธ๋ฑ์Šค์— ๋Œ€ํ•ด์„œ ๋™๋“ฑ ์กฐ๊ฑด(Equal, =)์œผ๋กœ ๊ฒ€์ƒ‰ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๊ทธ ์ฟผ๋ฆฌ๋Š” ํ•ญ์ƒ 1๊ฑด์˜ ๋ ˆ์ฝ”๋“œ๋งŒ ๋ฆฌํ„ดํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๋ฉฐ, ๋ฐ˜๋Œ€๋กœ ์ผ์น˜ํ•˜๋Š” ๋ ˆ์ฝ”๋“œ 1๊ฑด๋งŒ ์ฐพ์œผ๋ฉด ๋” ์ฐพ์ง€ ์•Š์•„๋„ ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์˜ตํ‹ฐ๋งˆ์ด์ €์—๊ฒŒ ์•Œ๋ ค ์ฃผ๋Š” ํšจ๊ณผ๋ฅผ ๋‚ด๊ฒŒ ๋œ๋‹ค.

1-1-4) ๊ธฐ๋Šฅ

  1. ์ „๋ฌธ ๊ฒ€์ƒ‰์šฉ ์ธ๋ฑ์Šค
  2. ๊ณต๊ฐ„ ๊ฒ€์ƒ‰์šฉ ์ธ๋ฑ์Šค

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๊ฐœ ์ด์ƒ์˜ ์ธ๋ฑ์Šค๊ฐ€ ํ•„์š”ํ•  ๋•Œ๋„ ์žˆ์–ด ๋”ฐ๋ผ์„œ ์šฉ๋Ÿ‰์ด ํผ
์„ฑ๋Šฅ ์ธ๋ฑ์Šค์˜ ํฌ๊ธฐ๊ฐ€ ์ž‘๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ์ด ๋น ๋ฆ„ ๋งŽ์€ ์ธ๋ฑ์Šค ํ‚ค๋ฅผ ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋Š๋ฆผ
๊ฒ€์ƒ‰ ํ’ˆ์งˆ ํ˜•ํƒœ์†Œ ๋ถ„์„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋”ฐ๋ผ ํ’ˆ์งˆ์˜ ์ฐจ์ด๊ฐ€ ๋งŽ์ด ๋‚˜๋ฉฐ, ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋งŽ์€ ๋…ธ๋ ฅ๊ณผ ์‹œ๊ฐ„์ด ํ•„์š” ์ ์€ ๋…ธ๋ ฅ๊ณผ ์‹œ๊ฐ„์œผ๋กœ ํ‰๊ท  ์ด์ƒ์˜ ๊ฒ€์ƒ‰ ํ’ˆ์งˆ์ด ๋ณด์žฅ

 


์ฐธ๊ณ  ์ž๋ฃŒ 

rastalion.me

RealMongoDB

'๐Ÿ’Ž > mongoDB' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[mongoDB] ์ƒค๋”ฉ(Sharding)  (0) 2022.07.18
[mongoDB] WiredTiger ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„  (0) 2022.07.15

๋Œ“๊ธ€