您好,欢迎访问一九零五行业门户网

Java对MongoDB文件的存取操作

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文件的存取操作, 感谢原作者分享。
其它类似信息

推荐信息