`
java-mans
  • 浏览: 11444809 次
文章分类
社区版块
存档分类
最新评论

Berkeley DB Java Edition

 
阅读更多

本来想写一篇,发现网上有一篇已经写的很好了,所以稍微加一些介绍,其他部分尤其是去看它的吧.附带自己写的一个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. 不支持网络访问
  2. 能够高效率的处理1到1百万条记录,制约JE数据库的往往是硬件系统,而不是JE本身。
  3. 多线程支持,JE使用超时的方式来处理线程间的死琐问题。
  4. 采用简单的key/value对应的形式。因此不支持SQL或者其他的数据库查询语言,不支持表结构和数据列。它的记录和键都可以达到4G字节的长度。
  5. 支持很多高级的数据库特性,比如ACID 数据库事务处理, 细粒度锁, XA接口,热备份以及同步复制。
  6. 采用B-Tree结构
  7. 允许创建二级库。这样我们就可以方便的使用一级key,二级key来访问我们的数据。
  8. 支持RAM缓冲,这样就能减少频繁的IO操作。
  9. 支持日志。
  10. 游标支持。
自己写的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();
		}
	}
}


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics