mongodb java 文件_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 ListfindFilesByName(String fileName) {

Listlist =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–

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值