Docs Menu
Docs Home
/ /
λŒ€λŸ‰ μž‘μ—…

Bulk()

팁

MongoDBλŠ” λŒ€λŸ‰ μ“°κΈ° μž‘μ—…μ„ μˆ˜ν–‰ν•˜κΈ° μœ„ν•œ db.collection.bulkWrite() λ©”μ„œλ“œλ„ μ œκ³΅ν•©λ‹ˆλ‹€.

Bulk()

단일 μ»¬λ ‰μ…˜μ— λŒ€ν•΄ λŒ€λŸ‰μœΌλ‘œ μˆ˜ν–‰ν•  μ“°κΈ° μž‘μ—… λͺ©λ‘μ„ κ΅¬μ„±ν•˜λŠ” 데 μ‚¬μš©λ˜λŠ” λŒ€λŸ‰ μž‘μ—… λΉŒλ”μž…λ‹ˆλ‹€λ₯Ό λ§Œλ“­λ‹ˆλ‹€. λΉŒλ”λ₯Ό μΈμŠ€ν„΄μŠ€ν™”ν•˜λ €λ©΄ λΉŒλ”μ—μ„œ db.collection.initializeOrderedBulkOp() λ˜λŠ” db.collection.initializeUnorderedBulkOp() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

이 λͺ…령은 λ‹€μŒ ν™˜κ²½μ—μ„œ ν˜ΈμŠ€νŒ…λ˜λŠ” λ°°ν¬μ—μ„œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • MongoDB Atlas: ν΄λΌμš°λ“œμ—μ„œμ˜ MongoDB 배포λ₯Ό μœ„ν•œ μ™„μ „ κ΄€λ¦¬ν˜• μ„œλΉ„μŠ€

μ°Έκ³ 

이 λͺ…령은 λͺ¨λ“  MongoDB Atlas ν΄λŸ¬μŠ€ν„°μ—μ„œ μ§€μ›λ©λ‹ˆλ‹€. λͺ¨λ“  λͺ…령에 λŒ€ν•œ Atlas 지원에 κ΄€ν•΄ μžμ„Ένžˆ μ•Œμ•„λ³΄λ €λ©΄ μ§€μ›λ˜μ§€ μ•ŠλŠ” λͺ…령을 μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€.

λΉŒλ”λŠ” μž‘μ—… λͺ©λ‘μ„ μˆœμ„œκ°€ μ§€μ •λ˜κ±°λ‚˜ λ˜μ§€ μ•Šμ€ μƒνƒœλ‘œ ꡬ성할 수 μžˆμŠ΅λ‹ˆλ‹€.

μˆœμ„œκ°€ μ§€μ •λœ μž‘μ—… λͺ©λ‘μ„ μ‚¬μš©ν•˜μ—¬ MongoDBλŠ” λͺ©λ‘μ˜ μ“°κΈ° μž‘μ—…μ„ 순차적으둜 μ‹€ν–‰ν•©λ‹ˆλ‹€. μ“°κΈ° μž‘μ—… 쀑 ν•˜λ‚˜λ₯Ό μ²˜λ¦¬ν•˜λŠ” λ™μ•ˆ 였λ₯˜κ°€ λ°œμƒν•˜λ”λΌλ„ MongoDBλŠ” λͺ©λ‘μ— μžˆλŠ” λ‚˜λ¨Έμ§€ μ“°κΈ° μž‘μ—…μ„ 계속 μ²˜λ¦¬ν•©λ‹ˆλ‹€.

db.collection.initializeOrderedBulkOp()을 μ‚¬μš©ν•˜μ—¬ μˆœμ„œκ°€ μ§€μ •λœ μ“°κΈ° λͺ…λ Ή λͺ©λ‘μ— λŒ€ν•œ λΉŒλ”λ₯Ό λ§Œλ“­λ‹ˆλ‹€.

MongoDBλŠ” ordered μ—°μ‚° λͺ©λ‘μ„ μ‹€ν–‰ν•  경우 operation type 및 연속성을 κΈ°μ€€μœΌλ‘œ 연산을 κ·Έλ£Ήν™”ν•©λ‹ˆλ‹€(즉, 같은 μœ ν˜•μ˜ 연속 연산이 ν•¨κ»˜ 그룹화됨). κ·Έ 예둜 μˆœμ„œκ°€ μ§€μ •λœ λͺ©λ‘μ— μ‚½μž… μ—°μ‚° 2κ°œκ°€ λ¨Όμ € λ‚˜μ˜€κ³  κ·Έ λ‹€μŒμ— μ—…λ°μ΄νŠΈ μ—°μ‚°, 또 κ·Έ λ‹€μŒμ—λŠ” λ‹€λ₯Έ μ‚½μž… 연산이 μžˆλŠ” 경우, MongoDBλŠ” 이 연산듀을 3개의 κ°œλ³„ 그룹으둜 κ·Έλ£Ήν™”ν•©λ‹ˆλ‹€. 첫 번째 κ·Έλ£Ήμ—λŠ” μ‚½μž… μ—°μ‚° 2개, 두 번째 κ·Έλ£Ήμ—λŠ” μ—…λ°μ΄νŠΈ μ—°μ‚°, μ„Έ 번째 κ·Έλ£Ήμ—λŠ” λ§ˆμ§€λ§‰ μ‚½μž… 연산이 ν¬ν•¨λ©λ‹ˆλ‹€. 이 λ™μž‘μ€ μ΄ν›„μ˜ λ²„μ „μ—μ„œ 변경될 수 μžˆμŠ΅λ‹ˆλ‹€.

mongosh의 Bulk() μž‘μ—…κ³Ό λ“œλΌμ΄λ²„μ˜ μœ μ‚¬ν•œ λ©”μ„œλ“œμ—λŠ” 그룹의 μž‘μ—… μˆ˜μ— λŒ€ν•œ μ œν•œμ΄ μ—†μŠ΅λ‹ˆλ‹€. λŒ€λŸ‰ μž‘μ—… 싀행을 μœ„ν•΄ μž‘μ—…μ΄ μ–΄λ–»κ²Œ κ·Έλ£Ήν™”λ˜λŠ”μ§€ ν™•μΈν•˜λ €λ©΄ μ‹€ν–‰ ν›„ Bulk.getOperations()λ₯Ό ν˜ΈμΆœν•©λ‹ˆλ‹€.

μƒ€λ“œ μ»¬λ ‰μ…˜μ—μ„œ ordered μž‘μ—… λͺ©λ‘μ„ μ‹€ν–‰ν•˜λŠ” 것은 unordered λͺ©λ‘μ„ μ‹€ν–‰ν•˜λŠ” 것보닀 일반적으둜 λŠλ¦½λ‹ˆλ‹€. μ •λ ¬λœ λͺ©λ‘μ—μ„œλŠ” 각 μž‘μ—…μ΄ 이전 μž‘μ—…μ΄ μ™„λ£Œλ  λ•ŒκΉŒμ§€ κΈ°λ‹€λ €μ•Ό ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

μ •λ ¬λ˜μ§€ μ•Šμ€ μž‘μ—… λͺ©λ‘μ„ μ‚¬μš©ν•˜λ©΄ MongoDBλŠ” λͺ©λ‘μ˜ μ“°κΈ° μž‘μ—…μ„ 비결정적 μˆœμ„œλ‘œ μ‹€ν–‰ν•  수 μžˆμ„ 뿐만 μ•„λ‹ˆλΌ λ³‘λ ¬λ‘œ μ‹€ν–‰ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. μ“°κΈ° μž‘μ—… 쀑 ν•˜λ‚˜λ₯Ό μ²˜λ¦¬ν•˜λŠ” λ™μ•ˆ 였λ₯˜κ°€ λ°œμƒν•˜λ”λΌλ„ MongoDBλŠ” λͺ©λ‘μ— μžˆλŠ” λ‚˜λ¨Έμ§€ μ“°κΈ° μž‘μ—…μ„ 계속 μ²˜λ¦¬ν•©λ‹ˆλ‹€.

db.collection.initializeUnorderedBulkOp()λ₯Ό μ‚¬μš©ν•˜μ—¬ μ •λ ¬λ˜μ§€ μ•Šμ€ μ“°κΈ° λͺ…λ Ή λͺ©λ‘μ— λŒ€ν•œ λΉŒλ”λ₯Ό λ§Œλ“­λ‹ˆλ‹€.

MongoDBλŠ” unordered μ—°μ‚° λͺ©λ‘μ„ μ‹€ν–‰ν•  경우 이 연산듀을 κ·Έλ£Ήν™”ν•©λ‹ˆλ‹€. μˆœμ„œκ°€ μ§€μ •λ˜μ§€ μ•Šμ€ λŒ€λŸ‰ 연산이 있으면 μ„±λŠ₯ ν–₯상을 μœ„ν•΄ λͺ©λ‘μ— μ†ν•œ μ—°μ‚°μ˜ μˆœμ„œλ₯Ό λ³€κ²½ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ unordered λŒ€λŸ‰ 연산을 μˆ˜ν–‰ν•  λ•Œ μˆœμ„œμ— μ˜μ‘΄ν•΄μ„œλŠ” μ•ˆ λ©λ‹ˆλ‹€.

mongosh의 Bulk() μž‘μ—…κ³Ό λ“œλΌμ΄λ²„μ˜ μœ μ‚¬ν•œ λ©”μ„œλ“œμ—λŠ” 그룹의 μž‘μ—… μˆ˜μ— λŒ€ν•œ μ œν•œμ΄ μ—†μŠ΅λ‹ˆλ‹€. λŒ€λŸ‰ μž‘μ—… 싀행을 μœ„ν•΄ μž‘μ—…μ΄ μ–΄λ–»κ²Œ κ·Έλ£Ήν™”λ˜λŠ”μ§€ ν™•μΈν•˜λ €λ©΄ μ‹€ν–‰ ν›„ Bulk.getOperations()λ₯Ό ν˜ΈμΆœν•©λ‹ˆλ‹€.

Bulk()λŠ” λΆ„μ‚° νŠΈλžœμž­μ…˜ λ‚΄μ—μ„œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Bulk.insert() μ—°μ‚°μ—μ„œλŠ” 이 μ»¬λ ‰μ…˜μ΄ 이미 μ‘΄μž¬ν•΄μ•Ό ν•©λ‹ˆλ‹€.

Bulk.find.upsert() μ—°μ‚°μ—μ„œ μ—°μ‚° κ²°κ³Ό μ—…μ„œνŠΈκ°€ λ°œμƒν•  κ²½μš°μ—λŠ” 이 μ»¬λ ‰μ…˜μ΄ 이미 μ‘΄μž¬ν•΄μ•Ό ν•©λ‹ˆλ‹€.

νŠΈλžœμž­μ…˜μ—μ„œ μ‹€ν–‰λ˜λŠ” 경우 μž‘μ—…μ— λŒ€ν•œ μ“°κΈ° κ³ λ €λ₯Ό λͺ…μ‹œμ μœΌλ‘œ μ„€μ •ν•˜μ§€ λ§ˆμ„Έμš”. νŠΈλžœμž­μ…˜μ— μ“°κΈ° κ³ λ €λ₯Ό μ‚¬μš©ν•˜λ €λ©΄ νŠΈλžœμž­μ…˜ 및 μ“°κΈ° κ³ λ €λ₯Ό μ°Έμ‘°ν•˜μ„Έμš”.

μ€‘μš”

λŒ€λΆ€λΆ„μ˜ 경우 λΆ„μ‚° νŠΈλžœμž­μ…˜μ€ 단일 λ¬Έμ„œ 쓰기에 λΉ„ν•΄ 더 큰 μ„±λŠ₯ λΉ„μš©μ΄ λ°œμƒν•˜λ―€λ‘œ λΆ„μ‚° νŠΈλžœμž­μ…˜μ˜ κ°€μš©μ„±μ΄ 효과적인 μŠ€ν‚€λ§ˆ 섀계λ₯Ό λŒ€μ²΄ν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€. λŒ€λΆ€λΆ„μ˜ μ‹œλ‚˜λ¦¬μ˜€μ—μ„œ λΉ„μ •κ·œν™”λœ 데이터 λͺ¨λΈ (λ‚΄μž₯된 λ¬Έμ„œ 및 λ°°μ—΄) 은 κ³„μ†ν•΄μ„œ 데이터 및 μ‚¬μš© 사둀에 졜적일 κ²ƒμž…λ‹ˆλ‹€. 즉, λŒ€λΆ€λΆ„μ˜ μ‹œλ‚˜λ¦¬μ˜€μ—μ„œ 데이터λ₯Ό μ μ ˆν•˜κ²Œ λͺ¨λΈλ§ν•˜λ©΄ λΆ„μ‚° νŠΈλžœμž­μ…˜μ˜ ν•„μš”μ„±μ΄ μ΅œμ†Œν™”λ©λ‹ˆλ‹€.

μΆ”κ°€ νŠΈλžœμž­μ…˜ μ‚¬μš© κ³ λ € 사항(예: λŸ°νƒ€μž„ μ œν•œ 및 oplog 크기 μ œν•œ)은 ν”„λ‘œλ•μ…˜ 고렀사항을 μ°Έμ‘°ν•˜μ„Έμš”.

Bulk() λΉŒλ”μ—λŠ” λ‹€μŒκ³Ό 같은 λ©”μ„œλ“œκ°€ μžˆμŠ΅λ‹ˆλ‹€.

이름
μ„€λͺ…

μž‘μ—… λͺ©λ‘μ— μ‚½μž… μž‘μ—…μ„ μΆ”κ°€ν•©λ‹ˆλ‹€.

μ—…λ°μ΄νŠΈ λ˜λŠ” 제거 μž‘μ—…μ— λŒ€ν•œ 쿼리 쑰건을 μ§€μ •ν•©λ‹ˆλ‹€.

μ—¬λŸ¬ λ¬Έμ„œ μ‚­μ œ μž‘μ—…μ„ μž‘μ—… λͺ©λ‘μ— μΆ”κ°€ν•©λ‹ˆλ‹€.

μž‘μ—… λͺ©λ‘μ— 단일 λ¬Έμ„œ μ‚­μ œ μž‘μ—…μ„ μΆ”κ°€ν•©λ‹ˆλ‹€.

Bulk.find.delete()의 λ³„μΉ­μž…λ‹ˆλ‹€.

Bulk.find.deleteOne()의 λ³„μΉ­μž…λ‹ˆλ‹€.

μž‘μ—… λͺ©λ‘μ— 단일 λ¬Έμ„œ λ°”κΎΈκΈ° μž‘μ—…μ„ μΆ”κ°€ν•©λ‹ˆλ‹€.

μž‘μ—… λͺ©λ‘μ— 단일 λ¬Έμ„œ μ—…λ°μ΄νŠΈ μž‘μ—…μ„ μΆ”κ°€ν•©λ‹ˆλ‹€.

μž‘μ—… λͺ©λ‘μ— multi μ—…λ°μ΄νŠΈ μž‘μ—…μ„ μΆ”κ°€ν•©λ‹ˆλ‹€.

μ—…λ°μ΄νŠΈ μž‘μ—…μ— upsert: trueλ₯Ό μ§€μ •ν•©λ‹ˆλ‹€.

μž‘μ—… λͺ©λ‘μ„ μΌκ΄„μ μœΌλ‘œ μ‹€ν–‰ν•©λ‹ˆλ‹€.

Bulk() μž‘μ—… κ°μ²΄μ—μ„œ μ‹€ν–‰λœ μ“°κΈ° μž‘μ—…μ˜ 배열을 λ°˜ν™˜ν•©λ‹ˆλ‹€.

Bulk() μž‘μ—… 객체의 μž‘μ—… 수 및 λ°°μΉ˜κ°€ ν¬ν•¨λœ JSON λ¬Έμ„œλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.

Bulk.toJSON() κ²°κ³Όλ₯Ό λ¬Έμžμ—΄λ‘œ λ°˜ν™˜ν•©λ‹ˆλ‹€.

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

db. μ»¬λ ‰μ…˜.initializeUnorderedBulkOp

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