mongodb一直被大家关注,传说中的文档数据库到底比现在每天使用mysql强在哪里?这一切都需要用数据来说话, 废话少说,先看一段代码, 请忽略我代码编写的技巧和严谨程度,谢谢 。 package com.cn.javabloger; import java.io.file; import java.io.ioexcept
mongodb一直被大家关注,传说中的文档数据库到底比现在每天使用mysql强在哪里?这一切都需要用数据来说话,
废话少说,先看一段代码,请忽略我代码编写的技巧和严谨程度,谢谢。
package com.cn.javabloger;
import java.io.file;
import java.io.ioexception;
import java.util.date;
import java.util.list;
import com.mongodb.db;
import com.mongodb.mongo;
import com.mongodb.gridfs.gridfs;
import com.mongodb.gridfs.gridfsdbfile;
import com.mongodb.gridfs.gridfsfile;
public class mongodbfiletest {
static db imgdb=null;
static gridfs gridfs=null;
public static void main(string[] args) throws exception {
long start=system.currenttimemillis();
mongo mongo = new mongo(192.168.50.215, 27017); //数据库地址,端口号
imgdb = mongo.getdb(imgs); // 数据库名称
gridfs = new gridfs(imgdb );
string filename=android-sdk-windows.rar; // 读取428 m 的文件
string filenameo=spring.zip; // 写入文件名称
mongodbfiletest mon= new mongodbfiletest();
file filein = new file (c:/+filename);
file fileout = new file (c:/+filenameo);
/**
* 将文件存入 mongodb 数据库中
*/
mon.savefile(filein, filename);
long end=system.currenttimemillis();
system.out.println (end -start);
/**
* 从mongodb中读取数据,并且写入磁盘
*/
list> list=mon.findfilesbyname(filename);
gridfsdbfile gridfsdbfile=(gridfsdbfile) list.get(0) ;
gridfsdbfile.writeto(fileout);
system.out.println (list.size() );
}
/**
* 写入文件
* @param filename
*/
public void savefile(file file,string filename) {
try {
gridfsfile mongofile =gridfs.createfile(file);
mongofile.put(filename, filename);
mongofile.put(uploaddate, new date() );
mongofile.put(contenttype,filename.substring( filename.lastindexof(.) ));
mongofile.save();
} catch (ioexception e) {
e.printstacktrace();
}
}
/**
* 读取文件
* @param filename
*/
public list findfilesbyname(string filename) {
list list =gridfs.find(filename);
return list;
}
}
我在一台32位的机器上启动mongodb,并且加入了smallfiles 和 nssize启动参数,找了一个428m的 android-sdk-windows.rar文件,写入mongodb数据库四次,每次写入的消耗时间为 87360/69485/105595/40094,每次插入内存占用率一次比一次高,开始mongod进程占用256m,最后mongod进程占用了2568m内存,在我写入第五遍的时候,出现了以下的错误信息:
tue may 18 00:36:59 caught assertion in insert , continuing
tue may 18 00:36:59 insert imgs.fs.chunks exception userassert:can't map file memory – mongo requires 64 bit build for larger datasets 0ms
mmap() failed for /work/mongodata/imgs.7 len:536870912 errno:12 cannot allocate memory
mmap failed with out of memory, if you're using 32-bits, then you probably need to upgrade to 64
暂时没有64位的系统,近期会准备一台继续折腾。
–end–
原文地址:java对mongodb文件的存取操作, 感谢原作者分享。