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
'programing' 카테고리의 다른 글
iOS 응용 프로그램의 최대 크기 (0) | 2023.07.17 |
---|---|
SQL Server 2008: 상위 10개 제품 및 차별화된 기능 제공 (0) | 2023.06.27 |
webpack://와 webpack-internal://의 차이점은 무엇입니까? (0) | 2023.06.27 |
파일 크기를 바이트 단위로 반환하는 VBA Excel 기능 (0) | 2023.06.27 |
MongoDB 컬렉션 내에 포함된 특정 문서를 가져오는 방법은 무엇입니까? (0) | 2023.06.27 |