Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MongoDB

Bulk Insert ใน MongoDB ด้วย initializeUnorderedBulkOp

การ insert หลายเอกสารพร้อมกัน (Bulk Insert) ใช้ initializeUnorderedBulkOp() เพื่อประสิทธิภาพดีกว่า insert แยกๆ

> var bulkInsertDoc = db.demo663.initializeUnorderedBulkOp();
> bulkInsertDoc.insert({Name: "John", CountryName: "US"});
> bulkInsertDoc.insert({Name: "Chris", CountryName: "UK"});
> bulkInsertDoc.insert({Name: "David", CountryName: "AUS"});
> bulkInsertDoc.execute();
BulkWriteResult({
  "writeErrors" : [],
  "writeConcernErrors" : [],
  "nInserted" : 3,
  "nUpserted" : 0,
  "nMatched" : 0,
  "nModified" : 0,
  "nRemoved" : 0,
  "upserted" : []
})

แสดงข้อมูล:

> db.demo663.find();

Bulk Operations API (Legacy vs Modern)

ตัวอย่าง bulkWrite() (แนะนำสำหรับ Driver)

db.collection.bulkWrite([
  {insertOne: {document: {Name: "John", CountryName: "US"}}},
  {insertOne: {document: {Name: "Chris", CountryName: "UK"}}},
  {updateOne: {filter: {Name: "John"}, update: {$set: {Age: 25}}}},
  {deleteOne: {filter: {Name: "Old"}}}
], {ordered: false});

ประโยชน์ของ Bulk Operations

  • Network round-trips: ลดจาก N ครั้ง เป็น 1 ครั้ง
  • Throughput: เร็วกว่า 10-100 เท่าสำหรับข้อมูลเยอะ
  • Atomicity: Ordered = หยุดที่ error, Unordered = ทำต่อจนจบ

ข้อจำกัด

  • Batch size สูงสุด 100,000 operations หรือ 16MB
  • Unordered อาจทำให้ลำดับ _id ไม่เรียงตาม insert order
APIVersionคำอธิบาย
initializeUnorderedBulkOp()Legacy (Shell)Unordered - รันขนานได้, หยุดไม่ถ้ามี error
initializeOrderedBulkOp()Legacy (Shell)Ordered - รันตามลำดับ, หยุดถ้ามี error
bulkWrite()Modern (Driver 3.0+)API ใหม่ รองรับ ordered/unordered option