berkeley db java edition 源码,Berkeley DB Java Edition
本來(lái)想寫(xiě)一篇,發(fā)現(xiàn)網(wǎng)上有一篇已經(jīng)寫(xiě)的很好了,所以稍微加一些介紹,其他部分尤其是去看它的吧.附帶自己寫(xiě)的一個(gè)connection 代碼.
簡(jiǎn)介
Berkeley DB(BDB)是一個(gè)高性能的,嵌入式鍵值對(duì)(Key/Value Pair)數(shù)據(jù)庫(kù).Berkeley DB可以支持?jǐn)?shù)千的并發(fā)線程同時(shí)操作數(shù)據(jù)庫(kù),支持最大256TB的數(shù)據(jù)。
而B(niǎo)erkeley DB Java Edition (JE)是一個(gè)完全用JAVA寫(xiě)的,它適合于管理海量的,簡(jiǎn)單的數(shù)據(jù)。
不支持網(wǎng)絡(luò)訪問(wèn)
能夠高效率的處理1到1百萬(wàn)條記錄,制約JE數(shù)據(jù)庫(kù)的往往是硬件系統(tǒng),而不是JE本身。
多線程支持,JE使用超時(shí)的方式來(lái)處理線程間的死瑣問(wèn)題。
采用簡(jiǎn)單的key/value對(duì)應(yīng)的形式。因此不支持SQL或者其他的數(shù)據(jù)庫(kù)查詢語(yǔ)言,不支持表結(jié)構(gòu)和數(shù)據(jù)列。它的記錄和鍵都可以達(dá)到4G字節(jié)的長(zhǎng)度。
支持很多高級(jí)的數(shù)據(jù)庫(kù)特性,比如ACID 數(shù)據(jù)庫(kù)事務(wù)處理, 細(xì)粒度鎖, XA接口,熱備份以及同步復(fù)制。
采用B-Tree結(jié)構(gòu)
允許創(chuàng)建二級(jí)庫(kù)。這樣我們就可以方便的使用一級(jí)key,二級(jí)key來(lái)訪問(wèn)我們的數(shù)據(jù)。
支持RAM緩沖,這樣就能減少頻繁的IO操作。
支持日志。
游標(biāo)支持。
自己寫(xiě)的Connection類(lèi)
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 pendingUrisDB = null;
/**
* 設(shè)置數(shù)據(jù)庫(kù)日志目錄
*/
public BDBConnection(String homeDirectory) {
this.homeDirectory = homeDirectory;
}
/**
* 創(chuàng)建BDB環(huán)境配置和數(shù)據(jù)庫(kù)配置,catalog數(shù)據(jù)庫(kù)和應(yīng)用數(shù)據(jù)庫(kù)
*
* @throws EnvironmentLockedException
* @throws DatabaseException
*/
private void createConnection() {
try {
/*
* 設(shè)置Environment Config
*/
EnvironmentConfig envConfig = new EnvironmentConfig();
envConfig.setTransactional(true);
//如果設(shè)置了true則表示當(dāng)環(huán)境不存在時(shí)候重新創(chuàng)建一個(gè)環(huán)境,默認(rèn)為false.
envConfig.setAllowCreate(true);
env = new Environment(new File(homeDirectory), envConfig);
/*
* 設(shè)置Database Config
*/
DatabaseConfig dbConfig = new DatabaseConfig();
dbConfig.setTransactional(true);
//如果設(shè)置了true則表示當(dāng)數(shù)據(jù)庫(kù)不存在時(shí)候重新創(chuàng)建一個(gè)數(shù)據(jù)庫(kù),默認(rèn)為false.
dbConfig.setAllowCreate(true);
// 創(chuàng)建 CateLog 庫(kù)
catalogdatabase = env.openDatabase(null, CLASS_CATALOG, dbConfig);
javaCatalog = new StoredClassCatalog(catalogdatabase);
// 創(chuàng)建應(yīng)用庫(kù)
database = env.openDatabase(null, homeDirectory, dbConfig);
} catch (EnvironmentLockedException e) {
e.printStackTrace();
} catch (DatabaseException e) {
e.printStackTrace();
}
}
// 使用默認(rèn)的路徑和緩存大小構(gòu)造函數(shù)
public void openConnection() {
this.createConnection();
// 綁定數(shù)據(jù)和類(lèi)類(lèi)型
EntryBinding keyBinding = new SerialBinding(
javaCatalog, String.class);
EntryBinding valueBinding = new SerialBinding(
javaCatalog, CrawlURI.class);
pendingUrisDB = new StoredMap(database, keyBinding,
valueBinding, true);
}
public StoredMap getMap() {
return this.pendingUrisDB;
}
/**
* 關(guān)閉數(shù)據(jù)庫(kù),關(guān)閉環(huán)境
*
* @throws DatabaseException
*/
public void closeConnection() {
try {
database.close();
javaCatalog.close();
env.close();
} catch (DatabaseException e) {
e.printStackTrace();
}
}
}
總結(jié)
以上是生活随笔為你收集整理的berkeley db java edition 源码,Berkeley DB Java Edition的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 导出excel数字前面的0消失_Exce
- 下一篇: python 异常回溯_关于python