mongo数据库的迁移遇到的坑

Wesley13
• 阅读 633
  由于公司项目原因需要把大量图片导入到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索引不会随着走,需要自己重新建。

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
MongoDB——增加数据
建立两个对象j和t,并保存到集合中去.在例子里“”来表示是shell输入提示符j{name:"mongo"};{"name":"mongo"}t{x:3};{"x":3}db.things.save(j);db.things.
Wesley13 Wesley13
2年前
mongo复制集脑裂问题如何处理
mongo replication 脑裂问题如何处理:一、问题描述:一套mongo replication有4个节点。1个仲裁节点。在停止实例(或实例毁坏)的时候,导致所有节点都变为SECONDARY节点。不管如何重启节点。或者停止到最后一个节点。此时mongo节点都是SECONDARY。二、出现的现象:1、如果此时所有节点都重新
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
2年前
mongo中的模糊查询
以下是一个mongo查询的综合应用,即介绍一个生产中实际应用的模糊查询,当然其实也很简单,主要用到mongo中的模糊查询和$or查询,以及并的关系,下面是一个mongo中的一条记录{"_id":"ffe6a0689043433497d275387340e655","file_id":"ffe
Wesley13 Wesley13
2年前
MongoDB增删改查
MongoDB增删改查查询数据库:showdbs进入数据库:useMYDB查询数据库中表:showtables在mongo中创建新的用户并赋予相应权限:db.createUser({user:<name_string,
Stella981 Stella981
2年前
Mongo _id 生成和使用
MongoDB中我们经常会接触到一个自动生成的字段:”\_id”,类型为ObjectId。ObjectId构成之前我们使用MySQL等关系型数据库时,主键都是设置成自增的。但在分布式环境下,这种方法就不可行了,会产生冲突。为此,MongoDB采用了一个称之为ObjectId的类型来做主键。ObjectId是一个12字节的BSON类型字符串。按照字节顺
Wesley13 Wesley13
2年前
MongoDB聚合查询
ps:以前都在iteye写博文,现在工作换了,转战前端,基本告别了java和python,看这边氛围还不错,就把那里的博客迁移过来了~~~出于对性能的要求,公司希望把Mysql的数据迁移到MongoDB上,于是我开始学习Mongo的一些CRUD操作,由于第一次接触NoSQL,还是有点不习惯。先吐个槽,公司的Mongo版本是2.6.4,而用的jav
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这