กำลังโหลด MongoDB จำนวนมากจากไฟล์ JSON พร้อมวัตถุจำนวนหนึ่ง

ฉันต้องการโหลดจำนวนมากใน MongoDB ฉันมีไฟล์ประมาณ 200GB ที่มีวัตถุ JSON ซึ่งฉันต้องการโหลด ปัญหาคือฉันไม่สามารถใช้เครื่องมือ mongoimport ได้เนื่องจากวัตถุนั้นมีวัตถุอยู่ (เช่น ฉันจำเป็นต้องใช้ --jsonArray aaram) ซึ่งจำกัดอยู่ที่ 4MB

มี Bulk Load API ใน CouchDB ซึ่งฉันสามารถเขียนสคริปต์และใช้ cURL เพื่อส่งคำขอ POST เพื่อแทรกเอกสารได้ โดยไม่จำกัดขนาด...

มีอะไรแบบนี้ใน MongoDB หรือไม่? ฉันรู้ว่ามี Sleepy แต่ฉันสงสัยว่าสิ่งนี้สามารถรับมือกับการแทรกอาร์เรย์รังของ JSON ได้หรือไม่ ..

ขอบคุณ!


person NightWolf    schedule 01.07.2011    source แหล่งที่มา
comment
ทำไมคุณไม่เขียนสคริปต์เล็กๆ ในภาษาที่คุณชื่นชอบล่ะ?   -  person Andreas Jung    schedule 01.07.2011
comment
+1 ไม่แน่ใจว่าทำไม downvote ฉันก็จะสนใจที่จะรู้เช่นกัน (ไม่ ไม่มีสิ่งใดเช่นนั้นจะเป็นคำตอบที่ดี ถ้ามันถูกต้อง)   -  person JasonSmith    schedule 02.07.2011
comment
สองวันต่อมา นี่ยังคงเป็นคำถาม Stack Overflow ที่ดี เป็นการสอบถามโดยตรงซึ่งมีคำตอบที่ถูกต้องเพียงคำตอบเดียว ฉันหวังว่าคำตอบจะแสดงออกมาเอง ด้วยเหตุนี้ ฉันจะให้คะแนนชื่อเสียงของฉันเองแก่ผู้ใช้ Mongo คนแรกเพื่อให้คำตอบที่ชัดเจนและถูกต้อง (มีคนสันนิษฐานว่าคำตอบคือ ไม่ แต่ฉันปล่อยให้เป็นหน้าที่ของผู้เชี่ยวชาญ)   -  person JasonSmith    schedule 04.07.2011
comment
คุณช่วยแสดงตัวอย่างข้อมูลของคุณให้เราดูได้ไหม เหตุใดคุณจึงต้องนำเข้าด้วย --jsonArray   -  person Theo    schedule 04.07.2011
comment
เนื้อหามีวัตถุซ้อนกัน   -  person NightWolf    schedule 07.07.2011


คำตอบ (2)


ตกลง โดยพื้นฐานแล้วปรากฏว่าไม่มีคำตอบที่ดีจริง ๆ เว้นแต่ฉันจะเขียนเครื่องมือของตัวเองใน Java หรือ Ruby เพื่อส่งผ่านวัตถุ (ความพยายาม) ... แต่นั่นเป็นความเจ็บปวดจริงๆ ดังนั้นฉันจึงตัดสินใจแยกไฟล์ลงไปแทน ชิ้นขนาด 4MB... เพิ่งเขียนเชลล์สคริปต์อย่างง่ายโดยใช้การแยก (โปรดทราบว่าฉันต้องแยกไฟล์หลายครั้งเนื่องจากข้อจำกัด) ฉันใช้คำสั่ง split ด้วย -l (หมายเลขบรรทัด) ดังนั้นแต่ละไฟล์จึงมีจำนวนบรรทัด x ในกรณีของฉันแต่ละวัตถุ Json มีขนาดประมาณ 4kb ดังนั้นฉันจึงเดาขนาดเส้น

สำหรับใครก็ตามที่ต้องการทำเช่นนี้ โปรดจำไว้ว่าการแยกไฟล์สามารถสร้างไฟล์ได้เพียง 676 ไฟล์เท่านั้น (26*26) ดังนั้นคุณต้องแน่ใจว่าแต่ละไฟล์มีบรรทัดเพียงพอเพื่อหลีกเลี่ยงไม่ให้ไฟล์หายไปครึ่งหนึ่ง ไม่ว่าจะด้วยวิธีใดก็ตาม ใส่ทั้งหมดนี้ลงในสคริปต์ทุบตีเก่าที่ดี และใช้ mongo import และปล่อยให้มันทำงานข้ามคืน โซลูชัน IMO ที่ง่ายที่สุดและไม่จำเป็นต้องตัดและแมชไฟล์และแยกวิเคราะห์ JSON ใน Ruby/Java หรือ w.e. อื่น.

สคริปต์นั้นกำหนดเองเล็กน้อย แต่ถ้าใครต้องการก็แสดงความคิดเห็นและโพสต์ได้เลย

person NightWolf    schedule 04.07.2011
comment
ฮ่าฮ่า ความพยายามของฉัน -- เป็นการแสดงออกที่กระชับของการประเมินทั่วไปเช่นนี้ - person JasonSmith; 05.07.2011

โดยไม่รู้อะไรเลยเกี่ยวกับโครงสร้างข้อมูลของคุณ ฉันจะบอกว่าถ้าคุณใช้ mongoimport ไม่ได้ แสดงว่าคุณโชคไม่ดี ไม่มียูทิลิตี้มาตรฐานอื่นใดที่สามารถปรับแต่งเพื่อตีความข้อมูล JSON โดยพลการได้

เมื่อข้อมูลของคุณไม่พอดีกับสิ่งที่ยูทิลิตี้นำเข้าคาดหวัง 1:1 การเขียนสคริปต์นำเข้าแบบครั้งเดียวในภาษาเช่น Ruby หรือ Python จะดำเนินการได้ง่ายที่สุดเกือบทุกครั้ง การแทรกเป็นชุดจะช่วยเร่งการนำเข้าได้อย่างมาก แต่อย่าทำเป็นชุดมากเกินไป ไม่เช่นนั้นคุณจะได้รับข้อผิดพลาด (ขนาดสูงสุดของส่วนแทรกใน 1.8+ คือ 16Mb) ในไดรเวอร์ Ruby การแทรกแบทช์สามารถทำได้โดยเพียงแค่ส่งอาร์เรย์ของแฮชไปยังเมธอด insert แทนที่จะเป็นแฮชตัวเดียว

หากคุณเพิ่มตัวอย่างข้อมูลของคุณในคำถาม ฉันอาจช่วยคุณเพิ่มเติมได้

person Theo    schedule 04.07.2011