1. 程式人生 > >MongoDB匯入大的json、csv資料檔案,匯入不完全的解決方法

MongoDB匯入大的json、csv資料檔案,匯入不完全的解決方法

轉載文章:轉自:點選開啟https://blog.csdn.net/qq_33206732/article/details/78788483#commentsedit

昨天,做了一個東西,就是把生產上的mongodb資料使用mongoexport匯出了一個.json檔案用於本地做分析使用,裡面有將近60MB的資料,匯出沒問題,但是當使用./mongoimport -d 資料庫名稱 -c 表名稱 檔案路徑+名稱,這個匯入指令匯入到本地的mongodb時,匯入時就會有問題,如下圖:

這裡寫圖片描述

可以看到,上面匯入到6.2MB的資料時就一直卡在這了,一直不往下執行,在資料庫中使用.count()查詢時發現只有1000條資料。

從上面的問題,我初步判斷以為是匯出的檔案格式有問題,但是我開啟檔案發現第1000條資料的格式是沒有問題的,是標準的json格式,說明檔案沒有問題。

那麼排除檔案的問題,只能是資料庫的問題了,從網上查了一下,有可能是步長的原因,因為本地只匯入了1000條,當然網上說mongoDB的步長預設設定是10000條,但是為啥我的只匯入了1000條,我只能想到的是本地配置了。當然我不需要在這裡糾結,我就試了一下加上步長的匯入方法,方法也很簡單 就是在上面的匯入語句後面加上 - -batchSize 100, 
這個我試了一下,有下面的結果: 
這裡寫圖片描述

可以看到,的確只匯入了100條資料,但是,還是不往下走。這時我就在想,我可以把步長設大一點。因為檔案中的資料9W條左右,所以我就設了個100000,結果如下: 
這裡寫圖片描述


作為程式猿是不是想摔鍵盤的感覺。。。,但是又不能不接著想解決方法,這時候我想,既然10W能匯入一半多,那我再多設一點不就行了?所以我又試了1000000,結果如下: 
這裡寫圖片描述
對不起,我已經把鍵盤給摔了。

我又把鍵盤拼起來了。。這時候 步長的方法已經被我shutdown了,接著在網上找,說實話mongo的資料還是少。。找了半天就找了一個帖子(本來想把連線發一下的,現在突然找不到了,坑啊),也是遇到這種原因,但是裡面並沒有解決方法,也都是說用步長,這時候有一個評論,也是說建議用batchSize 但是下面附了一個英文網址,我點進去,發現裡面也是說這個問題的,這個網址裡面剛開始也是用batchSize ,但是好像也沒啥鳥用,好像貼主也沒解決,最後他用的python讀檔案批量插入的方法解決的。

很可惜,我不想用指令碼,所以我就準備關掉,但是下面有一個回覆說,可以使用numInsertionWorkers試一下,當然這個只適用3.0以上的mongo,這個的工作原理是說,如果一個工人能夠匯入1000條,那麼你如果同時用500個工人的話,那麼一次性就能匯入500000條資料,

包著希望又試了一下,結果如下: 
這裡寫圖片描述
可以看到,我是用了100個工人,發現數據已經完全匯入了,進入資料庫檢視也沒有問題,資料完整。雖然這裡還是卡在100%,一直不動,但是問題解決了。這裡真的謝謝那個外國的哥們,雖然不認識你。 
那個網址是:網址 
https://stackoverflow.com/questions/33315243/mongoimport-stuck-at-same-point-while-importing-a-json-file.# 
這裡附一個mongo的官方文件的地址:https://docs.mongodb.com/manual/core/map-reduce/ 
這個是官方的學習文件,雖然是英文的,但是大家可以看看的。

當然如果哪位哥們,能找到完美解決的方法,可以留言一下,分享才是王道嘛!!

 

****************************************分隔線****************************************************************

我今天匯入一個CSV檔案遇見的問題是,帶著--upsert命令只能匯入第一條資料,不帶能匯入前1000條。資料總量大概9萬條。沒找到原因啊!?