mongodb版本是3.4.7
使用GridFS存取圖片
代碼如下
/**
* 保存檔案
* @param collectionName
* @param mongoFile
*/
public boolean saveFiles(String collectionName, MongoFile mongoFile){
try{
// DB db = mongoTemplate.getDb();
// DBCollection mongdb_pic = db.getCollection(collectionName);
// DBObject dbObject = new BasicDBObject();
// if(mongoFile.getFile() != null){
// byte[] bytes = FileUtil.file2byte(mongoFile.getFile());
//
// Binary binary = new Binary(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);
DB db = mongoTemplate.getDb();
GridFS gridFS = new GridFS(db, collectionName);
GridFSInputFile gfs = 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 (Exception e){
logger.error("Mongo資料操作>>存盤檔案發送錯誤>>error:" + e.toString());
e.printStackTrace();
return false;
}
return true;
}
/**
* 查詢檔案
* @param collectionName
* @param filename
* @return
*/
public GridFSDBFile retrieveFileOne(String collectionName, String filename) {
try {
DB db = mongoTemplate.getDb();
GridFS gridFS = new GridFS(db, collectionName);
GridFSDBFile dbfile = gridFS.findOne(filename);
if (dbfile != null) {
return dbfile;
}
} catch (Exception e) {
logger.error("Mongo資料操作>>獲取檔案發送錯誤>>error:" + e.toString());
e.printStackTrace();
}
return null;
}
uj5u.com熱心網友回復:
用mongofiles看下取圖片需要多久uj5u.com熱心網友回復:
怎么看取圖片的時間啊./mongofiles -d preFileDb get "1.jpg"
怎么顯示執行時間呢
uj5u.com熱心網友回復:
取圖片877kb 大概默念算了一下,有4秒鐘。這是為啥啊。不明白了。
uj5u.com熱心網友回復:
time ./mongofiles -d preFileDb get "1.jpg"
uj5u.com熱心網友回復:
用mongofiles看下取圖片需要多久
取圖片877kb 大概默念算了一下,有4秒鐘。這是為啥啊。不明白了。
多執行幾遍試下 可能沒有快取到記憶體
uj5u.com熱心網友回復:
用mongofiles看下取圖片需要多久
取圖片877kb 大概默念算了一下,有4秒鐘。這是為啥啊。不明白了。
多執行幾遍試下 可能沒有快取到記憶體
執行很多遍了,同樣是阿里云服務器,我在自己的服務器上,記憶體4g的,執行同樣命令也很快。在公司卻很慢,這是為啥,和numa有關系嗎
uj5u.com熱心網友回復:
啟動mongodb我也執行了numactl --interleave=all。沒生效嗎這是。奇怪了。開發環境,測驗環境,就生產環境有問題,uj5u.com熱心網友回復:
另外直接訪問云磁盤這種方法是不可取的 因為沒有高可用機制uj5u.com熱心網友回復:
另外直接訪問云磁盤這種方法是不可取的 因為沒有高可用機制
我應該怎么做呢,目前我這里取圖片執行慢,是因為什么原因,我目前只想到numa,但是mongodb日志沒列印出這方面的資訊,啟動mongodb也在加了前綴 numactl --interleave=all。
直接訪問云磁盤,會導致需要這么久嗎
uj5u.com熱心網友回復:
監控下作業系統狀態uj5u.com熱心網友回復:
另外如果圖片大小都小于16M 可以考慮用用document來存盤 不用gridfs畢竟取一個document 比取好幾個gridfs的chunk要快很多
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/99636.html
標籤:MongoDB
上一篇:mysql創建觸發器時出現錯誤,但是找了好久不知到錯誤在哪
下一篇:mysql系統表成這樣了,被黑?
