`
soongbo
  • 浏览: 88585 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Berkeley DB使用说明

    博客分类:
  • Java
阅读更多
关键字: berkeley db java edition 使用说明 嵌入式 数据库
一、             简介
       Berkeley DB Java Edition (JE)是一个完全用JAVA写的,它适合于管理海量的,简单的数据。
l         能够高效率的处理1到1百万条记录,制约JE数据库的往往是硬件系统,而不是JE本身。
l         多线程支持,JE使用超时的方式来处理线程间的死琐问题。
l         Database都采用简单的key/value对应的形式。
l         事务支持。
l         允许创建二级库。这样我们就可以方便的使用一级key,二级key来访问我们的数据。
l         支持RAM缓冲,这样就能减少频繁的IO操作。
l         支持日志。
l         数据备份和恢复。
l         游标支持。
二、             获取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也是有区别的
l         JE的日志文件只能APPEND,第一个日志文件名是 00000000.jdb,当他增长到一定大小的时候(默认是10M),开始写第二个日志文件00000001.jdb,已此类推。
l         跟C版本有所不同,JE的数据日志和事务日志是放在一起的,而不是分开放的。
l         JE cleaner负责清扫没用到的磁盘空间,删除后,或者更新后新的记录会追加进来,而原有的记录空间就不在使用了,cleaner负责清理不用的空间。
l         清理并不是立即进行的,当你关闭你的数据库环境后,通过调用一个cleaner方法来清理。
l         清理也不是只动执行的,需要你自己手动调用cleaner 方法来定时清理的。
l         日志文件的删除仅发生在检查点之后。cleaner准备出哪些log 文件需要被删除,当检查点过后,删掉一些不在被使用的文件。每写20M的日志文件就执行一次检查点,默认下。
五、             创建数据库环境
JE要求在任何DATABASE操作前,要先打开数据库环境,就像我们要使用数据库的话必须得先建立连接一样。你可以通过数据库环境来创建和打开database,或者更改database名称和删除database.
可以通过Environments对象来打开环境,打开环境的时候设置的目录必须是已经存在的目录,否则会出错误。默认情况下,如果指定的database不存在则不会自动创建一个新的detabase,但可以通过设置setAllowCreate来改变这一情况。
1.         打开database环境
示例:
package je.gettingStarted;
import com.sleepycat.je.DatabaseException;
import com.sleepycat.je.Environment;
import com.sleepycat.je.EnvironmentConfig;
import java.io.File;

...

Environment myDbEnvironment = null;

try {
    EnvironmentConfig envConfig = new EnvironmentConfig();
    envConfig.setAllowCreate(true);//如果不存在则创建一个
    myDbEnvironment = new Environment(new File("/export/dbEnv"), envConfig);
} catch (DatabaseException dbe) {
    // 错误处理
}
2.         关闭database环境
可以通过Environment.close()这个方法来关闭database环境,当你完成数据库操作后一定要关闭数据库环境。
示例:
import com.sleepycat.je.DatabaseException;
import com.sleepycat.je.Environment;

...

try {
    if (myDbEnvironment != null) {
        myDbEnvironment.close();
    }
} catch (DatabaseException dbe) {
    // Exception handling goes here
}
3.         清理日志
通常在关闭数据库连接的时候,有必要清理下日志,用以释放更多的磁盘空间。我们可以在Environment.close前执行下Environment.cleanLog()来达到此目的。
示例:
import com.sleepycat.je.DatabaseException;
import com.sleepycat.je.Environment;

...

try {
    if (myDbEnvironment != null) {
        myDbEnvironment.cleanLog(); // 在关闭环境前清理下日志
        myDbEnvironment.close();
    }
} catch (DatabaseException dbe) {
    // Exception handling goes here
}
4.         Database环境的配置
可以通过EnvironmentConfig这个对象来配置database环境。如果想得到当前环境的配置信息则可以通过Environment.getConfig()方法得到当前环境的配置信息。
也可以使用 EnvironmentMutableConfig来配置环境,其实 EnvironmentConfig是EnvironmentMutableConfig的子类,所以EnvironmentMutableConfig 能够使用的设置,EnvironmentConfig也同样能够使用。
如果你要获取当前环境的使用情况,那么你可以通过使用EnvironmentStats.getNCacheMiss().来监视RAM cache命中率。EnvironmentStats可以由Environment.getStats()方法获取。
EnvironmentConfig常见方法介绍
l         EnvironmentConfig.setAllowCreate() ;
如果设置了true则表示当数据库环境不存在时候重新创建一个数据库环境,默认为false.
l         EnvironmentConfig.setReadOnly()
以只读方式打开,默认为false.
l         EnvironmentConfig.setTransactional()
事务支持,如果为true,则表示当前环境支持事务处理,默认为false,不支持事务处理。
                            EnvironmentMutableConfig的介绍
l         setCachePercent()
设置当前环境能够使用的RAM占整个JVM内存的百分比。
l         setCacheSize()
设置当前环境能够使用的最大RAM。单位BYTE
l         setTxnNoSync()
当提交事务的时候是否把缓存中的内容同步到磁盘中去。
true 表示不同步,也就是说不写磁盘
l         setTxnWriteNoSync()
当提交事务的时候,是否把缓冲的log写到磁盘上
true 表示不同步,也就是说不写磁盘
                            示例一:
package je.gettingStarted;
import com.sleepycat.je.DatabaseException;
import com.sleepycat.je.Environment;
import com.sleepycat.je.EnvironmentConfig;
import java.io.File;

...

Environment myDatabaseEnvironment = null;
try {
    EnvironmentConfig envConfig = new EnvironmentConfig();
    //当环境不存在的时候自动创建环境
       envConfig.setAllowCreate(true);
       //设置支持事务
       envConfig.setTransactional(true);
    myDatabaseEnvironment =
        new Environment(new File("/export/dbEnv"), envConfig);
} catch (DatabaseException dbe) {
   System.err.println(dbe.toString());
   System.exit(1);
}
                  示例二:
package je.gettingStarted;
import com.sleepycat.je.DatabaseException;
import com.sleepycat.je.Environment;
import com.sleepycat.je.EnvironmentMutableConfig;
import java.io.File;
...
try {
    Environment myEnv = new Environment(new File("/export/dbEnv"), null);
    EnvironmentMutableConfig envMutableConfig =
        new EnvironmentMutableConfig();
    envMutableConfig.setTxnNoSync(true);
    myEnv.setMutableConfig(envMutableConfig);
} catch (DatabaseException dbe) {
    // Exception handling goes here
}
                            示例三:
import com.sleepycat.je.Environment;
...
//没有命中的CACHE
long cacheMisses = myEnv.getStats(null).getNCacheMiss();
...
5.         Database操作
在BDB中,数据是以key/value方式成队出现的。
打开database
       可以通过environment.openDatabase()方法打开一个database,在调用这个方法的时候必须指定database的名称。和databaseConfig() (注:数据库设置)
       示例:
package je.gettingStarted;
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 java.io.File;
...
Environment myDbEnvironment = null;
Database myDatabase = null;
...
try {
    // 打开一个环境,如果不存在则创建一个
    EnvironmentConfig envConfig = new EnvironmentConfig();
    envConfig.setAllowCreate(true);
    myDbEnvironment = new Environment(new File("/export/dbEnv"), envConfig);

    // 打开一个数据库,如果数据库不存在则创建一个
    DatabaseConfig dbConfig = new DatabaseConfig();
    dbConfig.setAllowCreate(true);
    myDatabase = myDbEnvironment.openDatabase(null,
"sampleDatabase", dbConfig); //打开一个数据库,数据库名为
                                   //sampleDatabase,数据库的配置为dbConfig
} catch (DatabaseException dbe) {
    // 错误处理
}
关闭database
       通过调用Database.close()方法来关闭数据库,但要注意,在关闭数据库前必须得先把游标先关闭。
       使用示例:
import com.sleepycat.je.DatabaseException;
import com.sleepycat.je.Database;
import com.sleepycat.je.Environment;
...
try {
        if (myDatabase != null) {
            myDatabase.close();
        }
        if (myDbEnvironment != null) {
            myDbEnvironment.close();
        }
} catch (DatabaseException dbe) {
    // 错误处理
}
设置数据库属性
       其实设置数据库属性跟设置环境属性差不多,JE中通过DatabaseConfig对象来设置数据库属性。你能够设置的数据库属性如下。
l         DatabaseConfig.setAllowCreate()
如果是true的话,则当不存在此数据库的时候创建一个。
l         DatabaseConfig.setBtreeComparator()
设置用于Btree比较的比较器,通常是用来排序
l         DatabaseConfig.setDuplicateComparator()
设置用来比较一个key有两个不同值的时候的大小比较器。
l         DatabaseConfig.setSortedDuplicates()
设置一个key是否允许存储多个值,true代表允许,默认false.
l         DatabaseConfig.setExclusiveCreate()
以独占的方式打开,也就是说同一个时间只能有一实例打开这个database。
l         DatabaseConfig.setReadOnly()
以只读方式打开database,默认是false.
l         DatabaseConfig.setTransactional()
如果设置为true,则支持事务处理,默认是false,不支持事务。
                            使用示例:
package je.gettingStarted;
import com.sleepycat.je.DatabaseException;
import com.sleepycat.je.Database;
import com.sleepycat.je.DatabaseConfig;
...
// Environment open omitted for brevity
...
Database myDatabase = null;
try {
    DatabaseConfig dbConfig = new DatabaseConfig();
    dbConfig.setAllowCreate(true);
    dbConfig.setSortedDuplicates(true);
    myDatabase =
        myDbEnv.openDatabase(null,
                             "sampleDatabase",
                             dbConfig);
} catch (DatabaseException dbe) {
    // Exception handling goes here.
}
一些用来管理的方法
l         Database.getDatabaseName()
取得数据库的名称
如:String dbName = myDatabase.getDatabaseName();
l         Database.getEnvironment()
取得包含这个database的环境信息
如:Environment theEnv = myDatabase.getEnvironment();
l         Database.preload()
预先加载指定bytes的数据到RAM中。
如:myDatabase.preload(1048576l); // 1024*1024
l         Environment.getDatabaseNames()
返回当前环境下的数据库列表
如:
import java.util.List;
List myDbNames = myDbEnv.getDatabaseNames();
for(int i=0; i < myDbNames.size(); i++) {
    System.out.println("Database Name: " + (String)myDbNames.get(i));
}
l         Environment.removeDatabase()
删除当前环境中指定的数据库。
如:
分享到:
评论

相关推荐

    Berkeley DB参考资料

    BerkeleyDB 多库联合操作 (Secondary Databases) - **3.1 二级数据库介绍** - **概念解释**:二级数据库是对主数据库的一个索引,用于提高查询效率。 - **应用场景**:快速查找、数据统计等。 - **3.2 创建二级...

    Berkeley DB参考手册PDF版本

    - **20.7 BerkeleyDB中Btree、Queue、Recno记录编号的说明** - **数据结构解释**:详细解释Berkeley DB中使用的三种数据结构及其特点。 - **20.8 一个新的BerkeleyDB java持久API** - **Java API**:介绍一个新的...

    Berkeley db使用方法简介(c接口)

    ### Berkeley DB 使用方法简介(C接口) #### 一、引言 Berkeley DB 是一个高性能、可嵌入式的键值数据库系统,它提供了一个非 SQL 的解决方案,特别适合那些需要高速内存操作的应用场景。Berkeley DB 支持多种...

    berkeley db xml说明手册

    在“BDB XML介绍.doc”文档中,可能详细介绍了Berkeley DB XML的安装步骤、配置选项、API使用方法、示例代码以及常见问题解答等内容。通过这份文档,开发者可以学习如何在实际项目中有效地利用Berkeley DB XML来处理...

    BerkeleyDB_java_jar包

    3. **示例和文档**:可能包含演示如何使用BerkeleyDB Java API的示例代码,以及详细说明如何配置、操作和管理数据库的文档。 4. **依赖库**:BerkeleyDB可能依赖于其他的Java库,这些库也可能包含在jar文件中或者...

    Berkeley DB

    例如,Apache HTTP Server的mod_dbd模块就使用了Berkeley DB存储用户认证信息。 8. **并发控制与事务处理**: 虽然Berkeley DB 不是完全ACID(原子性、一致性、隔离性、持久性)兼容的数据库,但它支持事务处理和多...

    berkeley DB使用

    ### Berkeley DB 使用详解 Berkeley DB(BDB)是一个高性能的键/值存储数据库系统,以其卓越的稳定性和跨平台性著称。它几乎适用于所有主流的操作系统,并且支持多种编程语言,包括C/C++、Java等。Berkeley DB不仅...

    BekeleyDB使用说明

    ### BerkeleyDB 使用说明 #### 简介与背景 BerkeleyDB是一款极其多功能且精心设计的数据库管理系统,它能够在各种不同的应用环境中轻松部署并高效运行,无论是简单的网页浏览器还是每小时处理数百万通话的复杂电信...

    Berkeley_DB_参考手册

    - **常见问题**:列举并解答用户在使用 C++ API 操作 Berkeley DB XML 数据库时遇到的问题。 #### 19. XQuery 使用入门 - **19.1 XQuery 使用入门(一)** - **基础语法**:介绍 XQuery 的基本语法和数据类型。 - ...

    db.rar_Berkeley DB_嵌入式 数据库

    3. **www.pudn.com.txt**:这可能是一个文档文件,包含了关于如何使用这些示例程序的说明,或者是Berkeley DB在at91rm9200上的配置和部署指南。在阅读这个文件时,可以了解如何在目标平台上编译和运行这些源代码,...

    Berkeley_DB4.6.20.rar_Berkeley DB

    "Berkeley_DB4.6.20.pdf"是DB4.6的官方开发文档,包含了详细的API说明、使用示例和最佳实践。通过阅读这份文档,开发者可以了解如何创建数据库、设置事务、进行数据查询和更新、处理并发操作等基本操作,同时还能...

    Berkeley DB的java版本

    2. **Readme-说明.htm**:这是Berkeley DB Java Edition的使用指南或说明书,通常会包含安装步骤、配置选项、编程接口(API)介绍、性能优化建议以及常见问题解答等内容。开发者应该首先阅读这份文档,以了解如何...

    berkeley db je-6.4.9.gz

    伯克利数据库(Berkeley DB,简称BDB)是由Oracle公司开发的一款开源、嵌入式、键值对存储的数据库管理系统。在这个“berkeley db je-6.4.9.gz”压缩包中,包含了BDB Java Edition(JE)的6.4.9版本。这个版本的发布...

    berlekey 4.2.52 for vxworks

    "db-4.2.52.NC"是Berkeley DB的核心组件,NC可能代表"No Commercial",表示这是一个非商业版本,可能有限制但适合个人和开源项目使用。 Berkeley DB 的主要特点包括: 1. **键值对存储**:数据以键值对的形式存储,...

    redhat安装db_load

    在Red Hat Linux操作系统中,`db_load`是一个用于导入Berkeley DB数据库文件的工具,它通常与`db4`库一起使用。Berkeley DB是一种轻量级、高性能、嵌入式数据库系统,广泛应用于各种软件项目,包括系统配置、日志...

    DB-5.3.21

    “超详细Oracle教程.pdf”很可能是一个PDF格式的教程文件,内容可能涵盖Oracle Berkeley DB的基础知识、安装流程、使用方法、API调用、事务管理、数据备份与恢复、性能优化等多个方面。用户可以通过阅读此教程来深入...

    linux 下openldap 安装说明文档

    6. 使用`make install`命令安装到系统目录,通常为`/usr/local/BerkeleyDB.4.6`。 7. 更新`/etc/ld.so.conf`文件,添加BerkeleyDB的bin目录路径,并运行`ldconfig`使配置生效,以便系统能找到库文件。 接着,开始...

    activemq-store-bdbn-1.2.jar.zip

    BDBN,全称可能是“Berkeley DB (BDB) Network Store”,是指ActiveMQ中使用Berkeley DB作为持久化存储的一种实现方式。 Berkeley DB是甲骨文公司提供的一款嵌入式数据库系统,它轻量级、高效且易于集成,适合于...

    XMLDB.rar_swing_xml_xml search _xml 数据库_xmldb

    - 一些常见的XML数据库产品有eXist-db、Berkeley DB XML、Oracle XML DB等。这些数据库提供了API和查询语言,方便开发者进行操作。 4. **Java Swing**: - Java Swing是Java的一个GUI工具包,用于创建桌面应用...

    Ice 3.4.2 Third Party Packages readme

    - 使用Visual Studio 2010编译的BerkeleyDB、OpenSSL、Expat、Bzip2、MCPP和Qt的导入库位于`lib\vc100`和`lib\vc100\x64`目录下。 - 使用CodeGear C++ Builder 2010编译的BerkeleyDB、OpenSSL、Expat、Bzip2和MCPP...

Global site tag (gtag.js) - Google Analytics