使用 Kundera 实现在 MongoDB 中存储大文件

转自

Kundera 是一个兼容JPA接口的对象映射器。 当前Kundera 支持的数据库有:Cassandra, MongoDB, HBase, Redis, OracleNoSQL, Neo4j, CouchDB, Kudu, Relational databases, Apache Spark.

新手请阅读Getting Started in 5 minutesWorking with MongoDB using Kundera

在MongoDB中存储大文件
为了存储大于 BSON文档限制大小(16MB)的文件,MongoDB 提供了GridFS。

GridFS 把一个文件切分为很多块,每一块存储在一个文档中,而不是存在一个文档中。 默认情况下, GridFS每一个块的大小最大为255k。 GridFS使用两个collection来存储这些文件。一个collection用于存储文件块,另一个存储文件的元数据。

GridFS 和 Kundera
Kundera允许用户用GridFS对MongoDB中的大文件执行CURD和Query操作。用户需要做的就是在你想要用GridFS插入的文件中添加一个@javax.persistence.Lob 注释。

实体样例:

@Entity
public class Book
{
    @Id
    private String id;

    @Column
    private String title;

    @Lob
    private byte[] pdfFile;

    //setters and getters
}

映射
@Lob Field ==> GridFSInputFile.

Other Fields ==> GridFSInputFile.metadata.

思考上面提到的实体样例。GridFSInputFile是用pdf文件创建的。其他文件(id,title)被保存在GridFSInputFile的元数据里。

CRUD 与查询
请参考 test case.

限制
CRUD只能针对简单实体 (没有关联、继承、内嵌等)。
查询只支持 WHERE 和ORDER BY
Lob 字段数据类型只能是 byte[].
结论
Kundera兼容JPA规范,与NoSQL数据库一起更易使用。 无论使用的是什么数据库都是编写相同的JPA查询。 当然,如果用户想切换数据库(如:从HBase 切换到MongoDB),它不需要重新编写代码的 — 只需要修改 persistence.xml 文件中的配置信息。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值