小弟求助大神,mongodb在阿里云服务器上centos7.0 取图片250kb需要3s,直接访问云服务器磁盘图片只需要不到1s

[复制链接]
查看11 | 回复10 | 2021-1-27 06:42:17 | 显示全部楼层 |阅读模式
mongodb版本是3.4.7
使用GridFS存取图片
代码如下

/**
*保存文件
*@paramcollectionName
*@parammongoFile
*/
publicbooleansaveFiles(StringcollectionName,MongoFilemongoFile){
try{
//DBdb=mongoTemplate.getDb();
//DBCollectionmongdb_pic=db.getCollection(collectionName);
//DBObjectdbObject=newBasicDBObject();
//if(mongoFile.getFile()!=null){
//byte[]bytes=FileUtil.file2byte(mongoFile.getFile());
//
//Binarybinary=newBinary(bytes);
//dbObject.put("imgByte",binary);
//}
//dbObject.put("id",mongoFile.getId());
//dbObject.put("fileName",mongoFile.getFileName());
//dbObject.put("fileSize",mongoFile.getFileSize());
//dbObject.put("descs",mongoFile.getDescs());
//dbObject.put("fileType",mongoFile.getFileType());
//dbObject.put("contentType",mongoFile.getContentType());
//dbObject.put("oldName",mongoFile.getContentType());
//mongdb_pic.save(dbObject);
DBdb=mongoTemplate.getDb();
GridFSgridFS=newGridFS(db,collectionName);
GridFSInputFilegfs=gridFS.createFile(mongoFile.getFile());
System.out.println("文件大小:"+mongoFile.getFile().length());
gfs.setChunkSize(mongoFile.getFile().length());
gfs.setFilename(mongoFile.getFileName());
gfs.put("_id",mongoFile.getId());
gfs.put("fileName",mongoFile.getFileName());
gfs.put("fileSize",mongoFile.getFileSize());
gfs.put("descs",mongoFile.getDescs());
gfs.put("fileType",mongoFile.getFileType());
gfs.put("contentType",mongoFile.getContentType());
gfs.put("oldName",mongoFile.getOldFileName());
gfs.save();
}catch(Exceptione){
logger.error("Mongo数据操作>>存储文件发送错误>>error:"+e.toString());
e.printStackTrace();
returnfalse;
}
returntrue;
}
/**
*查询文件
*@paramcollectionName
*@paramfilename
*@return
*/
publicGridFSDBFileretrieveFileOne(StringcollectionName,Stringfilename){
try{
DBdb=mongoTemplate.getDb();
GridFSgridFS=newGridFS(db,collectionName);
GridFSDBFiledbfile=gridFS.findOne(filename);
if(dbfile!=null){
returndbfile;
}
}catch(Exceptione){
logger.error("Mongo数据操作>>获取文件发送错误>>error:"+e.toString());
e.printStackTrace();
}
returnnull;
}


分 -->
回复

使用道具 举报

千问 | 2021-1-27 06:42:17 | 显示全部楼层
用mongofiles看下取图片需要多久

回复

使用道具 举报

千问 | 2021-1-27 06:42:17 | 显示全部楼层
引用1楼rucypli的回复:用mongofiles看下取图片需要多久


怎么看取图片的时间啊
./mongofiles-dpreFileDbget"1.jpg"
怎么显示执行时间呢

回复

使用道具 举报

千问 | 2021-1-27 06:42:17 | 显示全部楼层
引用1楼rucypli的回复:用mongofiles看下取图片需要多久
取图片877kb大概默念算了一下,有4秒钟。这是为啥啊。不明白了。
回复

使用道具 举报

千问 | 2021-1-27 06:42:17 | 显示全部楼层
引用2楼javalearnNet的回复:Quote: 引用1楼rucypli的回复:
用mongofiles看下取图片需要多久



怎么看取图片的时间啊
./mongofiles-dpreFileDbget"1.jpg"
怎么显示执行时间呢

time./mongofiles-dpreFileDbget"1.jpg"
回复

使用道具 举报

千问 | 2021-1-27 06:42:17 | 显示全部楼层
引用3楼javalearnNet的回复:Quote: 引用1楼rucypli的回复:
用mongofiles看下取图片需要多久

取图片877kb大概默念算了一下,有4秒钟。这是为啥啊。不明白了。

多执行几遍试下可能没有缓存到内存
回复

使用道具 举报

千问 | 2021-1-27 06:42:17 | 显示全部楼层
引用5楼rucypli的回复:Quote: 引用3楼javalearnNet的回复:
Quote: 引用1楼rucypli的回复:
用mongofiles看下取图片需要多久

取图片877kb大概默念算了一下,有4秒钟。这是为啥啊。不明白了。

多执行几遍试下可能没有缓存到内存

执行很多遍了,同样是阿里云服务器,我在自己的服务器上,内存4g的,执行同样命令也很快。在公司却很慢,这是为啥,和numa有关系吗
回复

使用道具 举报

千问 | 2021-1-27 06:42:17 | 显示全部楼层
启动mongodb我也执行了numactl--interleave=all。没生效吗这是。奇怪了。开发环境,测试环境,就生产环境有问题,
回复

使用道具 举报

千问 | 2021-1-27 06:42:17 | 显示全部楼层
另外直接访问云磁盘这种方法是不可取的因为没有高可用机制
回复

使用道具 举报

千问 | 2021-1-27 06:42:17 | 显示全部楼层
引用8楼rucypli的回复:另外直接访问云磁盘这种方法是不可取的因为没有高可用机制
我应该怎么做呢,目前我这里取图片执行慢,是因为什么原因,我目前只想到numa,但是mongodb日志没打印出这方面的信息,启动mongodb也在加了前缀numactl--interleave=all。
直接访问云磁盘,会导致需要这么久吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行