java - 用Java将流写入mongoDB

标签 java mongodb streaming hibernate-ogm vertx3

我有一个文件要存储在 mongoDB 中。我想要的是避免加载整个文件(大小可能为几 MB),而是我想打开流并将其定向到 mongoDB 以保持写入操作的性能。我不介意将内容存储在 base64 编码的 byte[] 中。

然后我想在读取文件时做同样的事情,即不将整个文件加载到内存中,而是在流中读取它。

我目前正在将 hibernate-ogm 与 Vertx 服务器一起使用,但如果它能有效地解决问题,我愿意切换到不同的 api。

我想实际存储一个包含多个字段和多个附件的文档。

最佳答案

您可以使用 GridFS .特别是当您需要存储较大的文件 (>16MB) 时,这是推荐的方法:

File f = new File("sample.zip");
GridFS gfs = new GridFS(db, "zips");
GridFSInputFile gfsFile = gfs.createFile(f);
gfsFile.setFilename(f.getName());
gfsFile.setId(id);
gfsFile.save();

或者如果你有一个 InputStream in:

GridFS gfs = new GridFS(db, "zips");
GridFSInputFile gfsFile = gfs.createFile(in);
gfsFile.setFilename("sample.zip");
gfsFile.setId(id);
gfsFile.save();

您可以使用 GridFS.find 方法之一加载文件:

GridFSDBFile gfsFile = gfs.findOne(id);
InputStream in = gfsFile.getInputStream();

关于java - 用Java将流写入mongoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36151868/

相关文章:

android - ffmpeg rtsp解码缓冲区太小

streaming - UDP 视频流的数据包顺序

java - 我必须输入相同的字符串两次才能运行 'else if' 代码

MongoDB多级$lookup排序不起作用

java - 最终局部变量的生命周期

MySQL 分区与更改为 MongoDB

javascript - 如何在 Express.js 和 mongoose 中编写异步 for-each 循环?

ios - 如何从 iOS 设备(而不是它自己的相机)流式传输 (RTMP) 视频

java - 无法加载库 'gs' : libgs. 所以:无法打开共享对象文件:没有这样的文件或目录

java - 在 android 上使用 java-google-translate-text-to-speech