Memuat MongoDB secara massal dari file JSON dengan sejumlah objek

Saya ingin melakukan pemuatan massal ke MongoDB. Saya memiliki sekitar 200GB file yang berisi objek JSON yang ingin saya muat, masalahnya adalah saya tidak dapat menggunakan alat mongoimport karena objek tersebut berisi objek (yaitu saya harus menggunakan --jsonArray aaram) yang dibatasi hingga 4MB.

Ada API Pemuatan Massal di CouchDB tempat saya bisa menulis skrip dan menggunakan cURL untuk mengirim permintaan POST untuk memasukkan dokumen, tanpa batasan ukuran...

Apakah ada yang seperti ini di MongoDB? Saya tahu ada Sleepy tetapi saya ingin tahu apakah ini dapat mengatasi penyisipan array sarang JSON..?

Terima kasih!


person NightWolf    schedule 01.07.2011    source sumber
comment
Mengapa Anda tidak menulis naskah kecil dalam bahasa favorit Anda?   -  person Andreas Jung    schedule 01.07.2011
comment
+1 Tidak yakin mengapa suara negatifnya. Saya juga tertarik untuk mengetahuinya. (Tidak, tidak ada jawaban seperti itu yang bagus, jika itu benar.)   -  person JasonSmith    schedule 02.07.2011
comment
Dua hari kemudian, ini tetap menjadi pertanyaan Stack Overflow yang bagus. Ia melakukan penyelidikan langsung, dan hanya ada satu jawaban yang benar. Saya berharap jawabannya akan muncul dengan sendirinya. Untuk itu, saya akan menyumbangkan poin reputasi saya sendiri kepada pengguna Mongo pertama yang memberikan jawaban yang jelas dan benar. (Orang mengira jawabannya adalah tidak tetapi saya serahkan pada ahlinya.)   -  person JasonSmith    schedule 04.07.2011
comment
Bisakah Anda menunjukkan kepada kami contoh data Anda? Mengapa Anda harus mengimpor dengan --jsonArray?   -  person Theo    schedule 04.07.2011
comment
Kontennya memiliki objek bersarang.   -  person NightWolf    schedule 07.07.2011


Jawaban (2)


Oke, pada dasarnya tampaknya tidak ada jawaban yang benar-benar bagus kecuali saya menulis alat saya sendiri di sesuatu seperti Java atau Ruby untuk memasukkan objek (usaha meh)... Tapi itu sangat merepotkan jadi saya memutuskan untuk membagi file menjadi Potongan 4MB... Baru saja menulis skrip shell sederhana menggunakan split (perhatikan bahwa saya harus membagi file beberapa kali karena keterbatasan). Saya menggunakan perintah split dengan -l (nomor baris) sehingga setiap file memiliki jumlah baris x di dalamnya. Dalam kasus saya, setiap objek Json berukuran sekitar 4kb jadi saya hanya menebak ukuran garis.

Bagi siapa pun yang ingin melakukan ini, ingatlah bahwa split hanya dapat menghasilkan 676 file (26*26) jadi Anda perlu memastikan setiap file memiliki cukup baris di dalamnya untuk menghindari hilangnya separuh file. Bagaimanapun, masukkan semua ini ke dalam skrip bash lama yang bagus dan gunakan impor mongo dan biarkan berjalan semalaman. Solusi termudah IMO dan tidak perlu memotong dan menumbuk file dan mengurai JSON di Ruby/Java atau w.e. kalau tidak.

Skripnya agak khusus, tetapi jika ada yang menginginkannya, tinggalkan saja komentar dan kiriman buruk.

person NightWolf    schedule 04.07.2011
comment
Haha, usaha meh -- ekspresi singkat dari penilaian umum. - person JasonSmith; 05.07.2011

Tanpa mengetahui apa pun tentang struktur data Anda, saya akan mengatakan bahwa jika Anda tidak dapat menggunakan mongoimport Anda kurang beruntung. Tidak ada utilitas standar lain yang dapat diubah untuk menafsirkan data JSON yang sewenang-wenang.

Jika data Anda tidak sesuai 1:1 dengan apa yang diharapkan oleh utilitas impor, akan lebih mudah untuk menulis skrip impor satu kali dalam bahasa seperti Ruby atau Python untuk melakukannya. Penyisipan batch akan mempercepat impor secara signifikan, tetapi jangan melakukan batch yang terlalu besar atau Anda akan mendapatkan kesalahan (ukuran maksimal penyisipan di 1.8+ adalah 16Mb). Pada driver Ruby, penyisipan batch dapat dilakukan hanya dengan meneruskan array hash ke metode insert, bukan hanya hash tunggal.

Jika Anda menambahkan contoh data Anda ke pertanyaan, saya mungkin dapat membantu Anda lebih lanjut.

person Theo    schedule 04.07.2011