MongoDB: mongoimport perd la connexion lors de l'importation de gros fichiers
J'ai quelques difficultés pour l'importation d'un fichier JSON à un local MongoDB instance. Le JSON a été généré à l'aide de mongoexport
et ressemble à ceci. Pas de tableaux, pas de hardcore de nidification:
{"_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"}
Si je importer un 9MB fichier ~300 lignes, il n'y a pas de problème:
[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
Mais si vous essayez d'importer un 32 MO de fichiers avec ~1300 lignes, l'importation échoue:
[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
Voici le 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"
J'ai entendu parler de la 16 MO de limite pour BFILS documents avant, mais depuis pas de ligne dans mon fichier JSON est plus grand que 16 MO, ce ne devrait pas être un problème, non? Quand je fais exactement le même (32 MO) importer mon ordinateur en local, tout fonctionne bien.
Les idées de ce que pourrait provoquer ce comportement bizarre?
- Probablement la peine de poster les logs à partir de l'instance de partout dans le timestamp où la connexion a été perdue (il pouvait vraiment être n'importe quoi, sur la base des conclusions ci-dessus).
- à essayer si il fait la différence:
mongoimport -d mietscraping -c mails < mails.json
- utilisez-vous
mongoexport
pour exporter vos e-mails.json ? - Oui, j'utilise mongoexport et non, malheureusement
mails < mails.json
renvoie la même erreur.
Vous devez vous connecter pour publier un commentaire.
Je crois que le problème est une question de rendement, de toute façon, vous pouvez résoudre utilisé:
vous pouvez utiliser mongoimport option -j. Essayez d'incrément si pas de travail avec 4. j'.e, 4,8,16, dépendent du nombre de base que vous avez dans votre cpu.
mongoimport --help
-j, --numInsertionWorkers= nombre d'insérer l'exécution des opérations
simultanément (1 par défaut)
mongoimport -d mietscraping -mails c -j 4 < e-mails.json
ou vous pouvez diviser le fichier et importer tous les fichiers.
J'espère que cela vous aidera.
à la recherche un peu plus, c'est un bug dans une version
https://jira.mongodb.org/browse/TOOLS-939
voici une autre solution, vous pouvez modifier le batchSize, pour la valeur par défaut est de 10000, de réduire la valeur et de test:
mongoimport -d mietscraping -mails c < e-mails.json --batchSize 1