2015-11-02 12 views
31

Ho alcuni problemi nell'importazione di un file JSON in un'istanza MongoDB locale. Il JSON è stato generato usando mongoexport e assomiglia a questo. No array, senza nidificazione Hardcore:MongoDB: mongoimport perde la connessione durante l'importazione di file di grandi dimensioni

{"_created":{"$date":"2015-10-20T12:46:25.000Z"},"_etag":"7fab35685eea8d8097656092961d3a9cfe46ffbc","_id":{"$oid":"562637a14e0c9836e0821a5e"},"_updated":{"$date":"2015-10-20T12:46:25.000Z"},"body":"base64 encoded string","sender":"[email protected]","type":"answer"} 
{"_created":{"$date":"2015-10-20T12:46:25.000Z"},"_etag":"7fab35685eea8d8097656092961d3a9cfe46ffbc","_id":{"$oid":"562637a14e0c9836e0821a5e"},"_updated":{"$date":"2015-10-20T12:46:25.000Z"},"body":"base64 encoded string","sender":"[email protected]","type":"answer"} 

Se importare un file 9MB con ~ 300 righe, non c'è nessun problema:

[stekhn latest]$ mongoimport -d mietscraping -c mails mails-small.json 
2015-11-02T10:03:11.353+0100 connected to: localhost 
2015-11-02T10:03:11.372+0100 imported 240 documents 

Ma se provate a importare un file da 32 MB con ~ 1300 righe, l'importazione non riesce:

[stekhn latest]$ mongoimport -d mietscraping -c mails mails.json 
2015-11-02T10:05:25.228+0100 connected to: localhost 
2015-11-02T10:05:25.735+0100 error inserting documents: lost connection to server 
2015-11-02T10:05:25.735+0100 Failed: lost connection to server 
2015-11-02T10:05:25.735+0100 imported 0 documents 

Ecco il log:

2015-11-02T11:53:04.146+0100 I NETWORK [initandlisten] connection accepted from 127.0.0.1:45237 #21 (6 connections now open) 
2015-11-02T11:53:04.532+0100 I -  [conn21] Assertion: 10334:BSONObj size: 23592351 (0x167FD9F) is invalid. Size must be between 0 and 16793600(16MB) First element: insert: "mails" 
2015-11-02T11:53:04.536+0100 I NETWORK [conn21] AssertionException handling request, closing client connection: 10334 BSONObj size: 23592351 (0x167FD9F) is invalid. Size must be between 0 and 16793600(16MB) First element: insert: "mails" 

Ho già sentito parlare di 16MB limit for BSON documents, ma poiché nessuna riga nel mio file JSON è più grande di 16 MB, questo non dovrebbe essere un problema, giusto? Quando faccio lo stesso identico (32MB) importare un mio computer locale, tutto funziona correttamente.

Qualche idea su cosa potrebbe causare questo comportamento strano?

+0

Probabilmente vale la pena di postare i registri dall'istanza dal timestamp in cui è stata persa la connessione (potrebbe davvero essere qualsiasi cosa in base all'output precedente). –

+0

prova questo se fa la differenza: 'mongoimport -d mietscraping -c mails jpaljasma

+0

usi' mongoexport' per esportare i tuoi mails.json? – jpaljasma

risposta

64

Credo che il problema è di circa le prestazioni, in qualsiasi modo si può risolti usato:

è possibile utilizzare l'opzione mongoimport -j. Prova a incrementare se non funziona con 4. cioè, 4,8,16, dipende dal numero di core che hai nella tua CPU.

mongoimport --help

-j, --numInsertionWorkers = numero di operazioni di inserimento per eseguire simultaneamente (1 per default)


mongoimport -d mietscraping mail -c -j 4 < mails.json


o puoi dividere il file e importare tutti i file.

Spero che questo ti aiuti.


cercando un po 'di più, è un bug in alcune versioni https://jira.mongodb.org/browse/TOOLS-939 qui un'altra soluzione è possibile modificare il batchSize, per impostazione predefinita è 10000, ridurre il valore e test:

mongoimport -d mietscraping -c mails < mails.json --batchSize 1

+0

Grazie, questo ha funzionato e funziona anche per oltre 10.000 documenti. – stekhn

+6

- La correzione patchbread ha funzionato come un incantesimo! – Vishal

+2

Va notato che --batchSize sembra non documentato (non è nell'output di mongoimport --help per la mia versione di mongo, 3.0.10). – Scott

Problemi correlati