Berkeley DB for Java

一、关于JE

设计思想:

     直接将要持久化的对象通过诸如IO serialization 的办法直接保存到文件上,并能享有关系数据库系统提供的事务,并发,和高效的好处JE正是居于这一设计思想而孕育出来的,是完全用 Java 设计,运行在应用程序的地址空间中,没有客户端/服务器通信的开销,从而使开发人员能够快速、简单、可靠地存储和检索信息。

Berkeley DB Java Edition(JE)是一个使用纯java编写的通用的,支持事务的,嵌入式的数据库。它让java开发人员可以安全而有效的在进程中存储和管理任意的数据。 
两种API:  (
供开发人员选择和数据库交互)

  • 直接持久层(DPL:有点类似于Hibernate或JPA一样的ORM技术,通过DPL你可以很方便持久化任何类型的数据。
  • 基本API(Base API:属于那种原始的,但是功能十分完善的又很灵活的API。

二、优点

1. 轻松快速地数据存储
Berkeley DB Java 版可以轻松快速地存储数据,而不会导致像其他数据库中那么多的开销。Berkeley DB Java 版与您的应用程序运行在同一 JVM 中的单个 JAR 文件,因此不需要远程服务器。本地缓存在内存中保存最活跃的数据以避免了开销较大的磁盘访问,并将 JVM 内存的使用限制到一个可预测的数量。

2. 可靠地事务处理能力
Berkeley DB Java 版可靠地存储数据并确保数据完整性。如果系统发生故障,Berkeley DB Java 版将恢复事务数据并根据日志和数据库信息将系统重置为可运行的、一致的状态。

3. 易于部署
Berkeley DB Java 版是高度可移植的、非常灵活且易于集成。它从一开始就被设计为一个充分利用 Java 环境的纯 Java 产品。作为单个 Java 存档 (JAR) 文件,它在运行您应用程序的 JVM 中运行。Berkeley DB Java 版旨在通过企业级、纯 Java 的数据存储解决方案为不断增长的大型 Java 社区提供服务。

三、特性

1.通过“键值对”来保存和检索数据的

JE中的每条记录(record)就是一个“键值对”,“值”代表了你要保存并且未来想检索的数据。“键”是你用于查找数据的索引。这有点像Java中的Map。但是JE是允许一个键有多个值的,这就是重复数据(Duplicate Data),如果你使用的是DPL,可以通过次键(secondary keys)来实现;如果你使用的是BaseAPI,你可以在打开数据库的时候设置允许重复属性来实现。 
2.支持事务

使用事务可以保证JE中数据的ACID。 
3.JE中有个非常重要的资源是内存缓存(in-memory cache),对它的设置不当可能会造成内存的浪费或是非常频繁的I/O读写。

4. 关于JE中保存的数据类型(schema)的变化比一般的数据库复杂。

JE中的每个记录都是一个键值对,那个值实际上就是某个java类的实例。当这个java类发生了改变的时候,如果改变只是添加了几个字段之类的简单改变那还好办,如果是改变了字段名,那么就要使用一些特定的类和方法来转换了。 
4.关于JE的备份和恢复,这也比我们通常用的数据库简单很多。

因为JE的所有数据都是记录在.log文件之中,所以大体上我们只要把所有的.log文件拷贝起来就可以了。关于JE中的.log文件,有几点要知道下: 

JE中没有单独的“数据文件”,跟BerkeleyDB C Edition不同的是,JE中所有的事务日志和记录数据都保存在一个文件中,这就是.log文件。
②.log文件是只能添加的(append only),记录数据的增删改都是加添在.log的末尾处。
有一个JE清理器(JE cleaner)会负责回收没用的磁盘空间。比如发生了很多的删除和修改之后,一个比较早的.log文件里面的数据大部分都没有用了,这时有一个独立的线程,会把这个文件中有用的部分复制到最后一个.log文件末尾处,然后删除掉那个没用的.log文件。
对没用的.log文件文件的删除只会发生在检查点(checkpoint)之后。检查点的执行在默认情况下是发生在写入了20M的内容到日志文件之中的时候

四、实例:

参考:1.http://blog.csdn.net/fupacker/article/category/1155713/2

         2.http://mengyang.iteye.com/blog/1001847

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页