พังพอน: การแทรกจำนวนมากผ่าน Model.collection.insert ทำให้ Node.js ขัดข้องด้วยการแบ่งส่วนข้อผิดพลาด 11

ฉันมีเอกสาร 10,000,000 รายการที่ฉันต้องการแทรกลงใน MongoDB

ฉันใช้พังพอนเพื่อสร้างเอกสารของ JSON ที่แยกวิเคราะห์ (JSON ถูกสร้างขึ้นโดยการแปลงเนื้อหาของไฟล์ txt จำนวนมาก)

ฉันเริ่มใช้ Model.create สำหรับแต่ละเอกสาร แต่มันช้ามากและต้องใช้เวลาหลายวันในการดำเนินการให้เสร็จสิ้น ฉันจึงเปลี่ยนไปใช้ Model.collection.insert เพื่อเร่งความเร็ว

นี่คือฟังก์ชัน saveToDB ของฉัน (เขียนด้วย TypeScript):

private saveToDB(hand: Hand): void {
    this.bulkHands.push(new HandHistory(hand));

    if(this.bulkHands.length >= 10000) {
        HandHistory.collection.insert(this.bulkHands, (err): void => {
            if(err) {
                console.log('error', err);
            }

            this.bulkHands = [];
        });
    }
}

ฉันลองใช้โค้ดแล้ว Parser ของฉันสร้างอาร์เรย์เป็น 10,000 เอกสาร จากนั้นพยายามแทรกลงในฐานข้อมูล แต่โหนดจะขัดข้องด้วย Segmentation fault: 11 เสมอ

แม้ว่าฉันจะตั้งค่าขีดจำกัดไว้ที่ 1 (การแทรกเอกสารทีละฉบับ) สิ่งนี้ก็ยังเกิดขึ้น ฉันเดาว่ามันเกี่ยวข้องกับฟังก์ชัน Model.collection.insert แต่ความรู้ของฉันเกี่ยวกับโครงสร้างพื้นฐานยังไม่ลึกพอที่จะเข้าใจสิ่งที่เกิดขึ้นที่นี่

มีใครพบปัญหาดังกล่าวหรือไม่? และฉันจะทำอย่างไรเพื่อแก้ไขปัญหานี้?


person Johannes Klauß    schedule 05.06.2015    source แหล่งที่มา


คำตอบ (2)


พบคำตอบแล้ว ปัญหาคือฉันดันอินสแตนซ์ Mongoose Model เข้าไปในอาเรย์ แต่อนุญาตให้ใช้เฉพาะวัตถุธรรมดาเท่านั้น

person Johannes Klauß    schedule 05.06.2015

โดยปกตินี่จะเป็นความคิดเห็น แต่ฉันไม่สามารถโพสต์ความคิดเห็นได้เนื่องจากฉันมีคะแนนชื่อเสียงต่ำ แต่ฉันรู้สึกว่าข้อมูลนี้จะเป็นประโยชน์กับใครบางคน

คำตอบที่ยอมรับคือคำตอบที่ถูกต้อง แต่ฉันแค่อยากจะบอกว่าฉันได้รับข้อผิดพลาดอื่นเผื่อว่ามีใครประสบปัญหาเดียวกัน ฉันได้แทรก 10 ล้านบันทึกเช่นกัน และได้รับข้อความแสดงข้อผิดพลาดต่อไปนี้:

{ '0': 
   { [MongoError: key $__ must not start with '$']
     name: 'MongoError',
     message: 'key $__ must not start with \'$\'' },
  '1': undefined }

อย่างที่คุณเห็นข้อความแสดงข้อผิดพลาดไม่มีประโยชน์เลย

ฉันส่งผ่านโมเดล mongo แทนที่จะเป็น JSON แบบเก่าธรรมดา ขอบคุณสำหรับความช่วยเหลือ

person Quy    schedule 10.07.2015