MongoDB.local SF, Jan 15: See the speaker lineup & ship your AI vision faster. Use WEB50 to save 50%
Find out more >
Docs Menu
Docs Home
/ /
데이터 μ„Όν„° 인식

Zones

μƒ€λ”©λœ ν΄λŸ¬μŠ€ν„°μ—μ„œλŠ” μƒ€λ“œ ν‚€ λ₯Ό 기반으둜 μƒ€λ”©λœ λ°μ΄ν„°μ˜κ΅¬μ—­ 을 λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€. 각 ꡬ역 을 ν΄λŸ¬μŠ€ν„° 에 μžˆλŠ” ν•˜λ‚˜ μ΄μƒμ˜ μƒ€λ“œμ™€ μ—°κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μƒ€λ“œ λŠ” μ—¬λŸ¬ 개의 ꡬ역과 μ—°κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€. κ· ν˜• 작힌 ν΄λŸ¬μŠ€ν„° μ—μ„œ MongoDB λŠ” ꡬ역 에 ν¬ν•¨λœ 청크 λ₯Ό ν•΄λ‹Ή ꡬ역 κ³Ό κ΄€λ ¨λœ μƒ€λ“œλ‘œλ§Œ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ν•©λ‹ˆλ‹€.

ꡬ역을 μ μš©ν•  수 μžˆλŠ” λͺ‡ κ°€μ§€ 일반적인 배포 νŒ¨ν„΄μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

  • νŠΉμ • μƒ€λ“œ μ„ΈνŠΈμ—μ„œ λ°μ΄ν„°μ˜ νŠΉμ • ν•˜μœ„ 집합을 κ²©λ¦¬ν•©λ‹ˆλ‹€.

  • κ°€μž₯ 관련성이 높은 데이터가 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„œλ²„μ™€ μ§€λ¦¬μ μœΌλ‘œ κ°€μž₯ κ°€κΉŒμš΄ μƒ€λ“œμ— μžˆλŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€.

  • μƒ€λ“œ ν•˜λ“œμ›¨μ–΄μ˜ ν•˜λ“œμ›¨μ–΄/μ„±λŠ₯을 기반으둜 데이터λ₯Ό μƒ€λ“œλ‘œ λΌμš°νŒ…ν•©λ‹ˆλ‹€.

λ‹€μŒ μ΄λ―Έμ§€λŠ” 3개의 μƒ€λ“œμ™€ 2개의 ꡬ역이 μžˆλŠ” μƒ€λ”©λœ ν΄λŸ¬μŠ€ν„°λ₯Ό λ³΄μ—¬μ€λ‹ˆλ‹€. A ꡬ역은 ν•˜ν•œμ΄ 1이고 μƒν•œμ΄ 10인 λ²”μœ„λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€. B ꡬ역은 ν•˜ν•œμ΄ 10이고 μƒν•œμ΄ 20인 λ²”μœ„λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€. μƒ€λ“œ Alpha 및 Betaμ—λŠ” A ꡬ역이 μžˆμŠ΅λ‹ˆλ‹€. μƒ€λ“œ Beta에도 B ꡬ역이 μžˆμŠ΅λ‹ˆλ‹€. μƒ€λ“œ Charlie에 μ—°κ²°λœ ꡬ역이 μ—†μŠ΅λ‹ˆλ‹€. ν΄λŸ¬μŠ€ν„°λŠ” μ•ˆμ •λœ μƒνƒœμ΄λ©° ꡬ역을 μœ„λ°˜ν•˜λŠ” μ²­ν¬λŠ” μ—†μŠ΅λ‹ˆλ‹€.

μƒ€λ“œ ν΄λŸ¬μŠ€ν„°μ˜ ꡬ역을 기반으둜 ν•˜λŠ” 데이터 뢄포 λ‹€μ΄μ–΄κ·Έλž¨
ν΄λ¦­ν•˜μ—¬ ν™•λŒ€

각 ꡬ역은 collection의 μƒ€λ“œ ν‚€ κ°’ 쀑 ν•˜λ‚˜ μ΄μƒμ˜ λ²”μœ„λ₯Ό ν¬ν•¨ν•©λ‹ˆλ‹€. ꡬ역이 ν¬ν•¨ν•˜λŠ” 각 λ²”μœ„λŠ” 항상 ν•˜ν•œμ„ λ₯Ό ν¬ν•¨ν•˜λ©° μƒν•œμ„ μ€ μ œμ™Έν•©λ‹ˆλ‹€. ꡬ역은 λ²”μœ„λ₯Ό κ³΅μœ ν•  수 μ—†μœΌλ©° λ²”μœ„κ°€ 쀑볡될 μˆ˜λ„ μ—†μŠ΅λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄ {"x": 1}에 μžˆλŠ” μƒ€λ“œ ν‚€λ₯Ό 생각해 λ³΄κ² μŠ΅λ‹ˆλ‹€. ν΄λŸ¬μŠ€ν„°μ˜ ꡬ역 λ²”μœ„λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

{ "x" : 5 } --> { "x" : 10 } // Zone A
{ "x" : 10} --> { "x" : 20 } // Zone B
  • μƒ€λ“œ ν‚€ 값이 7인 λ¬Έμ„œκ°€ ꡬ역 A둜 λΌμš°νŒ…λ©λ‹ˆλ‹€.

  • μƒ€λ“œ ν‚€ 값이 10인 λ¬Έμ„œκ°€ ꡬ역 B둜 λΌμš°νŒ…λ©λ‹ˆλ‹€.

μƒ€λ“œ 킀에 ν•΄μ‹œ ν•„λ“œκ°€ ν¬ν•¨λœ collection의 경우 ν•΄λ‹Ή ν•„λ“œμ˜ ꡬ역 λ²”μœ„μ™€ 데이터 λΆ„ν¬λŠ” ν•΄μ‹œ 값을 기반으둜 ν•©λ‹ˆλ‹€. 이 κ΅¬μ—­μ—λŠ” ν•΄μ‹œ μƒ€λ“œ ν‚€ 값이 μ •μ˜λœ λ²”μœ„μ— μ†ν•˜λŠ” λ¬Έμ„œκ°€ ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. ν•΄μ‹œ ν•„λ“œμ˜ ꡬ역 λ²”μœ„λŠ” ν•΄μ‹œλ˜μ§€ μ•Šμ€ ν•„λ“œμ˜ ꡬ역 λ²”μœ„μ™€ 예츑 κ°€λŠ₯ν•œ λ¬Έμ„œ λΌμš°νŒ… λ™μž‘μ΄ λ™μΌν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄ {"x" : "hashed"}에 μžˆλŠ” μƒ€λ“œ ν‚€λ₯Ό κ°€μ •ν•΄ λ³΄κ² μŠ΅λ‹ˆλ‹€. λ‹€μŒ λ²”μœ„λŠ” 5λΆ€ν„° 10 μ‚¬μ΄μ˜ ν•΄μ‹œλœ λ²”μœ„λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

{ "x": NumberLong("4470791281878691347") } --> { "x": NumberLong("7766103514953448109") } // Zone A
  • μƒ€λ“œ ν‚€ 값이 1인 λ¬Έμ„œλŠ” ν•΄μ‹œ κ°’ 1이 μ •μ˜λœ λ²”μœ„μ— μ†ν•˜κΈ° λ•Œλ¬Έμ— μ—­ A둜 λΌμš°νŒ…λ©λ‹ˆλ‹€.

  • μƒ€λ“œ ν‚€ 값이 15인 λ¬Έμ„œλŠ” ν•΄μ‹œ κ°’ 15이 μ •μ˜λœ λ²”μœ„μ— μ†ν•˜κΈ° λ•Œλ¬Έμ— μ—­ A둜 λΌμš°νŒ…λ©λ‹ˆλ‹€.

  • μƒ€λ“œ ν‚€ 값이 8인 λ¬Έμ„œλŠ” ν•΄μ‹œ κ°’ 8이 μ •μ˜λœ λ²”μœ„μ— μ†ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— ꡬ역 A둜 λΌμš°νŒ…λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

mongoshλŠ” μ§€μ •λœ λ§€κ°œλ³€μˆ˜μ˜ 포슀트 ν•΄μ‹œ 값을 κ³„μ‚°ν•˜κΈ° μœ„ν•œ convertShardKeyToHashed()λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

ν•΄μ‹œ ν•„λ“œμ—μ„œ ꡬ역 λ²”μœ„λ₯Ό μ‚¬μš©ν•˜λŠ” ν•œ κ°€μ§€ μœ νš¨ν•œ 방법은 collection의 데이터λ₯Ό 단일 κ΅¬μ—­μ˜ μƒ€λ“œλ‘œ μ œν•œν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. minKey λ₯Ό ν•˜ν•œμœΌλ‘œ, maxkey λ₯Ό μƒν•œμœΌλ‘œ μ‚¬μš©ν•˜μ—¬ κ°€λŠ₯ν•œ ν•΄μ‹œ μƒ€λ“œ ν‚€ κ°’μ˜ 전체 λ²”μœ„λ₯Ό ν¬ν•¨ν•˜λŠ” ꡬ역 λ²”μœ„λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.

λ²”μœ„λ₯Ό μ •μ˜ν•˜κΈ° μœ„ν•΄ MongoDBλŠ” updateZoneKeyRange λͺ…λ Ήκ³Ό κ΄€λ ¨ 헬퍼 λ©”μ„œλ“œ sh.updateZoneKeyRange() 및 sh.addShardTag()λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

updateZoneKeyRange λ°μ΄ν„°λ² μ΄μŠ€ λͺ…λ Ήκ³Ό ν•΄λ‹Ή 헬퍼 sh.updateZoneKeyRange() 및 sh.addTagRange()λ₯Ό λΉ„μƒ€λ“œν˜• μ»¬λ ‰μ…˜ λ˜λŠ” μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” μ»¬λ ‰μ…˜μ—μ„œ μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ»¬λ ‰μ…˜μ„ μ œκ±°ν•˜λ©΄ κ΄€λ ¨λœ μ˜μ—­/νƒœκ·Έ λ²”μœ„κ°€ μ‚­μ œλ©λ‹ˆλ‹€.

μƒ€λ“œ μ»¬λ ‰μ…˜ μž‘μ—…μ€ λΉ„μ–΄ μžˆκ±°λ‚˜ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” μ»¬λ ‰μ…˜μ„ μƒ€λ”©ν•˜κΈ° 전에 ꡬ역 및 ꡬ역 λ²”μœ„λ₯Ό μ •μ˜ν•˜μ—¬ μ •μ˜λœ ꡬ역 λ²”μœ„μ— λŒ€ν•œ 청크와 μƒ€λ“œ ν‚€ κ°’μ˜ 전체 λ²”μœ„λ₯Ό ν¬ν•¨ν•˜λŠ” μΆ”κ°€ 청크λ₯Ό μƒμ„±ν•˜κ³  κ·Έμ—­ λ²”μœ„λ₯Ό 기반으둜 초기 청크 λΆ„λ°°λ₯Ό μˆ˜ν–‰ν•©λ‹ˆλ‹€. μ΄λŸ¬ν•œ 청크의 초기 생성 및 배포λ₯Ό 톡해 샀딩을 더 λΉ λ₯΄κ²Œ μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 초기 λΆ„λ°° μ΄ν›„μ—λŠ” λ°ΈλŸ°μ„œκ°€ μ•žμœΌλ‘œμ˜ 청크 λΆ„λ°°λ₯Ό κ΄€λ¦¬ν•©λ‹ˆλ‹€.

MongoDBλŠ” 볡합 ν•΄μ‹œ μΈλ±μŠ€μ— λŒ€ν•œ 샀딩 μ»¬λ ‰μ…˜μ„ μ§€μ›ν•©λ‹ˆλ‹€. 볡합 ν•΄μ‹œ μƒ€λ“œ ν‚€λ₯Ό μ‚¬μš©ν•˜μ—¬ λΉ„μ–΄ μžˆκ±°λ‚˜ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” μ»¬λ ‰μ…˜μ„ μƒ€λ”©ν•˜λŠ” 경우 MongoDBκ°€ 초기 청크 생성 및 뢄산을 μˆ˜ν–‰ν•˜λ €λ©΄ μΆ”κ°€ μš”κ΅¬ 사항이 μ μš©λ©λ‹ˆλ‹€.

μ˜ˆμ‹œλŠ” λΉ„μ–΄ μžˆκ±°λ‚˜ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” μ»¬λ ‰μ…˜μ— λŒ€ν•œ ꡬ역 및 ꡬ역 λ²”μœ„ 사전 μ •μ˜λ₯Ό μ°Έμ‘°ν•˜μ„Έμš”.

팁

λ°ΈλŸ°μ„œλŠ” μƒ€λ”©λœ collection의 청크λ₯Ό ν΄λŸ¬μŠ€ν„°μ˜ λͺ¨λ“  μƒ€λ“œμ— κ· λ“±ν•˜κ²Œ λΆ„λ°°ν•˜λ €κ³  μ‹œλ„ν•©λ‹ˆλ‹€.

λ§ˆμ΄κ·Έλ ˆμ΄μ…˜μœΌλ‘œ ν‘œμ‹œλœ 각 청크에 λŒ€ν•΄ λ°ΈλŸ°μ„œλŠ” κ΅¬μ„±λœ λͺ¨λ“  κ΅¬μ—­μ˜ κ°€λŠ₯ν•œ 각 λŒ€μƒ μƒ€λ“œλ₯Ό ν™•μΈν•©λ‹ˆλ‹€. 청크 λ²”μœ„κ°€ ꡬ역에 μ†ν•˜λ©΄ λ°ΈλŸ°μ„œλŠ” 청크λ₯Ό ν•΄λ‹Ή ꡬ역 λ‚΄λΆ€μ˜ μƒ€λ“œλ‘œ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ν•©λ‹ˆλ‹€. ꡬ역에 μ†ν•˜μ§€ μ•ŠλŠ” μ²­ν¬λŠ” cluster의 λͺ¨λ“  μƒ€λ“œμ— μ‘΄μž¬ν•  수 있으며 μ •μƒμ μœΌλ‘œ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜λ©λ‹ˆλ‹€.

λ°ΈλŸ°μ‹± λΌμš΄λ“œ 쀑에 λ°ΈλŸ°μ„œκ°€ νŠΉμ • μƒ€λ“œμ— λŒ€ν•΄ κ΅¬μ„±λœ ꡬ역을 μœ„λ°˜ν•˜λŠ” 청크λ₯Ό κ°μ§€ν•˜λ©΄ λ°ΈλŸ°μ„œλŠ” ν•΄λ‹Ή 청크λ₯Ό 좩돌이 μ—†λŠ” μƒ€λ“œλ‘œ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ν•©λ‹ˆλ‹€.

ꡬ역을 μƒ€λ“œμ™€ μ—°κ²°ν•˜κ³  μƒ€λ“œ μ»¬λ ‰μ…˜μ— λŒ€ν•œ μƒ€λ“œ ν‚€ λ²”μœ„λ‘œ ꡬ역을 κ΅¬μ„±ν•œ ν›„ ν΄λŸ¬μŠ€ν„°κ°€ μƒ€λ“œ μ»¬λ ‰μ…˜μ— λŒ€ν•΄ 영ν–₯을 λ°›λŠ” 데이터λ₯Ό λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ν•˜λŠ” 데 μ‹œκ°„μ΄ 걸릴 수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” 청크의 λΆ„ν• κ³Ό ν΄λŸ¬μŠ€ν„°μ˜ ν˜„μž¬ 데이터 뢄산에 따라 λ‹¬λΌμ§‘λ‹ˆλ‹€. λ°ΈλŸ°μ‹±μ΄ μ™„λ£Œλ˜λ©΄ νŠΉμ • κ΅¬μ—­μ˜ λ¬Έμ„œμ— λŒ€ν•œ 읽기 및 μ“°κΈ°κ°€ ν•΄λ‹Ή ꡬ역 λ‚΄μ˜ μƒ€λ“œμ—λ§Œ λΌμš°νŒ…λ©λ‹ˆλ‹€.

일단 κ΅¬μ„±λ˜λ©΄ λ°ΈλŸ°μ„œλŠ” ν–₯ν›„ λ°ΈλŸ°μ‹± λΌμš΄λ“œ λ™μ•ˆ ꡬ역을 μ‘΄μ€‘ν•©λ‹ˆλ‹€.

포함할 ꡬ역에 λŒ€ν•œ μƒˆ λ²”μœ„λ₯Ό μ •μ˜ν•  λ•Œ μƒ€λ“œ 킀에 ν¬ν•¨λœ ν•„λ“œλ₯Ό μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€. 볡합 μƒ€λ“œ ν‚€λ₯Ό μ‚¬μš©ν•˜λŠ” 경우, λ²”μœ„μ—λŠ” μƒ€λ“œ ν‚€μ˜ 접두사가 ν¬ν•¨λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, μƒ€λ“œ ν‚€ { a : 1, b : 1, c : 1 }κ°€ μ£Όμ–΄μ§„ 경우 b의 값을 ν¬ν•¨ν•˜λ„λ‘ λ²”μœ„λ₯Ό λ§Œλ“€κ±°λ‚˜ μ—…λ°μ΄νŠΈν•˜λ €λ©΄ μ ‘λ‘μ‚¬λ‘œ aλ₯Ό 포함해야 ν•©λ‹ˆλ‹€. c 값을 ν¬ν•¨ν•˜λ„λ‘ λ²”μœ„λ₯Ό λ§Œλ“€κ±°λ‚˜ μ—…λ°μ΄νŠΈν•˜λ €λ©΄ μ ‘λ‘μ‚¬λ‘œ a 및 bλ₯Ό 포함해야 ν•©λ‹ˆλ‹€.

μƒ€λ“œ 킀에 ν¬ν•¨λ˜μ§€ μ•Šμ€ ν•„λ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ λ²”μœ„λ₯Ό 생성할 수 μ—†μŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, ꡬ역을 μ‚¬μš©ν•˜μ—¬ 지리적 μœ„μΉ˜λ₯Ό 기반으둜 데이터λ₯Ό λΆ„ν• ν•˜λ €λŠ” 경우, μƒ€λ“œ ν‚€μ˜ 첫 번째 ν•„λ“œμ— 지리적 데이터가 ν¬ν•¨λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.

μ»¬λ ‰μ…˜μ— λŒ€ν•œ μƒ€λ“œ ν‚€λ₯Ό 선택할 λ•Œ ꡬ역 ꡬ성에 μ‚¬μš©ν•  수 μžˆλŠ” ν•„λ“œλ₯Ό κ³ λ €ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. μƒ€λ“œ ν‚€ 선택 μ‹œ κ³ λ €ν•  사항은 μƒ€λ“œ ν‚€ 선택을 μ°Έμ‘°ν•˜μ„Έμš”.

ꡬ역 λ²”μœ„λŠ” 항상 ν•˜ν•œ 경계λ₯Ό ν¬ν•¨ν•˜κ³  μƒν•œ 경계λ₯Ό μ œμ™Έν•©λ‹ˆλ‹€.

λŒμ•„κ°€κΈ°

λ²”μœ„ μ§€μ •λœ 샀딩

이 νŽ˜μ΄μ§€μ˜ λ‚΄μš©