BerkeleyDB简介

与常用的关系数据库相比,BerkeleyDB更像是一种内存数据库,可嵌入到系统应用程序,手机甚至是路由器中。由于大部分操作在缓存中进行,因此访问速度非常高效。

BerkeleyDB JE是由纯Java语言编写的,数据主要缓存在JVM当中。BerkeleyDB JE对开发人员提供了两套API操作:分别是DPL API和Base API,通常在Schema结构不经常变动的情况下,推荐使用DPL API。通过DPL API可直接将Java对象进行持久存储(前提:该Java对象有默认的构造函数),检索效率相对较快。

DPL的英文全称为Direct Persistence Layer,与Hibernate的ORM功能相比,两者都是以操作对象的方式来操纵底层数据。所不同的是,Hibenrate的ORM是完成了Java实体到库表结构的映射,在执行CURD操作时,需要先由对象实体构造出sql语句,在通过sql语句去操纵数据库;而DPL是直接将java实体对象进行存储,因此在执行操作时,没有中间的映射转换过程,从而便加快了数据的访问和执行速度。

DPL对存储实体的描述是通过Annotation来实现的,它提供了以下几个标签用来对实体类进行说明描述:

@Entity
该标签放在class声明上,表示该类是可持久存储的,并且还可通过预定义的键值信息(primaryKey,SecondaryKey)进行检索。
@Persistence
该标签放在class声明上,表示该类可持久存储,但是不能用于检索。此种类型的实体类主要充当Entity Class的辅助类,供Entity Class进行调用、反问。
@PrimaryKey
该表签只能在Entity类中声明 (不能声明在Persistence类中),相当于关系数据库中的主键。每个Entity类只能定义一个PrimaryKey。
@SecondaryKey
同样该标签也只能在Entity类中进行声明。但不同于PrimaryKey,Entity类可以声明多个SecondaryKey,用来表示该实体类的外键信息。

一个简单的实体类声明如下:

@Entity
public class Book {
	@PrimaryKey(sequence="SEQ_Book")//通过指定sequence可自动生成主键值
 	private long id;
	//多对一关联,关联的实体为Library,级联删除模式为cascade,即当Library被删除时同时删除Book信息
 	@SecondaryKey(relate = MANY_TO_ONE,relatedEntity=Library.class,onRelatedEntityDelete=CASCADE)
	private Long library;
	//多对多关联,关联的实体为Author,级联删除模式为NULLIFY,即当Author被删除时,Book的author属性指定为null
 	@SecondaryKey(relate = MANY_TO_MANY,relatedEntity=Author.class,onRelatedEntityDelete=NULLIFY)
	private Set<Long> authors=new HashSet<Long>();
 	public long getId(){
 		return id;
 	}
 	public void setId(long value){
 		this.id=value;
 	}
 	public Long getLibrary(){
 		return library;
 	}
 	public void setLibrary(Long value){
 		this.library=value;
 	}
 	public Set<Long> getAuthors(){
 		return authors;
 	}
 	public void setAuthors(Set<Long> value){
 		this.authors=value;
 	}
}

使用BerkeleyDB,首先需要构造它的数据库环境,可通过如下API操作完成。
EnvironmentConfig envConf=new EnvironmentConfig();
Environment env=new Environment(new File("envHome"),envConf);
EnvironmentConfig提供了很多set方法用来配置数据库的功能特性,如:
setAllowCreate():当envHome不存在的时候,是否自动创建
setTransactional():是否启用事务管理功能
setCacheSize():设置缓存大小
setReadOnly():以只读方式打开数据库

DPL对存储实体的访问主要是通过EntityStore来完成的,该对象可基于Enviroment来构建。
StoreConfig storeConf=new StoreConfig();//首先构造StoreConfig对象
storeConf.setAllowCreate(true);//当存储路径不存在时,是否自动创建
EntityStore store=new EntityStore(env,"EntityStore",storeConf);
有了EntityStore对象之后,便可通过它对底层的数据进行检索(只有在实体类的属性被声明成@PrimaryKey或@SecondaryKey的情况下,才可通过该属性对实体类进行检索)


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值