您的位置:首页 > 编程语言 > Java开发

Berkeley DB Java Edition

2011-09-07 15:06 351 查看
本来想写一篇,发现网上有一篇已经写的很好了,所以稍微加一些介绍,其他部分尤其是去看它的吧.附带自己写的一个connection 代码.

该地址:http://whf0524.blog.163.com/blog/static/101414692008622423974/

另一篇文章请参看http://bbs.chinaunix.net/archiver/tid-1231491.html

简介

Berkeley DB(BDB)是一个高性能的,嵌入式键值对(Key/Value Pair)数据库.Berkeley DB可以支持数千的并发线程同时操作数据库,支持最大256TB的数据。

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

不支持网络访问
能够高效率的处理1到1百万条记录,制约JE数据库的往往是硬件系统,而不是JE本身。
多线程支持,JE使用超时的方式来处理线程间的死琐问题。
采用简单的key/value对应的形式。因此不支持SQL或者其他的数据库查询语言,不支持表结构和数据列。它的记录和键都可以达到4G字节的长度。
支持很多高级的数据库特性,比如ACID 数据库事务处理, 细粒度锁, XA接口,热备份以及同步复制。
采用B-Tree结构
允许创建二级库。这样我们就可以方便的使用一级key,二级key来访问我们的数据。
支持RAM缓冲,这样就能减少频繁的IO操作。
支持日志。
游标支持。

自己写的Connection类
package com.spider.bdb;
import java.io.File;
import java.io.FileNotFoundException;

import com.spider.util.CrawlURI;
import com.sleepycat.bind.EntryBinding;
import com.sleepycat.bind.serial.SerialBinding;
import com.sleepycat.bind.serial.StoredClassCatalog;
import com.sleepycat.collections.StoredMap;
import com.sleepycat.je.Database;
import com.sleepycat.je.DatabaseConfig;
import com.sleepycat.je.DatabaseException;
import com.sleepycat.je.Environment;
import com.sleepycat.je.EnvironmentConfig;
import com.sleepycat.je.EnvironmentLockedException;

public class BDBConnection {
private String homeDirectory = "";
private static final String CLASS_CATALOG = "java_class_catalog";
private Environment env = null;
private StoredClassCatalog javaCatalog = null;
protected Database catalogdatabase = null;
private Database database = null;
private StoredMap<String, CrawlURI> pendingUrisDB = null;

/**
* 设置数据库日志目录
*/
public BDBConnection(String homeDirectory) {
this.homeDirectory = homeDirectory;
}

/**
* 创建BDB环境配置和数据库配置,catalog数据库和应用数据库
*
* @throws EnvironmentLockedException
* @throws DatabaseException
*/
private void createConnection() {
try {
/*
* 设置Environment Config
*/
EnvironmentConfig envConfig = new EnvironmentConfig();
envConfig.setTransactional(true);
//如果设置了true则表示当环境不存在时候重新创建一个环境,默认为false.
envConfig.setAllowCreate(true);
env = new Environment(new File(homeDirectory), envConfig);
/*
* 设置Database Config
*/
DatabaseConfig dbConfig = new DatabaseConfig();
dbConfig.setTransactional(true);
//如果设置了true则表示当数据库不存在时候重新创建一个数据库,默认为false.
dbConfig.setAllowCreate(true);
// 创建 CateLog 库
catalogdatabase = env.openDatabase(null, CLASS_CATALOG, dbConfig);
javaCatalog = new StoredClassCatalog(catalogdatabase);
// 创建应用库
database = env.openDatabase(null, homeDirectory, dbConfig);
} catch (EnvironmentLockedException e) {
e.printStackTrace();
} catch (DatabaseException e) {
e.printStackTrace();
}
}

// 使用默认的路径和缓存大小构造函数
public void openConnection() {
this.createConnection();
// 绑定数据和类类型
EntryBinding<String> keyBinding = new SerialBinding<String>(
javaCatalog, String.class);
EntryBinding<CrawlURI> valueBinding = new SerialBinding<CrawlURI>(
javaCatalog, CrawlURI.class);
pendingUrisDB = new StoredMap<String, CrawlURI>(database, keyBinding,
valueBinding, true);
}

public StoredMap<String, CrawlURI> getMap() {
return this.pendingUrisDB;
}

/**
* 关闭数据库,关闭环境
*
* @throws DatabaseException
*/
public void closeConnection() {
try {
database.close();
javaCatalog.close();
env.close();
} catch (DatabaseException e) {
e.printStackTrace();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: