berkeley db使用手册范本.docx

上传人:b****8 文档编号:28635021 上传时间:2023-07-19 格式:DOCX 页数:66 大小:35.41KB
下载 相关 举报
berkeley db使用手册范本.docx_第1页
第1页 / 共66页
berkeley db使用手册范本.docx_第2页
第2页 / 共66页
berkeley db使用手册范本.docx_第3页
第3页 / 共66页
berkeley db使用手册范本.docx_第4页
第4页 / 共66页
berkeley db使用手册范本.docx_第5页
第5页 / 共66页
点击查看更多>>
下载资源
资源描述

berkeley db使用手册范本.docx

《berkeley db使用手册范本.docx》由会员分享,可在线阅读,更多相关《berkeley db使用手册范本.docx(66页珍藏版)》请在冰豆网上搜索。

berkeley db使用手册范本.docx

berkeleydb使用手册范本

一、简介

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

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

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

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

l事务支持。

l允许创建二级库。

这样我们就可以方便的使用一级key,二级key来访问我们的数据。

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

l支持日志。

l数据备份和恢复。

l游标支持。

二、获取JE

JE下载地址:

.oracle./technology/software/products/berkeley-db/je/index.html

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

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

源代码见JE_HOME/src/*.*

三、JE常见的异常

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

DeadlockException线程间死锁异常

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

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

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

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

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

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

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

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

l日志文件的删除仅发生在检查点之后。

cleaner准备出哪些log文件需要被删除,当检查点过后,删掉一些不在被使用的文件。

每写20M的日志文件就执行一次检查点,默认下。

五、创建数据库环境

JE要求在任何DATABASE操作前,要先打开数据库环境,就像我们要使用数据库的话必须得先建立连接一样。

你可以通过数据库环境来创建和打开database,或者更改database名称和删除database.

可以通过Environments对象来打开环境,打开环境的时候设置的目录必须是已经存在的目录,否则会出错误。

默认情况下,如果指定的database不存在则不会自动创建一个新的detabase,但可以通过设置setAllowCreate来改变这一情况。

1.打开database环境

示例:

packageje.gettingStarted;

import.sleepycat.je.DatabaseException;

import.sleepycat.je.Environment;

import.sleepycat.je.EnvironmentConfig;

importjava.io.File;

...

EnvironmentmyDbEnvironment=null;

try{

EnvironmentConfigenvConfig=newEnvironmentConfig();

envConfig.setAllowCreate(true);//如果不存在则创建一个

myDbEnvironment=newEnvironment(newFile("/export/dbEnv"),envConfig);

}catch(DatabaseExceptiondbe){

//错误处理

}

2.关闭database环境

可以通过Environment.close()这个方法来关闭database环境,当你完成数据库操作后一定要关闭数据库环境。

示例:

import.sleepycat.je.DatabaseException;

import.sleepycat.je.Environment;

...

try{

if(myDbEnvironment!

=null){

myDbEnvironment.close();

}

}catch(DatabaseExceptiondbe){

//Exceptionhandlinggoeshere

}

3.清理日志

通常在关闭数据库连接的时候,有必要清理下日志,用以释放更多的磁盘空间。

我们可以在Environment.close前执行下Environment.cleanLog()来达到此目的。

示例:

import.sleepycat.je.DatabaseException;

import.sleepycat.je.Environment;

...

try{

if(myDbEnvironment!

=null){

myDbEnvironment.cleanLog();//在关闭环境前清理下日志

myDbEnvironment.close();

}

}catch(DatabaseExceptiondbe){

//Exceptionhandlinggoeshere

}

4.Database环境的配置

可以通过EnvironmentConfig这个对象来配置database环境。

如果想得到当前环境的配置信息则可以通过Environment.getConfig()方法得到当前环境的配置信息。

也可以使用EnvironmentMutableConfig来配置环境,其实EnvironmentConfig是EnvironmentMutableConfig的子类,所以EnvironmentMutableConfig能够使用的设置,EnvironmentConfig也同样能够使用。

如果你要获取当前环境的使用情况,那么你可以通过使用EnvironmentStats.getNCacheMiss().来监视RAMcache命中率。

EnvironmentStats可以由Environment.getStats()方法获取。

EnvironmentConfig常见方法介绍

lEnvironmentConfig.setAllowCreate();

如果设置了true则表示当数据库环境不存在时候重新创建一个数据库环境,默认为false.

lEnvironmentConfig.setReadOnly()

以只读方式打开,默认为false.

lEnvironmentConfig.setTransactional()

事务支持,如果为true,则表示当前环境支持事务处理,默认为false,不支持事务处理。

EnvironmentMutableConfig的介绍

lsetCachePercent()

设置当前环境能够使用的RAM占整个JVM存的百分比。

lsetCacheSize()

设置当前环境能够使用的最大RAM。

单位BYTE

lsetTxnNoSync()

当提交事务的时候是否把缓存中的容同步到磁盘中去。

true表示不同步,也就是说不写磁盘

lsetTxnWriteNoSync()

当提交事务的时候,是否把缓冲的log写到磁盘上

true表示不同步,也就是说不写磁盘

示例一:

packageje.gettingStarted;

import.sleepycat.je.DatabaseException;

import.sleepycat.je.Environment;

import.sleepycat.je.EnvironmentConfig;

importjava.io.File;

...

EnvironmentmyDatabaseEnvironment=null;

try{

EnvironmentConfigenvConfig=newEnvironmentConfig();

//当环境不存在的时候自动创建环境

envConfig.setAllowCreate(true);

//设置支持事务

envConfig.setTransactional(true);

myDatabaseEnvironment=

newEnvironment(newFile("/export/dbEnv"),envConfig);

}catch(DatabaseExceptiondbe){

System.err.println(dbe.toString());

System.exit

(1);

}

示例二:

packageje.gettingStarted;

import.sleepycat.je.DatabaseException;

import.sleepycat.je.Environment;

import.sleepycat.je.EnvironmentMutableConfig;

importjava.io.File;

...

try{

EnvironmentmyEnv=newEnvironment(newFile("/export/dbEnv"),null);

EnvironmentMutableConfigenvMutableConfig=

newEnvironmentMutableConfig();

envMutableConfig.setTxnNoSync(true);

myEnv.setMutableConfig(envMutableConfig);

}catch(DatabaseExceptiondbe){

//Exceptionhandlinggoeshere

}

示例三:

import.sleepycat.je.Environment;

...

//没有命中的CACHE

longcacheMisses=myEnv.getStats(null).getNCacheMiss();

...

5.Database操作

在BDB中,数据是以key/value方式成队出现的。

打开database

可以通过environment.openDatabase()方法打开一个database,在调用这个方法的时候必须指定database的名称。

和databaseConfig()(注:

数据库设置)

示例:

packageje.gettingStarted;

import.sleepycat.je.Database;

import.sleepycat.je.DatabaseConfig;

import.sleepycat.je.DatabaseException;

import.sleepycat.je.Environment;

import.sleepycat.je.EnvironmentConfig;

importjava.io.File;

...

EnvironmentmyDbEnvironment=null;

DatabasemyDatabase=null;

...

try{

//打开一个环境,如果不存在则创建一个

EnvironmentConfigenvConfig=newEnvironmentConfig();

envConfig.setAllowCreate(true);

myDbEnvironment=newEnvironment(newFile("/export/dbEnv"),envConfig);

//打开一个数据库,如果数据库不存在则创建一个

DatabaseConfigdbConfig=newDatabaseConfig();

dbConfig.setAllowCreate(true);

myDatabase=myDbEnvironment.openDatabase(null,

"sampleDatabase",dbConfig);//打开一个数据库,数据库名为

//sampleDatabase,数据库的配置为dbConfig

}catch(DatabaseExceptiondbe){

//错误处理

}

关闭database

通过调用Database.close()方法来关闭数据库,但要注意,在关闭数据库前必须得先把游标先关闭。

使用示例:

import.sleepycat.je.DatabaseException;

import.sleepycat.je.Database;

import.sleepycat.je.Environment;

...

try{

if(myDatabase!

=null){

myDatabase.close();

}

if(myDbEnvironment!

=null){

myDbEnvironment.close();

}

}catch(DatabaseExceptiondbe){

//错误处理

}

设置数据库属性

其实设置数据库属性跟设置环境属性差不多,JE过DatabaseConfig对象来设置数据库属性。

你能够设置的数据库属性如下。

lDatabaseConfig.setAllowCreate()

如果是true的话,则当不存在此数据库的时候创建一个。

lDatabaseConfig.setBtreeComparator()

设置用于Btree比较的比较器,通常是用来排序

lDatabaseConfig.setDuplicateComparator()

设置用来比较一个key有两个不同值的时候的大小比较器。

lDatabaseConfig.setSortedDuplicates()

设置一个key是否允许存储多个值,true代表允许,默认false.

lDatabaseConfig.setExclusiveCreate()

以独占的方式打开,也就是说同一个时间只能有一实例打开这个database。

lDatabaseConfig.setReadOnly()

以只读方式打开database,默认是false.

lDatabaseConfig.setTransactional()

如果设置为true,则支持事务处理,默认是false,不支持事务。

使用示例:

packageje.gettingStarted;

import.sleepycat.je.DatabaseException;

import.sleepycat.je.Database;

import.sleepycat.je.DatabaseConfig;

...

//Environmentopenomittedforbrevity

...

DatabasemyDatabase=null;

try{

DatabaseConfigdbConfig=newDatabaseConfig();

dbConfig.setAllowCreate(true);

dbConfig.setSortedDuplicates(true);

myDatabase=

myDbEnv.openDatabase(null,

"sampleDatabase",

dbConfig);

}catch(DatabaseExceptiondbe){

//Exceptionhandlinggoeshere.

}

一些用来管理的方法

lDatabase.getDatabaseName()

取得数据库的名称

如:

StringdbName=myDatabase.getDatabaseName();

lDatabase.getEnvironment()

取得包含这个database的环境信息

如:

EnvironmenttheEnv=myDatabase.getEnvironment();

lDatabase.preload()

预先加载指定bytes的数据到RAM中。

如:

myDatabase.preload(1048576l);//1024*1024

lEnvironment.getDatabaseNames()

返回当前环境下的数据库列表

如:

importjava.util.List;

ListmyDbNames=myDbEnv.getDatabaseNames();

for(inti=0;i

System.out.println("DatabaseName:

"+(String)myDbNames.get(i));

}

lEnvironment.removeDatabase()

删除当前环境中指定的数据库。

如:

StringdbName=myDatabase.getDatabaseName();

myDatabase.close();

myDbEnv.removeDatabase(null,dbName);

lEnvironment.renameDatabase()

给当前环境下的数据库改名

如:

StringoldName=myDatabase.getDatabaseName();

StringnewName=newString(oldName+".new","UTF-8");

myDatabase.close();

myDbEnv.renameDatabase(null,oldName,newName);

lEnvironment.truncateDatabase()

清空database的所有数据,返回清空了多少条记录。

如:

IntnumDiscarded=myEnv.truncate(null,

myDatabase.getDatabaseName(),true);

System.out.println("一共删除了"+numDiscarded+"条记录从数据库"+myDatabase.getDatabaseName());

6.Database记录

JE的记录包含两部分,key键值和value数据值,这两个值都是通过DatabaseEntry对象封装起来,所以说如果要使用记录,则你必须创建两个DatabaseEntry对象,一个是用来做为key,另外一个是做为value.

DatabaseEntry能够支持任何的能够转换为bytes数组形式的基本数据。

包括所有的JAVA基本类型和可序列化的对象.

使用记录

示例一:

把字符串转换DatabaseEntry

packageje.gettingStarted;

import.sleepycat.je.DatabaseEntry;

...

StringaKey="key";

StringaData="data";

try{

//设置key/value,注意DatabaseEntry使用的是bytes数组

DatabaseEntrytheKey=newDatabaseEntry(aKey.getBytes("UTF-8"));

DatabaseEntrytheData=newDatabaseEntry(aData.getBytes("UTF-8"));

}catch(Exceptione){

//错误处理

}

示例二:

把DatabaseEntry里的数据转换成字符串

byte[]myKey=theKey.getData();

byte[]myData=theData.getData();

Stringkey=newString(myKey,"UTF-8");

Stringdata=newString(myData,"UTF-8");

读和写database记录

读和写database记录的时候大体是基本一样的,唯一有区别的是每个key写是否允许写多条记录,默认情况下是不支持多条记录的。

a)你可以使用如下方法向database里添加记录

lDatabase.put()

向database中添加一条记录。

如果你的database不支持一个key对应多个data或当前database中已经存在该key了,则使用此方法将使用新的值覆盖旧的值。

lDatabase.putNoOverwrite()

向database中添加新值但如果原先已经有了该key,则不覆盖。

不管database是否允许支持多重记录(一个key对应多个value),只要存在该key就不允许添加,并且返回perationStatus.KEYEXIST信息。

lDatabase.putNoDupData()

想database中添加一条记录,如果database中已经存在了相同的key和value则返回OperationStatus.KEYEXIST.

使用示例:

packageje.gettingStarted;

import.sleepycat.je.Database;

import.sleepycat.je.DatabaseEntry;

...

StringaKey="myFirstKey";

StringaData="myFirstData";

try{

DatabaseEntrytheKey=newDatabaseEntry(aKey.getBytes("UTF-8"));

DatabaseEntrytheData=newDatabaseEntry(aData.getBytes("UTF-8"));

myDatabase.put(null,theKey,theData);

}catch(Exceptione){

//Exceptionhandlinggoeshere

}

b)你可以使用如下方法从database里读取记录

1.Database.get()

基本的读记录的方法,通过key的方式来匹配,如果没有改记录则返回OperationStatus.NOTFOUND。

lDatabase.getSearchBoth()

通过key和value来同时匹配,同样如果没有记录匹配key和value则会返回OperationStatus.NOTFOUND

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 药学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1