- 浏览: 1637772 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (405)
- C/C++ (16)
- Linux (60)
- Algorithm (41)
- ACM (8)
- Ruby (39)
- Ruby on Rails (6)
- FP (2)
- Java SE (39)
- Java EE (6)
- Spring (11)
- Hibernate (1)
- Struts (1)
- Ajax (5)
- php (2)
- Data/Web Mining (20)
- Search Engine (19)
- NLP (2)
- Machine Learning (23)
- R (0)
- Database (10)
- Data Structure (6)
- Design Pattern (16)
- Hadoop (2)
- Browser (0)
- Firefox plugin/XPCOM (8)
- Eclise development (5)
- Architecture (1)
- Server (1)
- Cache (6)
- Code Generation (3)
- Open Source Tool (5)
- Develope Tools (5)
- 读书笔记 (7)
- 备忘 (4)
- 情感 (4)
- Others (20)
- python (0)
最新评论
-
532870393:
请问下,这本书是基于Hadoop1还是Hadoop2?
Hadoop in Action简单笔记(一) -
dongbiying:
不懂呀。。
十大常用数据结构 -
bing_it:
...
使用Spring MVC HandlerExceptionResolver处理异常 -
一别梦心:
按照上面的执行,文件确实是更新了,但是还是找不到kernel, ...
virtualbox 4.08安装虚机Ubuntu11.04增强功能失败解决方法 -
dsjt:
楼主spring 什么版本,我的3.1 ,xml中配置 < ...
使用Spring MVC HandlerExceptionResolver处理异常
Berkely DB对于高并发、要求速度快的应用来说是个不错的选择,mysql就是用BDB实现的(mysql的后台) ,mysql快,BDB比mysql还要快N倍。BDB是一种嵌入式的、非关系数据库,它与其他的关系数据库RMDBS不同,它没有提供SQL,而是提供了自己的访问接口。作为一种嵌入式的数据库,它是进程内模式的,也就是说它和应用程序在同一内存空间运行,所以速度要高很多,与嵌入式的数据库如Derby、HSQLDB(都是RMDBS的)相比,它效率更高,使用方法也有很大的不同。现在BDB以被Oracle收购。Berkely DB提供的文档Getting Started with Berkeley DB Java Edition可以说是短小精悍(113页),入门相当不错。下面Get Start吧:
Environment:
首先要接触的就是Environment了,使用它来open database以及做一管理方面的事情.
创建Environment,还需要Environment的一些配置信息EnvironmentConfig。
下面是创建的过程:
其中EnvironmentConfig提供了许多配置参数,常用的有:
envConfig.setAllowCreate()//如果不存在的env的话,是否要创建一个新的
envConfig.setReadOnly()//是否为只读的
envConfig.setTransactional()//是否使用事务
参数都是boolean类型的
除了EnvironmentConfig外,还有EnvironmentMutableConfig,他实际是EnvironmentConfig的父类,使用他来配置在创建完Environment之后可以改变
的属性:
setCachePercent()//设置cache的大小占JVM memory的百分比
setCacheSize()//设置cache的大小
setTxnNoSync()//事务提交是否将改变的记录写入磁盘
setTxnWriteNoSync()//事务提交是否将log写入磁盘
下面看一下使用EnvironmentMutableConfig的方法:
Environment通过close来关闭,释放资源
下面看看Environment在管理方面的一些方法:
可以通过Environment获得EnvironmentStats,他提供了Environment一些状态信息,
例如使用
我们可以获得cache未命中的次数,据此来调整cache的大小
可以同过Environment.getDatabaseNames()来获得Environment的数据库的名字:
可以通过Environment.removeDatabase()来删除一个数据库:
可以使用Environment.renameDatabase()来重新命名一个数据库:
可以使用Environment.truncateDatabase()来删除数据库中的所有记录:
第三个参数是否返回删除的记录数,性能有很大不同。false的话会很快
Database:
最重要的一些操作大多都在Database里了,和Environment一样,它也有许多
配置的选项DatabaseConfig,我们先看看选项:
DatabaseConfig.setAllowCreate()//不能存在的话是open操作否创建新的
DatabaseConfig.setBtreeComparator()//设置Btree的比较器
DatabaseConfig.setDuplicateComparator()//设置判断重复的比较器
DatabaseConfig.setSortedDuplicates()//是否允许重复的记录
DatabaseConfig.setExclusiveCreate()//设为true,如果当前数据库已存在,则open失败,也就是说open操作会导致一个新的数据库被创建,默认为false
DatabaseConfig.setReadOnly()//是否是只读的
DatabaseConfig.setTransactional()//是否使用事务
下面我们看看Database的使用流程:
我们通过Environment的openDatabase来创建Database对象。使用完了Database使用
close方法来关闭数据库释放资源。
Database Records
Database Record是保存在数据库的内容,包含Key和value两部分,他们都被封装成
DatabaseEntry,DatabaseEntry只能存放字节数组,所以只要能把Key和Value是什么
类型的,只要能转化成字节数组就可以被DatabaseEntry封装。基本类型JE都有对应的Binding,复杂的类型可以使用序列化和自定义binding来实现。
下那面我们看看一个使用方法:
我们不应该依赖机器默认的编码,通常要指定特定的编码方法getBytes("UTF-8");
我们先看看怎么从数据库中读写记录:
通过Database.put()和Database.get()我们可以从数据库中读写记录
put:
get:
删除操作:
使用BIND APIs来操作基本类型:
我们可以使用JE提供的Bind Apis来操作数字类型和字符串类型:
以Long为例:
存储数据使用Bind Apis一般步骤如下:
1、通过EntryBinding binding =TupleBinding.getPrimitiveBinding(Long.class);
2、通过EntryBinding 把数据放到DatabaseEntry中:
myBinding.objectToEntry(data, dataEntry);
获取数据使用Bind Apis一般步骤如下:
1、通过EntryBinding binding =TupleBinding.getPrimitiveBinding(Long.class);
2、通过EntryBinding将Entry转换成Object Long theLong = (Long) myBinding.entryToObject(theData);
下面代码以测试的形式演示了整个过程:
序列化复杂的类型
步骤如下:
1、要存储的对象的类需要实现java.io.Serializable
2、打开两个数据库,一个存放数据,另一个存放类的信息
3、实例化com.sleepycat.bind.serial.StoredClassCatalog对象
4、创建uses com.sleepycat.bind.serial.SerialBinding对象
5、使用SerialBinding把对象放到DatabaseEntry中
下面是使用一个能够完整描述这个过程的例子来说明这个过程:
要存储的对象对应的类
自定义元组绑定:
存储复杂对象自定义元组绑定的步骤:
1、创建要存储的对象,这个对象的类没有必要实现Serializable接口:
2、扩展com.sleepycat.bind.tuple.TupleBinding来实现自定义的Binging
3、创建2步欻关键的自定义binding对象
4、将创建的对象是用自定义个binding放到DatabaseEntry中
5、使用put方法存入数据库
下面的例子说明了这个过程:
自定义Binging:
put/get的使用过程:
您好,请问DatabaseConfig原来有setType,可以选择BTree或者是Hash或者别的,新的je.DatabaseConfig里面没有了,是不是只能选择BTree呢? 谢谢
不太清楚,你可以看看新版本更新的说明。
Environment:
首先要接触的就是Environment了,使用它来open database以及做一管理方面的事情.
创建Environment,还需要Environment的一些配置信息EnvironmentConfig。
下面是创建的过程:
EnvironmentConfig envConfig = new EnvironmentConfig(); envConfig.setAllowCreate(true); myDbEnvironment = new Environment(new File("/export/dbEnv"), envConfig);
其中EnvironmentConfig提供了许多配置参数,常用的有:
envConfig.setAllowCreate()//如果不存在的env的话,是否要创建一个新的
envConfig.setReadOnly()//是否为只读的
envConfig.setTransactional()//是否使用事务
参数都是boolean类型的
除了EnvironmentConfig外,还有EnvironmentMutableConfig,他实际是EnvironmentConfig的父类,使用他来配置在创建完Environment之后可以改变
的属性:
setCachePercent()//设置cache的大小占JVM memory的百分比
setCacheSize()//设置cache的大小
setTxnNoSync()//事务提交是否将改变的记录写入磁盘
setTxnWriteNoSync()//事务提交是否将log写入磁盘
下面看一下使用EnvironmentMutableConfig的方法:
Environment myEnv = new Environment(new File("/export/dbEnv"), null); EnvironmentMutableConfig envMutableConfig = new EnvironmentMutableConfig(); envMutableConfig.setTxnNoSync(true); myEnv.setMutableConfig(envMutableConfig);
Environment通过close来关闭,释放资源
下面看看Environment在管理方面的一些方法:
可以通过Environment获得EnvironmentStats,他提供了Environment一些状态信息,
例如使用
long cacheMisses = myEnv.getStats(null).getNCacheMiss();
我们可以获得cache未命中的次数,据此来调整cache的大小
可以同过Environment.getDatabaseNames()来获得Environment的数据库的名字:
List myDbNames = myDbEnv.getDatabaseNames(); for(int i=0; i < myDbNames.size(); i++) { System.out.println("Database Name: " + (String)myDbNames.get(i)); }
可以通过Environment.removeDatabase()来删除一个数据库:
String dbName = myDB.getDatabaseName(); myDB.close(); myDBEnv.removeDatabase(null,dbName);
可以使用Environment.renameDatabase()来重新命名一个数据库:
String dbName = myDB.getDatabaseName(); String dbNewName = new String(dbName + ".new", "UTF-8"); myDB.close(); myDBEnv.renameDatabase(null,dbName,dbNewName);
可以使用Environment.truncateDatabase()来删除数据库中的所有记录:
myEnv.truncate(null, // txn handle myDatabase.getDatabaseName(), // database name true//whether to return the count of deleted records );
第三个参数是否返回删除的记录数,性能有很大不同。false的话会很快
Database:
最重要的一些操作大多都在Database里了,和Environment一样,它也有许多
配置的选项DatabaseConfig,我们先看看选项:
DatabaseConfig.setAllowCreate()//不能存在的话是open操作否创建新的
DatabaseConfig.setBtreeComparator()//设置Btree的比较器
DatabaseConfig.setDuplicateComparator()//设置判断重复的比较器
DatabaseConfig.setSortedDuplicates()//是否允许重复的记录
DatabaseConfig.setExclusiveCreate()//设为true,如果当前数据库已存在,则open失败,也就是说open操作会导致一个新的数据库被创建,默认为false
DatabaseConfig.setReadOnly()//是否是只读的
DatabaseConfig.setTransactional()//是否使用事务
下面我们看看Database的使用流程:
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);
我们通过Environment的openDatabase来创建Database对象。使用完了Database使用
close方法来关闭数据库释放资源。
Database Records
Database Record是保存在数据库的内容,包含Key和value两部分,他们都被封装成
DatabaseEntry,DatabaseEntry只能存放字节数组,所以只要能把Key和Value是什么
类型的,只要能转化成字节数组就可以被DatabaseEntry封装。基本类型JE都有对应的Binding,复杂的类型可以使用序列化和自定义binding来实现。
下那面我们看看一个使用方法:
String aKey = "key"; String aData = "data"; try { DatabaseEntry theKey = new DatabaseEntry(aKey.getBytes("UTF-8")); DatabaseEntry theData = new DatabaseEntry(aData.getBytes("UTF-8")); } catch (Exception e) { }
我们不应该依赖机器默认的编码,通常要指定特定的编码方法getBytes("UTF-8");
我们先看看怎么从数据库中读写记录:
通过Database.put()和Database.get()我们可以从数据库中读写记录
put:
String aKey = "myFirstKey"; String aData = "myFirstData"; try { DatabaseEntry theKey = new DatabaseEntry(aKey.getBytes("UTF-8")); DatabaseEntry theData = new DatabaseEntry(aData.getBytes("UTF-8")); myDatabase.put(null, theKey, theData); } catch (Exception e) { }
get:
String aKey = "myFirstKey"; try { DatabaseEntry theKey = new DatabaseEntry(aKey.getBytes("UTF-8")); DatabaseEntry theData = new DatabaseEntry(); if (myDatabase.get(null, theKey, theData, LockMode.DEFAULT) == OperationStatus.SUCCESS) { byte[] retData = theData.getData(); String foundData = new String(retData, "UTF-8"); System.out.println("For key: '" + aKey + "' found data: '" + foundData + "'."); } else { System.out.println("No record found for key '" + aKey + "'."); } } catch (Exception e) { }
删除操作:
String aKey = "myFirstKey"; DatabaseEntry theKey = new DatabaseEntry(aKey.getBytes("UTF-8")); myDatabase.delete(null, theKey);
使用BIND APIs来操作基本类型:
我们可以使用JE提供的Bind Apis来操作数字类型和字符串类型:
以Long为例:
存储数据使用Bind Apis一般步骤如下:
1、通过EntryBinding binding =TupleBinding.getPrimitiveBinding(Long.class);
2、通过EntryBinding 把数据放到DatabaseEntry中:
myBinding.objectToEntry(data, dataEntry);
获取数据使用Bind Apis一般步骤如下:
1、通过EntryBinding binding =TupleBinding.getPrimitiveBinding(Long.class);
2、通过EntryBinding将Entry转换成Object Long theLong = (Long) myBinding.entryToObject(theData);
下面代码以测试的形式演示了整个过程:
package edu.jlu.fuliang; import java.io.File; import com.sleepycat.bind.EntryBinding; import com.sleepycat.bind.tuple.TupleBinding; import com.sleepycat.je.Database; import com.sleepycat.je.DatabaseConfig; import com.sleepycat.je.DatabaseEntry; import com.sleepycat.je.Environment; import com.sleepycat.je.EnvironmentConfig; import com.sleepycat.je.LockMode; import junit.framework.TestCase; public class PrimitiveBindingTest extends TestCase{ private Environment env; private Database db; private String key = "akey"; private Long data = 1234556633L; public void setUp()throws Exception{ EnvironmentConfig envConfig = new EnvironmentConfig(); envConfig.setAllowCreate(true); env = new Environment(new File("etc/dbEnv"),envConfig); DatabaseConfig dbConfig = new DatabaseConfig(); dbConfig.setAllowCreate(true); db = env.openDatabase(null, "myDB", dbConfig); DatabaseEntry keyEntry = new DatabaseEntry(key.getBytes("UTF-8")); DatabaseEntry dataEntry = new DatabaseEntry(); EntryBinding myBinding = TupleBinding.getPrimitiveBinding(Long.class); myBinding.objectToEntry(data, dataEntry); db.put(null, keyEntry, dataEntry); } public void testGet()throws Exception{ DatabaseEntry keyEntry = new DatabaseEntry(key.getBytes("UTF-8")); DatabaseEntry dataEntry = new DatabaseEntry(); EntryBinding binding = TupleBinding.getPrimitiveBinding(Long.class); db.get(null, keyEntry, dataEntry, LockMode.DEFAULT); Long l = (Long)binding.entryToObject(dataEntry); assertEquals(l,data); } public void tearDown()throws Exception{ db.close(); env.truncateDatabase(null, "myDB",false); env.close(); } }
序列化复杂的类型
步骤如下:
1、要存储的对象的类需要实现java.io.Serializable
2、打开两个数据库,一个存放数据,另一个存放类的信息
3、实例化com.sleepycat.bind.serial.StoredClassCatalog对象
4、创建uses com.sleepycat.bind.serial.SerialBinding对象
5、使用SerialBinding把对象放到DatabaseEntry中
下面是使用一个能够完整描述这个过程的例子来说明这个过程:
package edu.jlu.fuliang; import java.io.File; import com.sleepycat.bind.EntryBinding; import com.sleepycat.bind.serial.SerialBinding; import com.sleepycat.bind.serial.StoredClassCatalog; import com.sleepycat.je.Database; import com.sleepycat.je.DatabaseConfig; import com.sleepycat.je.DatabaseEntry; import com.sleepycat.je.DatabaseException; import com.sleepycat.je.Environment; import com.sleepycat.je.EnvironmentConfig; import com.sleepycat.je.LockMode; import junit.framework.TestCase; public class SerializableTypeTest extends TestCase{ private Person person; private Environment env; private Database db,classDB; private StoredClassCatalog classCatalog; public void setUp()throws Exception{ person = new Person(); person.setAge(12); person.setName("zhansan"); person.setSex('m'); EnvironmentConfig envConfig = new EnvironmentConfig(); envConfig.setAllowCreate(true); env = new Environment(new File("etc/dbEnv"),envConfig); DatabaseConfig dbConfig = new DatabaseConfig(); dbConfig.setAllowCreate(true); db = env.openDatabase(null, "myDB", dbConfig); classDB = env.openDatabase(null, "classDB", dbConfig); classCatalog = new StoredClassCatalog(classDB); EntryBinding dataBinding = new SerialBinding(classCatalog,Person.class); DatabaseEntry keyEntry = new DatabaseEntry(person.getName().getBytes("UTF-8")); DatabaseEntry dataEntry = new DatabaseEntry(); dataBinding.objectToEntry(person, dataEntry); db.put(null, keyEntry, dataEntry); } public void testGet()throws Exception{ EntryBinding dataBinding = new SerialBinding(classCatalog,Person.class); DatabaseEntry keyEntry = new DatabaseEntry(person.getName().getBytes("UTF-8")); DatabaseEntry dataEntry = new DatabaseEntry(); db.get(null, keyEntry, dataEntry, LockMode.DEFAULT); Person p = (Person)dataBinding.entryToObject(dataEntry); assertEquals(p.getName(),person.getName()); assertEquals(p.getAge(),person.getAge()); assertEquals(p.getSex(), person.getSex()); } public void tearDown()throws Exception{ db.close(); classDB.close(); env.truncateDatabase(null, "myDB", false); env.truncateDatabase(null, "classDB", false); env.close(); } }
要存储的对象对应的类
package edu.jlu.fuliang; import java.io.Serializable; public class Person implements Serializable{ private String name; private int age; private char sex; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public char getSex() { return sex; } public void setSex(char sex) { this.sex = sex; } }
自定义元组绑定:
存储复杂对象自定义元组绑定的步骤:
1、创建要存储的对象,这个对象的类没有必要实现Serializable接口:
2、扩展com.sleepycat.bind.tuple.TupleBinding来实现自定义的Binging
3、创建2步欻关键的自定义binding对象
4、将创建的对象是用自定义个binding放到DatabaseEntry中
5、使用put方法存入数据库
下面的例子说明了这个过程:
自定义Binging:
package edu.jlu.fuliang; import com.sleepycat.bind.tuple.TupleBinding; import com.sleepycat.bind.tuple.TupleInput; import com.sleepycat.bind.tuple.TupleOutput; public class PersonTupleBinding extends TupleBinding{ @Override public Object entryToObject(TupleInput ti) { Person person = new Person(); person.setName(ti.readString()); person.setAge(ti.readInt()); person.setSex(ti.readChar()); return person; } @Override public void objectToEntry(Object obj, TupleOutput output) { Person person = (Person)obj; output.writeString(person.getName()); output.writeInt(person.getAge()); output.writeChar(person.getSex()); } }
put/get的使用过程:
package edu.jlu.fuliang; import java.io.File; import com.sleepycat.je.Database; import com.sleepycat.je.DatabaseConfig; import com.sleepycat.je.DatabaseEntry; import com.sleepycat.je.DatabaseException; import com.sleepycat.je.Environment; import com.sleepycat.je.EnvironmentConfig; import com.sleepycat.je.LockMode; import junit.framework.TestCase; public class CustomTupleBindingTest extends TestCase{ private Person person; private Environment env; private Database db; public void setUp()throws Exception{ person = new Person(); person.setAge(12); person.setName("zhansan"); person.setSex('m'); EnvironmentConfig envConfig = new EnvironmentConfig(); envConfig.setAllowCreate(true); env = new Environment(new File("etc/dbEnv"),envConfig); DatabaseConfig dbConfig = new DatabaseConfig(); dbConfig.setAllowCreate(true); db = env.openDatabase(null, "myDB", dbConfig); PersonTupleBinding binding = new PersonTupleBinding(); DatabaseEntry keyEntry = new DatabaseEntry(person.getName().getBytes("UTF-8")); DatabaseEntry dataEntry = new DatabaseEntry(); binding.objectToEntry(person, dataEntry); db.put(null, keyEntry, dataEntry); } public void testGet()throws Exception{ PersonTupleBinding binding = new PersonTupleBinding(); DatabaseEntry keyEntry = new DatabaseEntry(person.getName().getBytes("UTF-8")); DatabaseEntry dataEntry = new DatabaseEntry(); db.get(null, keyEntry, dataEntry, LockMode.DEFAULT); Person p = (Person)binding.entryToObject(dataEntry); assertEquals(p.getName(),person.getName()); assertEquals(p.getAge(),person.getAge()); assertEquals(p.getSex(), person.getSex()); } public void tearDown()throws Exception{ db.close(); env.truncateDatabase(null, "myDB", false); env.close(); } }
评论
2 楼
fuliang
2009-03-16
alanye 写道
您好,请问DatabaseConfig原来有setType,可以选择BTree或者是Hash或者别的,新的je.DatabaseConfig里面没有了,是不是只能选择BTree呢? 谢谢
不太清楚,你可以看看新版本更新的说明。
1 楼
alanye
2009-03-16
您好,请问DatabaseConfig原来有setType,可以选择BTree或者是Hash或者别的,新的je.DatabaseConfig里面没有了,是不是只能选择BTree呢? 谢谢
发表评论
-
mysql 和 postgresql 常见命令对照
2012-02-03 16:23 4425一、通用区别 postgresql 的客户端命令行 psql ... -
Mysql数据库优化学习之三 索引优化(二)
2011-06-06 23:36 4104转载请标明出处: http://fuliang.iteye.c ... -
Mysql数据库优化学习之二 索引优化(一)
2011-05-29 00:25 5890转载请标明出处: http:/ ... -
Mysql数据库优化学习之一 Schema优化
2011-05-12 23:32 4007对一个设计拙劣或者没有做index的schma进行优化,可以很 ... -
postgresql导入导出数据
2010-09-19 13:49 5517导出 引用 pg_dump -U user database ... -
[zz] mysql 备份与还原
2010-04-12 21:50 1250本文讨论 MySQL 的备份和 ... -
mysql设置可远程连接
2010-03-28 00:32 1274方法一: mysql>update user set ... -
mysql无法通过mysqld.sock连接错误的解决方法
2010-03-27 23:53 13142今天发现mysql无故无法连接,出现错误: ERROR 20 ... -
使用ruby操作MongoDB
2010-03-04 00:24 8463MongoDB是基于文档、schema-free的、开源的数据 ...
相关推荐
Berkeley DB Java Edition(以下简称JE)是由美国Sleepycat Software公司(后被Oracle公司收购)开发的一套开放源码的嵌入式数据库,它采用K/V存储,能为应用程序提供可伸缩的、高性能的、有事务保护功能的数据管理服务
Berkeley DB Java Edition (JE)是一个完全用JAVA写的,它适合于管理海量的,简单的数据。 能够高效率的处理1到1百万条记录,制约JE数据库的往往是硬件系统,而不是JE本身。 多线程支持,JE使用超时的方式来处理...
Berkeley DB Java Edition (JE) 官方7.5.11下载版本。 相关介绍 https://blog.csdn.net/hadues/article/details/80854288
oracle 官方实现的 基于B+树 文件磁盘 数据存储 的文件数据库。
很好用的NoSQL 数据库, google 使用此数据库存储自己的用户信息, 它能够处理海量数据,效率高
#资源达人分享计划#
Java版本的Berkeley DB用户手册,找了好久
Oracle Berkeley DB Java 版是一个开源的、可嵌入的事务存储引擎,是完全用 Java 编写的。与 Oracle Berkeley DB 类似,Oracle Berkeley DB Java 版在应用程序的地址空间中执行,没有客户端/服务器通信的开销,从而...
Berkeley DB Java Edition (JE)是一个完全用JAVA写的,它适合于管理海量的,简单的数据。
Berkeley DB Java Edition JE 是一个完全用JAVA写的 它适合于管理海量的 简单的数据 能够高效率的处理1到1百万条记录 制约JE数据库的往往是硬件系统 而不是JE本身 多线程支持 JE使用超时的方式来处理线程间的死琐...
NULL 博文链接:https://xpenxpen.iteye.com/blog/2124921
自己稍微封装了一下,可以当成简单的map来使用。
这个是最流行的嵌入式高性能开源数据库内核开发包,java企业开发必备。
NULL 博文链接:https://rensanning.iteye.com/blog/1872481
嵌入式数据库Berkeley DB Java Edition Berkeley DB的使用 使用Berkeley DB的一般步骤 创建、打开、操作、关闭数据库环境Environment
使用BerkeleyDB数据库,java语言开发需要的jar包资源,7.5.11版本
Berkeley DB Java Edition (JE)是一个完全用JAVA 写的,它适合于管理海量的,简单的 数据。 l 能够高效率的处理 1 到 1 百万条记录,制约 JE 数据库的往往是硬件系统,而不是 JE 本身。 多线程支持,JE 使用超时的...
Berkeley DB(BDB)是一个高效的嵌入式数据库编程库,C语言、C++、Java、Perl、Python、Tcl以及其他很多语言都有其对应的API。Berkeley DB可以保存任意类型的键/值对(Key/Value Pair),而且可以为一个键保存多个...
Java-Edition-BerkeleyDB-3.1.0,国外的开源数据库,供大家参考