MongoDB导入大的json数据文件,导入不完全,每次只能导入1000条,且只能导入1000条解决方法
昨天,做了一个东西,就是把生产上的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/
这个是官方的学习文档,虽然是英文的,但是大家可以看看的。
当然如果哪位哥们,能找到完美解决的方法,可以留言一下,分享才是王道嘛!!!
更多推荐
所有评论(0)