日期:2014-05-16  浏览次数:20394 次

介绍和使用Berkeley DB Java Edition(嵌入式数据库)

一、 简介

?????? Berkeley DB Java Edition (JE)是一个完全用JAVA写的,它适合于管理海量的,简单的数据。

??????? 能够高效率的处理1到1百万条记录,制约JE数据库的往往是硬件系统,而不是JE本身。

??????? 多线程支持,JE使用超时的方式来处理线程间的死琐问题。

??????? Database都采用简单的key/value对应的形式。

??????? 事务支持。
??????? 允许创建二级库。这样我们就可以方便的使用一级key,二级key来访问我们的数据。

??????? 支持RAM缓冲,这样就能减少频繁的IO操作。

??????? 支持日志。

??????? 数据备份和恢复。

??????? 游标支持。

二、?? 获取JE

JE下载地址:

http://www.oracle.com/technology/software/products/berkeley-db/je/index.html

解开包后 把JE_HOME/lib/je-<version>.jar 中的jar文件添加到你的环境变量中就可以使用je了。

相关帮助文档可以参考 JE_HOME/docs/index.html

源代码见JE_HOME/src/*.*

三、???? JE常见的异常

DatabaseNotFoundException 当没有找到指定的数据库的时候会返回这个异常

DeadlockException 线程间死锁异常

RunRecoveryException 回收异常,当发生此异常的时候,你必须得重新打开环境变量。

四、???? 关于日志文件必须了解的六项

JE的日志文件跟其他的数据库的日志文件不太一样,跟C版的DBD也是有区别的

??????? JE的日志文件只能APPEND,第一个日志文件名是 00000000.jdb,当他增长到一定大小的时候(默认是10M),开始写第二个日志文件00000001.jdb,已此类推。

??????? 跟C版本有所不同,JE的数据日志和事务日志是放在一起的,而不是分开放的。

??????? JE cleaner负责清扫没用到的磁盘空间,删除后,或者更新后新的记录会追加进来,而原有的记录空间就不在使用了,cleaner负责清理不用的空间。

??????? 清理并不是立即进行的,当你关闭你的数据库环境后,通过调用一个cleaner方法来清理。

?????? 清理也不是只动执行的,需要你自己手动调用cleaner 方法来定时清理的。

??????? 日志文件的删除仅发生在检查点之后。cleaner准备出哪些log 文件需要被删除,当检查点过后,删掉一些不在被使用的文件。每写20M的日志文件就执行一次检查点,默认下。

JE的英文文档:http://www.oracle.com/technology/documentation/berkeley-db/je/GettingStartedGuide/index.html

JE的中文文档(不全):http://fesir.itpub.net/post/4728/253789
http://fesir.itpub.net/post/4728/253789

上面大概介绍一下,接下来是我在工作中写的一个例子(仅供参考):

Java代码 view plaincopy to clipboardprint?
package src.util;??
?
import java.io.File;??
import java.util.List;??
?
import junit.framework.TestCase;??
import src.com.bizjato.b2b.entity.Suppliers;??
?
import com.sleepycat.bind.EntryBinding;??
import com.sleepycat.bind.serial.SerialBinding;??
import com.sleepycat.bind.serial.StoredClassCatalog;??
import com.sleepycat.je.Cursor;??
import com.sleepycat.je.CursorConfig;??
import com.sleepycat.je.Database;??
import com.sleepycat.je.DatabaseConfig;??
import com.sleepycat.je.DatabaseEntry;??
import com.sleepycat.je.DatabaseException;??
import com.sleepycat.je.Environment;??
import com.sleepycat.je.EnvironmentConfig;??
import com.sleepycat.je.EnvironmentMutableCon