BerkeleyDB
是一种
KEY-VALUE
的存储容器,跟
memcached
有些类似。但是
BerkeleyDB
相对于
memcached
的不同在于:(
1
)
BerkeleyDB
不是分布式的,你可以简单的把
BerkeleyDB
理解为本地的一个磁盘文件,只不过
BerkeleyDB
会负责组织这个文件,并从这个文件中快速检索出数据;而
memcached
是可以通过简单的文本协议网络访问的,因此
memcached
数据是存放在
memcached
服务器上的,其他应用程序无论
C,PHP,JAVA
还是
Ruby
都只要通过网络协议就可以访问。(
2
)
BerkeleyDB
的定位是数据库,数据库最重要的是持久化,而
memcached
的定位是
Cache
,因此
memcached
的数据都是存放在内存里面的,
memcached
宕机或重启缓存数据丢失是没有关系的,然而
BerkeleyDB
应用场景往往要求数据是持久化的,只不过
BerkeleyDB
的
Hash
索引的效率要比
Mysql
等关系数据库的
B-Tree
索引效率高。
BerkeleyDB
被
Oracle
收购了,我们在
Oracle
站点上会看到:
BerkeleyDB
;
BerkeleyDB
XML
和
BerkeleyDB JAVA Edition
三个东西。简单的说最开始
BerkeleyDB
是只有
C
语言版本的,但是
JAVA
也可以使用,只不过需要通过
JNI
调用,效率可能有点影响。但是
Oracle
不会放弃
JAVA
领域,因此很快就出了
JAVA Edition
,专门用
JAVA
实现了一遍,也就是我们看到的
BerkeleyDB JAVA Edition
(简称
JE
)。至于
BerkeleyDB
XML
可能是专门对
XML
数据的处理方面的,笔者也没看过相关文档。三个东西的下载地址:
http://www.oracle.com/technetwork/database/berkeleydb/downloads/index.html
下面笔者以
BerkeleyDB JAVA Edition
来写一个
HelloWorld
程序,下载
JE
:
berkeleydb java edition:
http://download.oracle.com/otn/berkeley-db/je-4.1.10.tar.gz
(你可能需要先在
oracle
站点注册一个账号,并登陆,才能下载)
笔者还是引用别人写的
HelloWorld
,写得很好:
http://blog.csdn.net/tiandiqing/article/details/4337636
或
http://hi.baidu.com/shirdrn/blog/item/28e1573948cffdf43b87ce6e.html
简单来说,BerkeleyDB和Mysql概念上的类比:Mysql的一个server上可以有多个数据库,数据库中有多个表和记录;BerkeleyDB首先指定文件目录,用于存储,这个叫Enviroment,然后在一个Environment中可以定义多个数据库,以名称来区分,这个叫Database,最后就是在Database中存放KEY-VALUE。
package com.eyesmore.bdb.je;
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 com.sleepycat.je.OperationStatus;
public class MyBerkeleyDB {
private Environment env;
private Database db;
public MyBerkeleyDB() {
}
/** 构建Environment: 指定存储的文件(一个Environment可以有多个数据库) */
public void setUp(String path, long cacheSize) {
EnvironmentConfig envConfig = new EnvironmentConfig();
envConfig.setAllowCreate(true);
envConfig.setCacheSize(cacheSize);//The memory available to the database system, in bytes.
File dir = new File(path);
if(!dir.exists()) {//如果指定的目录不存在,则自动创建
dir.mkdir();
System.out.println("创建目录:"+path);
}
try {
env = new Environment(dir, envConfig);
} catch (DatabaseException e) {
e.printStackTrace();
}
}
/** 构建Database: 指定数据库名字,如果指定名字的数据库不存在,则自动创建。*/
public void open(String dbName) {
DatabaseConfig dbConfig = new DatabaseConfig();
dbConfig.setAllowCreate(true);
try {
db = env.openDatabase(null, dbName, dbConfig);
} catch (DatabaseException e) {
e.printStackTrace();
}
}
/** 关闭数据库和环境 */
public void close() {
try {
if (db != null) {
db.close();
}
if (env != null) {
env.close();
}
} catch (DatabaseException e) {
e.printStackTrace();
}
}
/**数据操作:写
* BDB存储的数据是无格式的,都是二进制的数据,无论是KEY,还是VALUE。
* 如果我们要存取JAVA对象,需要程序员先序列化成二进制的。
* */
public boolean put(String key, String value) throws Exception {
byte[] theKey = key.getBytes("UTF-8");
byte[] theValue = value.getBytes("UTF-8");
OperationStatus status = db.put(null, new DatabaseEntry(theKey),
new DatabaseEntry(theValue));
if (status == OperationStatus.SUCCESS) {
return true;
}
return false;
}
/**数据操作:读 */
public String get(String key) throws Exception {
DatabaseEntry queryKey = new DatabaseEntry();
DatabaseEntry value = new DatabaseEntry();
queryKey.setData(key.getBytes("UTF-8"));
OperationStatus status = db
.get(null, queryKey, value, LockMode.DEFAULT);
if (status == OperationStatus.SUCCESS) {
return new String(value.getData());
}
return null;
}
/**数据操作:修改 (覆盖写就是修改)*/
public boolean update(String key, String value) throws Exception {
byte[] updateKey = key.getBytes("UTF-8");
byte[] updateValue = value.getBytes("UTF-8");
OperationStatus status = db.put(null, new DatabaseEntry(updateKey), new DatabaseEntry(updateValue));
if (status == OperationStatus.SUCCESS) {
return true;
}
return false;
}
/**数据操作:删除 */
public boolean delete(String key) throws Exception {
byte[] theKey = key.getBytes("UTF-8");
OperationStatus status = db.delete(null, new DatabaseEntry(theKey));
if(status == OperationStatus.SUCCESS) {
return true;
}
return false;
}
public static void main(String[] args) throws Exception {
MyBerkeleyDB mbdb = new MyBerkeleyDB();
mbdb.setUp("D:\\bdb", 1000000);
mbdb.open("myDB");
// System.out.println("开始向Berkeley DB中存入数据...");
// for (int i = 0; i < 20; i++) {
// try {
// String key = "myKey" + i;
// String value = "myValue" + i;
// System.out.println("[" + key + ":" + value + "]");
// mbdb.put(key, value);
// } catch (Exception e) {
// e.printStackTrace();
// }
// }
mbdb.put("liwei", "20");
String value = mbdb.get("liwei");
System.out.println(value);
mbdb.close();
}
}
分享到:
相关推荐
Berkeley DB Java Edition (JE) 官方7.5.11下载版本。 相关介绍 https://blog.csdn.net/hadues/article/details/80854288
**Berkeley DB Java Edition**,简称BDBJE,是由Oracle公司开发的一款高度可移植的、基于文件系统的数据存储解决方案,特别适用于需要高效、可靠且无服务器的数据管理的应用场景。这款数据库系统采用B+树作为其核心...
**Berkeley DB Java Edition 5.0.73** Berkeley DB Java Edition(简称BDB JE)是一款由Oracle公司开发的高性能、轻量级的NoSQL数据库系统。它以其高效能、可扩展性和可靠性在处理大规模数据存储时受到广泛欢迎,...
Berkeley DB Java Edition (JE) 是一款开源的嵌入式数据库管理系统,由Sleepycat Software开发,现归Oracle公司所有。这款数据库系统以其键值(K/V)存储模型为特色,适用于需要高性能、可伸缩性及事务处理能力的应用...
Berkeley DB Java Edition(JE)是一种为Java程序提供内嵌式、事务保护的数据库引擎,它继承了Berkeley DB家族的优点,包括快速、可靠和具备容错能力的数据管理特性。为了深入理解其数据存储结构,有必要对JE使用的B...
Berkeley DB Java Edition (JE)是一个完全用JAVA写的,它适合于管理海量的,简单的数据。 能够高效率的处理1到1百万条记录,制约JE数据库的往往是硬件系统,而不是JE本身。 多线程支持,JE使用超时的方式来处理...
### Berkeley DB Java Edition 使用手册详解 #### 一、Berkeley DB Java Edition (JE) 概述 Berkeley DB Java Edition (简称 JE) 是一款高性能、轻量级的NoSQL数据库解决方案,完全基于Java语言开发。它特别适用于...
Berkeley DB Java Edition JE 是一个完全用JAVA写的 它适合于管理海量的 简单的数据 能够高效率的处理1到1百万条记录 制约JE数据库的往往是硬件系统 而不是JE本身 多线程支持 JE使用超时的方式来处理线程间的死琐...
《Berkeley DB Java Edition 4.0.92 开发包详解》 Berkeley DB Java Edition(简称BDB JE)是Oracle公司推出的一款强大的、高度可定制的嵌入式数据库系统,尤其适用于Java应用程序。这款数据库引擎以其轻量级、高...
**Java嵌入式NoSQL数据库之Berkeley DB Java Edition** Berkeley DB Java Edition(简称BDB JE)是一种高性能、轻量级的嵌入式数据库系统,由Oracle公司开发,广泛应用于需要快速数据存储和检索的应用场景。它并非...
Oracle Berkeley DB Java 版是一个开源的、可嵌入的事务存储引擎,是完全用 Java 编写的。与 Oracle Berkeley DB 类似,Oracle Berkeley DB Java 版在应用程序的地址空间中执行,没有客户端/服务器通信的开销,从而...
NULL 博文链接:https://xpenxpen.iteye.com/blog/2124921
自己稍微封装了一下,可以当成简单的map来使用。
这可能是BerkeleyDB Java Edition的jar文件,表示BerkeleyDB Java版的7.5.11版本。这个文件通常会包含以下组件: 1. **BerkeleyDB引擎**:这是数据库的核心部分,处理数据的读写操作,包括事务处理、并发控制、恢复...
在“BerkeleyDB概念”部分,文档会介绍Berkeley DB的基本概念,如BTree和Hash数据库的访问方式选择,以及Queue和Recno之间的选择。 接下来,教程会讨论数据库的限制与可移植性、环境设置、异常处理和错误返回。然后...
Berkeley DB Java 版直接持久层基础1 Berkeley DB Java 版直接持久层基础1是指使用 Berkeley DB Java 版本来实现直接持久层的技术基础。直接持久层是一种数据访问技术,允许Java应用程序直接访问数据库,而不需要...
《嵌入式Berkeley DB Java版与Derby技术研究》一文主要探讨了两种典型的嵌入式数据库技术——Berkeley DB Java Edition和Apache Derby。嵌入式数据库在资源有限的环境中,如嵌入式系统,因其体积小、功能齐全、可...
《Berkeley DB数据库C语言入门教程》是一份深入浅出的文档,主要针对希望使用C语言操作Berkeley DB数据库的初学者。Berkeley DB是由Oracle公司开发的一种轻量级、高性能、嵌入式数据库系统,广泛应用于各种软件开发...