Kundera 是一个兼容JPA接口的对象映射器。 当前Kundera 支持的数据库有:Cassandra, MongoDB, HBase, Redis, OracleNoSQL, Neo4j, CouchDB, Kudu, Relational databases, Apache Spark.
新手请阅读Getting Started in 5 minutes 和Working 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 文件中的配置信息。