本篇开始介绍JE的具体使用。
在JE中,一个数据库(database)就是一系列键值对的集合。你可以把JE中的数据库理解为只有两个列的表,一个列是键,一个列是值。同时要注意的是,键和值可以是简单的数据类型,比如数字型或字符串型,也可能是复杂的对象类型。我们可以使用database来管理键和值,比如对它们的增删改操作。
下面演示打开和关闭database。
Environment myDbEnvironment = null;
Database database = null;
try {
EnvironmentConfig envConfig = new EnvironmentConfig();
envConfig.setAllowCreate(true);
myDbEnvironment = new Environment(new File("/export/dbEnv"),
envConfig);
DatabaseConfig dbConfig = new DatabaseConfig();
dbConfig.setAllowCreate(true);
database = env.openDatabase(null, "baseAPIDemo", dbConfig);
...
// do work
...
} catch (DatabaseException dbe) {
// Exception handling goes here
} finally{
database.close();
myDbEnvironment.close();
}
通常我们使用Environment来打开一个database,在打开的时候要指定这个database的名字。先打开Environment,再用这个Environment打开一个database,然后在所有事情做完后,要记得关闭database和Environment,先关闭database,再关闭Environment。
接着我们讨论下database的属性配置
跟Environment一样,database也可以通过DatabaseConfig进行配置。
- DatabaseConfig.setAllowCreate()
设置当不存在该数据库的时候是否创建一个新的库
- DatabaseConfig.setBtreeComparator()
设置用来决定数据库中记录顺序的排序器
- DatabaseConfig.setDuplicateComparator()
设置用来比较重复数据的排序器
- DatabaseConfig.setSortedDuplicates()
设置该数据库是否允许重复的数据
- DatabaseConfig.setExclusiveCreate()
设置当存在该数据库的时候是否会打开数据库失败
- DatabaseConfig.setReadOnly()
设置数据库是否只读
- DatabaseConfig.setTransactional()
设置事务属性
- DatabaseConfig.setDeferredWrite()
设置延迟写属性
- DatabaseConfig.setTemporary()
设置该数据库是否为临时数据库(Temporary Databases)
设置这些数据库的属性非常简单,只要实例化一个DatabaseConfig对象,然后设置它,并在打开数据库的时候传入就可以了。以下演示下database属性设置
DatabaseConfig dbConfig = new DatabaseConfig();
dbConfig.setAllowCreate(true);
dbConfig.setReadOnly(false);
dbConfig.setTransactional(false);
database = env.openDatabase(null, "baseAPIDemo", dbConfig);
以上关于排序器和重复数据的讨论我们将放到后续章节中进行。我们现在重点讨论两个属性:
[list]
延迟写数据库(Deferred Write Databases)
默认情况下,数据库会在操作的时候写入变化到磁盘中,如果你使用了事务,那么将会在事务提交的时候写入变化。但是如果你启用了延迟写配置,数据库不会把变化立即写入,除非1.显式的调用了Database.sync()方法;2.缓存满了;3.到达了检查点(checkpoint)。
延迟写可以带来以下两个好处:
1.在多线程情况下,可以减少写操作的瓶颈。
2.可以减少写操作数据库,比如你一条记录你多次修改了它,那只会最后一次的改变会被写入到数据库中。
数据库也可以在延迟写和普通库之间进行转换,比如你要加载很大量的数据到数据库中,明显的延迟写数据库相较于普通数据库有更好的性能,这时你可以在加载大数据的时候设置延迟写,在加载完毕之后一次性的写入到数据库中。然后关闭数据库,再使用普通数据库配置属性打开。
设置DatabaseConfig.setDeferredWrite(true),可以让数据库变成延迟写数据库。
DatabaseConfig dbConfig = new DatabaseConfig();
// Make it deferred write
dbConfig.setDeferredWrite(true);
myDatabase = myDbEnvironment.openDatabase(null,
"sampleDatabase",
dbConfig);
...
// do work
...
myDatabase.sync();
临时数据库(Temporary Databases)
这是一个很特殊的数据库,打开临时数据库后,你可以像一般的数据库一样对它进行操作,但是在关闭这个数据库后所有的数据将被清除。也就是说临时数据库中的数据不是持久性的。
并且临时数据库内部采用了延迟写,但是这并不意味着临时数据库将不会发生I/O操作,当缓存满的时候,数据库仍然会把数据写入到磁盘上。临时数据库拥有延迟写数据库的所有优点,但是有一点不同于延迟写数据库,它不会在到达检查点的时候进行写入。
设置DatabaseConfig.setTemporary(true),可以让数据库变成延迟写数据库。
DatabaseConfig dbConfig = new DatabaseConfig();
dbConfig.setTemporary(true);
myDatabase = myDbEnvironment.openDatabase(null,
"sampleDatabase",
dbConfig);
[/list]
分享到:
相关推荐
Oracle BerkeleyDB-JE je-6.0.11
BerkeleyDB-Core-C-GSG.pdf bdb c开发手册 英文版
Berkeley DB JE-7.0.6 jar包
Java-Edition-BerkeleyDB-3.1.0,国外的开源数据库,供大家参考
Berkeley DB -- 入门知识和一个小例子_iyangjian2005997_新浪博客.mht
(二) Berkeley DB -- Access Method Configuration_iyangjian2005997_新浪博客.mht
BerkeleyDB和Sqlite是当前最流行的嵌入式开源数据库。
db-6.1.26.tar.gz berkeley db
Life After BerkeleyDB- OpenLDAP's Memory-Mapped Database
关于berkeley db 4.6.2的介绍性文章,是了解berkeley db的技术文档。
berkeley db je-6.4.9.gz
Berkeley DB是一个开源的文件数据库,介于关系数据库与内存数据库之间,使用方式与内存数据库类似,它提供的是一系列直接访问数据库的函数,而不是像关系数据库那样需要网络通讯、SQL解析等步骤,本文件是早期版本
嵌入式数据库,功能强大,可用于如QQ本地的聊天记录数据库等,使用方便,效率高
官方版本,亲测可用
来自于oracle的BerkeleyDB帮助文件,里面有代码的。
Berkeley DB 4.4.20 .tar.gz 来自https://www.oracle.com/database/technologies/related/berkeleydb-release-history.html
1. Introduction to Berkeley DB ......... 1 About This Manual .......... 2 Berkeley DB Concepts ........... 2 Access Methods ......... 4 Selecting Access Methods ......... 4 Choosing between BTree and ...
文件类型的DB,存取速度快,操作方便,是以map方式key-value方式存取数据.兄弟大家共享!
BerkeleyDB:BerkeleyDB-对Berkeley DB 2.x或更高版本的Perl5访问
介绍DB API的设置与使用的快速入门手册,目标是提供一个快速有效地机制,能让你进入Berkeley DB研发的世界。在本文中侧重于C++语言的研发人员,以及研究进城内数据管理解决方案的资深架构师。