mongo数据库的迁移遇到的坑

  由于公司项目原因需要把大量图片导入到mongo中,于是乎用java写了个小脚本,遍历图片文件夹,把所有的图片导入mongo中,图片数量庞大100多万张。

最开始单线程跑,跑了一会发现很慢,十多分钟传了几千张,一合计这得跑到猴年马月啊。分析了一下mongo服务器在本地测试环境,网络传输不是问题。那大部分时间

应该消耗磁盘IO上了。于是乎启动了8个线程跑,果然速度上去了后来又考究了下mongo批量传输,无果(哈哈哈,后面再研究)。20分钟全部导入到了mongo。

  临近上线,需要把图片全部导入到云服务器上,小脚本又派上了场,但是这次很悲催,比之前单线程还慢。由于云服务器离我们很远,带宽又很小,大部分时间全

消耗在网络IO上了。幸得大神提醒看有没有像mysql类似的导入导出功能。一顿百度mongo自带export和import。

   mongo导出命令:mongoexport -d images -c fs.files -o /Users/admin/fs.files.json --type json
            mongoexport -d images -c fs.chunks -o /Users/admin/fs.chunks.json --type json

 

 mongo导入命令:mongoimport -d images -c fs.chunks --file /Users/admin/fs.chunks.json
                        mongoimport -d images -c fs.files --file /Users/admin/fs.files.json

  10分钟搞定。

  推到云上后,获取图片程序慢了很多,一张图片需要3-8秒钟才查出来。这叔可忍婶也忍不了啊。于是乎又陷入找问题中,本来就没用过mongo的人,各种推断。

本地是很快的只有20多毫秒。于是各种推测:

1:云服务器由于带宽慢,所以在本地请求慢。

    于是乎使用curl 请求了下服务,发现同样很慢,排除了带宽问题。

2:云服务器上程序和mongo是放在不同服务器上的。服务器之间网络传输慢

 云服务器之间也是内网,ping了一下,很快,排除。

3:mongo安装有问题;

   对比本地mongo和云服务器上的mongo

 1)云服务器上的mongo出于安全考虑加了auth认证,取消掉auth,还是很慢,排除。

   2)云服务器上的mongo加了bindip,取消掉,依然很慢。排除。

忽然无解了。度之,没有类似的问题和答案。漫无边际的浏览着,忽然两个字眼入目:索引

发现了新大陆一般,查看本地mongo中是否有索引:db.fs.chunks.getIndexes(); 然后云服务器查询,果然在这藏着呢。对比之后建索引:

db.fs.files.createIndex({"_id":1},{"name":"_id_"})
db.fs.files.createIndex({"filename":1,"uploadDate":1},{"name":"filename_1_uploadDate_1"})

db.fs.chunks.createIndex({"_id":1},{"name":"_id_"});
db.fs.chunks.createIndex({"files_id":1,"n":1},{"name":"files_id_1_n_1","unique":true});

总结:mongo的export和import索引不会随着走,需要自己重新建。

 
 

猜你喜欢

转载自www.cnblogs.com/wawaxiaomei/p/10986890.html