当前位置: 首页 > 工具软件 > Kundera > 使用案例 >

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

季城
2023-12-01

转自

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 文件中的配置信息。

 类似资料: