`
muxiaolin
  • 浏览: 30859 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

berkeleydb-CRCD

阅读更多
最近发现berkeleydb还是不错的,存储相同的数据量,要比磁盘索引小得多,第一次用这样的非关系型数据库,写了个 基本操作的代码


package com.berkeleydb.java;

import java.io.File;
import java.io.IOException;

import org.apache.commons.io.FileUtils;
import org.junit.Before;
import org.junit.Test;

import com.sleepycat.bind.EntryBinding;
import com.sleepycat.bind.serial.SerialBinding;
import com.sleepycat.bind.serial.StoredClassCatalog;
import com.sleepycat.bind.tuple.StringBinding;
import com.sleepycat.je.Cursor;
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 com.sleepycat.je.OperationStatus;
import com.sleepycat.je.Transaction;

public class CRUD {

private File dbPath = new File("D:\\berkeleydb-java2");

@Before
public void init()throws IOException{
/*if(dbPath.exists()){
FileUtils.cleanDirectory(dbPath);
}else{*/
FileUtils.forceMkdir(dbPath);
//}
}

/**
* 向berkeleydb中添加多条信息
* @throws Exception
*/
@Test
public void addObject() throws Exception {

EnvironmentConfig envConfig = new EnvironmentConfig();
DatabaseConfig dbConfig = new DatabaseConfig();
envConfig.setTransactional(true);
envConfig.setAllowCreate(true);
envConfig.setLocking(true);
//日志的最大长度,日志和数据是一起的,这个参数决定当达到LOG_FILE_MAX后,再切分一个单独的文件
envConfig.setConfigParam(EnvironmentConfig.LOG_FILE_MAX, "104857600");
dbConfig.setAllowCreate(true);
dbConfig.setTransactional(true);
Environment env = new Environment(dbPath, envConfig);
Transaction txn = env.beginTransaction(null, null);
//第一个数据库
Database bindingsDb = env.openDatabase(txn, "bindingsDb", dbConfig);
//这个是用来存储 class信息的库
Database catalogDb = env.openDatabase(txn, "catalogDb", dbConfig);

//绑定可序列化的类
StoredClassCatalog classCatalog = new StoredClassCatalog(catalogDb);
EntryBinding<Document> dataBinding = new SerialBinding<Document>(classCatalog, Document.class);

txn.commit();

DatabaseEntry theKey = new DatabaseEntry();
DatabaseEntry theData = new DatabaseEntry();

for (int i = 0; i < 100; i++) {
Document doc = new Document();
doc.setName("muxiaolin" + i);
doc.setPubtime(System.currentTimeMillis());
doc.setPath("c:\\xiaolin");

StringBinding.stringToEntry(i + "", theKey);
dataBinding.objectToEntry(doc, theData);
//开启事物
txn = env.beginTransaction(null, null);
bindingsDb.put(txn, theKey, theData);
txn.commit();
}
catalogDb.close();
bindingsDb.close();
env.close();
}

@Test
public void delete() throws Exception {
EnvironmentConfig envConfig = new EnvironmentConfig();
DatabaseConfig dbConfig = new DatabaseConfig();
envConfig.setTransactional(true);
envConfig.setAllowCreate(true);
envConfig.setLocking(true);
envConfig.setConfigParam(EnvironmentConfig.LOG_FILE_MAX, "104857600");
dbConfig.setAllowCreate(true);
dbConfig.setTransactional(true);
Environment env = new Environment(dbPath, envConfig);
Transaction txn = env.beginTransaction(null, null);
Database dataBase = env.openDatabase(txn, "bindingsDb", dbConfig);

String aKey = "20";
DatabaseEntry theKey = new DatabaseEntry();
StringBinding.stringToEntry(aKey, theKey);

if (dataBase.delete(txn, theKey) == OperationStatus.SUCCESS) {
System.out.println("delete success!");
} else {
System.out.println("No record found for key '" + aKey + "'.");
}

txn.commit();
dataBase.close();
env.close();
}

@Test
public void getObject() throws Exception {

EnvironmentConfig envConfig = new EnvironmentConfig();
DatabaseConfig dbConfig = new DatabaseConfig();
envConfig.setReadOnly(true);
dbConfig.setReadOnly(true);
Environment env = new Environment(dbPath, envConfig);
Database bindingsDb = env.openDatabase(null, "bindingsDb", dbConfig);

DatabaseEntry foundKey = new DatabaseEntry();
DatabaseEntry foundData = new DatabaseEntry();

Database catalogDb = env.openDatabase(null, "catalogDb", dbConfig);

StoredClassCatalog classCatalog = new StoredClassCatalog(catalogDb);
EntryBinding<Document> dataBinding = new SerialBinding<Document>(classCatalog, Document.class);

String aKey = "20";
StringBinding.stringToEntry(aKey, foundKey);

if (bindingsDb.get(null, foundKey, foundData, LockMode.DEFAULT) == OperationStatus.SUCCESS) {
Document doc = dataBinding.entryToObject(foundData);
System.out.println(doc.toString());
} else {
System.out.println("No record found for key '" + aKey + "'.");
}
bindingsDb.close();
catalogDb.close();
env.close();
}

/**
* 游标查询
* @throws Exception
*/
@Test
public void cursor() throws Exception {

EnvironmentConfig envConfig = new EnvironmentConfig();
DatabaseConfig dbConfig = new DatabaseConfig();
envConfig.setReadOnly(true);
dbConfig.setReadOnly(true);
Environment env = new Environment(dbPath, envConfig);
Database bindingsDb = env.openDatabase(null, "bindingsDb", dbConfig);
Cursor cursor = bindingsDb.openCursor(null, null);

DatabaseEntry foundKey = new DatabaseEntry();
DatabaseEntry foundData = new DatabaseEntry();

Database catalogDb = env.openDatabase(null, "catalogDb", dbConfig);

StoredClassCatalog classCatalog = new StoredClassCatalog(catalogDb);
EntryBinding<Document> dataBinding = new SerialBinding<Document>(classCatalog, Document.class);

while (cursor.getNext(foundKey, foundData, LockMode.DEFAULT) == OperationStatus.SUCCESS) {
System.out.println(StringBinding.entryToString(foundKey));
System.out.println(dataBinding.entryToObject(foundData).toString());
}

cursor.close();
bindingsDb.close();
catalogDb.close();
env.close();
}

}
分享到:
评论

相关推荐

    BerkeleyDB-JE je-6.0.11

    Oracle BerkeleyDB-JE je-6.0.11

    BerkeleyDB-Core-Cxx-GSG.rar

    **Berkeley DB (BDB)** 是一款开源的、嵌入式数据库系统,由Oracle公司提供。它被广泛用于需要高效本地存储和简单数据管理的软件应用程序中,特别是在那些对性能和可靠性有高要求的场景。BDB的核心特性包括事务处理...

    BerkeleyDB-Core-Cxx-GSG.rar_Berkeley DB_berkeley Db cxx

    《Berkeley DB核心技术指南——C++接口篇》 Berkeley DB(简称BDB)是由Oracle公司开发的一款开源、轻量级、嵌入式数据库系统,主要用于处理键值对存储问题。它广泛应用于需要快速访问数据的环境,如网络服务器、...

    Java-Edition-BerkeleyDB-3.1.0.zip_BerkeleyDB

    **Java版BerkeleyDB 3.1.0详解** BerkeleyDB是一款由Oracle公司开发的开源、嵌入式数据库系统,特别适用于Java开发者。在Java-Edition-BerkeleyDB-3.1.0版本中,它提供了高效、可靠的数据存储解决方案,尤其适合于...

    db-4.7.25-master_db-4.7.25-master_berkeleydbvxworks_BerkeleyDB_源

    Berkeley DB是一个开源的文件数据库,介于关系数据库与内存数据库之间,使用方式与内存数据库类似,它提供的是一系列直接访问数据库的函数,而不是像关系数据库那样需要网络通讯、SQL解析等步骤,本文件是早期版本

    Berkeley DB -- Access Method Configuration_iyangjian200599

    (二) Berkeley DB -- Access Method Configuration_iyangjian2005997_新浪博客.mht

    BerkeleyDB-Core-JAVA-GSG.pdf

    ### Berkeley DB for Java:概述与入门指南 #### 一、Berkeley DB简介 Berkeley DB (BDB) 是一个高性能的嵌入式数据库系统,它以其高效的数据存储和检索能力而闻名。根据提供的文档信息,“BerkeleyDB-Core-JAVA-...

    BerkeleyDB-0.26

    **BerkeleyDB** 是一款由 Oracle 公司开发的开源、高性能、无模式的键值对存储数据库系统。它在嵌入式环境和轻量级应用程序中被广泛使用,尤其适用于那些需要快速数据访问和简单数据管理的应用。BerkeleyDB 的设计...

    BerkeleyDB-0.27

    **BerkeleyDB** 是一款强大的、高度可定制的嵌入式数据库系统,广泛应用于各种软件开发,尤其是在需要高效存储和检索数据的场景中。这款数据库系统由Oracle公司开发,最初在1990年由Sleepycat Software推出,因其...

    Berkeley DB -- 入门知识和一个小例子_iyangjian2005997_新浪博客.mht

    Berkeley DB -- 入门知识和一个小例子_iyangjian2005997_新浪博客.mht

    Berkeley DB4.8以上各版本

    Berkeley DB是一款由Oracle公司开发的嵌入式数据库系统,被广泛应用于许多软件项目中,尤其是在需要快速、轻量级数据存储解决方案的场景下。它提供了键值对存储模式,适用于构建高性能的数据缓存和数据库应用程序。...

    berkeley db db-6.1.26.tar.gz

    db-6.1.26.tar.gz berkeley db

    BerkeleyDB Manual C/C++

    《BerkeleyDB Manual C/C++》是一份详尽的官方文档,主要针对使用C和C++语言进行数据库操作的开发者。BerkeleyDB是一款轻量级、高性能的关系型数据库管理系统,常用于嵌入式系统和分布式应用程序。这篇手册将深入...

    analyzerbeans-berkeleydb-0.21.jar

    官方版本,亲测可用

    Berkeley DB C++编程入门教

    Berkeley DB是一个由Oracle公司开发的开源嵌入式数据库系统,支持多种编程语言接口,其中C++是其中之一。它为开发者提供了一个轻量级的数据库解决方案,适用于多种应用程序。Berkeley DB允许开发者在应用程序中直接...

    BerkeleyDB_java_jar包

    BerkeleyDB是一个开源的、基于键值对的嵌入式数据库系统,由Oracle公司提供。它为Java开发者提供了丰富的API,使得在Java应用程序中轻松集成数据存储成为可能。标题中的"BerkeleyDB_java_jar包"指的是适用于Java开发...

    db-4.4.20.tar.gz

    Berkeley DB 4.4.20 .tar.gz 来自https://www.oracle.com/database/technologies/related/berkeleydb-release-history.html

    BerkerleyDb-18.1.40.tar.gz

    《BerkeleyDB:数据库系统的核心技术解析》 BerkeleyDB(简称BDB)是由Oracle公司开发的一款开源、轻量级、嵌入式数据库系统。它以其高效、灵活和可靠的特点,广泛应用于各种软件项目,特别是在分布式系统、网络...

Global site tag (gtag.js) - Google Analytics