programing

MongoDB: 큰 파일을 가져올 때 mongoimport의 연결이 끊어집니다.

mytipbox 2023. 6. 27. 23:35
반응형

MongoDB: 큰 파일을 가져올 때 mongoimport의 연결이 끊어집니다.

JSON 파일을 로컬 MongoDB 인스턴스로 가져오는 데 문제가 있습니다.JSON은 다음을 사용하여 생성되었습니다.mongoexport이렇게 생겼어요.어레이 및 하드 코어 중첩 없음:

{"_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":"mail@mail.com","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":"mail@mail.com","type":"answer"}

행 수가 최대 300개인 9MB 파일을 가져오면 문제가 없습니다.

[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

그러나 행 수가 ~1300개인 32MB 파일을 가져오려고 하면 가져오기가 실패합니다.

[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

로그는 다음과 같습니다.

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"

BSON 문서의 16MB 제한에 대해서는 전에 들어본 적이 있지만, 제 JSON 파일의 행이 16MB보다 큰 경우는 없기 때문에 이것은 문제가 되지 않을 것입니다.로컬 컴퓨터를 가져오는 것과 동일한 작업(32MB)을 수행하면 모든 작업이 정상적으로 수행됩니다.

무엇이 이 이상한 행동을 유발할 수 있는지 아십니까?

문제는 성능에 관한 것이라고 생각합니다. 문제를 해결할 수 있는 방법은 다음과 같습니다.

mongoimport 옵션 -j를 사용할 수 있습니다.CPU에 있는 코어 수에 따라 4, 8, 16과 같이 4로 작동하지 않는 경우 증분을 시도합니다.

mongoimport --help

-j, --numInsertWorkers= 동시에 실행할 삽입 작업의 수(1개로 증가)


mongoimport - dmietscraping - c mails - j 4 < mails.json


또는 파일을 분할하고 모든 파일을 가져올 수 있습니다.

이것이 당신에게 도움이 되길 바랍니다.


조금 더 살펴보면, 일부 버전 https://jira.mongodb.org/browse/TOOLS-939 의 버그입니다. 여기에 있는 또 다른 솔루션은 batchSize를 변경할 수 있습니다. 기본값은 10000입니다. 값을 줄이고 테스트합니다.

mongoimport - dmietscraping - c mails < mails.json --batch Size 1.

꽤 나이가 들었지만, 저는 같은 문제로 고군분투했습니다.특히 나침반이나 프로그램을 사용하여 원격으로 대용량 파일을 가져오려면 추가하기만 하면 됩니다.

&wtimeoutMS=0

연결 문자열에 연결합니다.이렇게 하면 쓰기 작업 시간 제한이 제거됩니다.

언급URL : https://stackoverflow.com/questions/33475505/mongodb-mongoimport-loses-connection-when-importing-big-files

반응형