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文件的存取操作, 感谢原作者分享。
   
 
   