- 浏览: 565241 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (478)
- lucene (45)
- oracle (19)
- nutch (2)
- blog (2)
- 垂直搜索 (19)
- java综合 (89)
- spring (15)
- Hibernate (9)
- Struts (9)
- Hadoop (16)
- Mysql (12)
- nosql (10)
- Linux (3)
- MyEclipse (4)
- Ant (1)
- 设计模式 (19)
- JBPM (1)
- JSP (1)
- HtmlParser (5)
- SVN (2)
- 插件 (2)
- 收藏 (7)
- Others (1)
- Heritrix (18)
- Solr (4)
- 主题爬虫 (31)
- 内存数据库 (24)
- 分布式与海量数据 (32)
- httpclient (14)
- Tomcat (1)
- 面试宝典 (6)
- Python (14)
- 数据挖掘 (1)
- 算法 (6)
- 其他 (4)
- JVM (12)
- Redis (18)
最新评论
-
hanjiyun:
本人水平还有待提高,进步空间很大,看这些文章给我有很大的指导作 ...
JVM的内存管理 Ⅲ -
liuxinglanyue:
四年后的自己:这种方法 不靠谱。 使用javaagent的方式 ...
计算Java对象占用内存空间的大小(对于32位虚拟机而言) -
jaysoncn:
附件在哪里啊test.NoCertificationHttps ...
使用HttpClient过程中常见的一些问题 -
231fuchenxi:
你好,有redis,memlink,mysql的测试代码吗?可 ...
MemLink 性能测试 -
guyue1015:
[color=orange][/color][size=lar ...
JAVA同步机制
一、 简介
Berkeley DB Java Edition (JE)是一个完全用JAVA写的,它适合于管理海量的,简单的数据。
能够高效率的处理1到1百万条记录,制约JE数据库的往往是硬件系统,而不是JE本身。
多线程支持,JE使用超时的方式来处理线程间的死琐问题。
Database都采用简单的key/value对应的形式。
事务支持。
允许创建二级库。这样我们就可以方便的使用一级key,二级key来访问我们的数据。
支持RAM缓冲,这样就能减少频繁的IO操作。
支持日志。
数据备份和恢复。
游标支持。
二、 获取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也是有区别的
JE的日志文件只能APPEND,第一个日志文件名是 00000000.jdb,当他增长到一定大小的时候(默认是10M),开始写第二个日志文件00000001.jdb,已此类推。
跟C版本有所不同,JE的数据日志和事务日志是放在一起的,而不是分开放的。
JE cleaner负责清扫没用到的磁盘空间,删除后,或者更新后新的记录会追加进来,而原有的记录空间就不在使用了,cleaner负责清理不用的空间。
清理并不是立即进行的,当你关闭你的数据库环境后,通过调用一个cleaner方法来清理。
清理也不是只动执行的,需要你自己手动调用cleaner 方法来定时清理的。
日志文件的删除仅发生在检查点之后。cleaner准备出哪些log 文件需要被删除,当检查点过后,删掉一些不在被使用的文件。每写20M的日志文件就执行一次检查点,默认下。
JE的英文文档:http://www.oracle.com/technology/documentation/berkeley-db/je/GettingStartedGuide/index.html
JE的中文文档(不全):http://fesir.itpub.net/post/4728/253789
http://fesir.itpub.net/post/4728/253789
上面大概介绍一下,接下来是我在工作中写的一个例子(仅供参考):
package src.util; import java.io.File; import java.util.List; import junit.framework.TestCase; import src.com.bizjato.b2b.entity.Suppliers; import com.sleepycat.bind.EntryBinding; import com.sleepycat.bind.serial.SerialBinding; import com.sleepycat.bind.serial.StoredClassCatalog; import com.sleepycat.je.Cursor; import com.sleepycat.je.CursorConfig; 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.EnvironmentMutableConfig; import com.sleepycat.je.LockMode; import com.sleepycat.je.OperationStatus; /** * 嵌入式数据库 * * @author zhangqinjian * */ public class Jedtion extends TestCase { private static final String RESOURCE = ".//src//util//importData"; private Environment env; private Database db, classDB; private StoredClassCatalog classCatalog; /** * 初始化,设置数据库的环境和创建数据库 */ public void setUp() throws Exception { env = new Environment(new File(".//src//util//importData"), null); EnvironmentMutableConfig envMutableConfig = new EnvironmentMutableConfig(); envMutableConfig.setTxnNoSync(true); env.setMutableConfig(envMutableConfig); DatabaseConfig dbConfig = new DatabaseConfig(); dbConfig.setAllowCreate(true); db = env.openDatabase(null, "myDB", dbConfig); classDB = env.openDatabase(null, "classDB", dbConfig); classCatalog = new StoredClassCatalog(classDB); } // test: put key-value public void testPut(String key, Suppliers supp) throws Exception { EntryBinding dataBinding = new SerialBinding(classCatalog, Suppliers.class); DatabaseEntry keyEntry = new DatabaseEntry(key.getBytes("UTF-8")); DatabaseEntry dataEntry = new DatabaseEntry(); dataBinding.objectToEntry(supp, dataEntry); db.put(null, keyEntry, dataEntry); } // test: get public void testGet() throws Exception { EnvironmentConfig envConfig = new EnvironmentConfig(); envConfig.setAllowCreate(true); // envConfig.setReadOnly(true); env = new Environment(new File(".//src//util//importData"), envConfig); List myDbNames = env.getDatabaseNames(); System.out.println("Database size: " + myDbNames.size()); for (int i = 0; i < myDbNames.size(); i++) { System.out.println("Database Name: " + (String) myDbNames.get(i)); } DatabaseConfig dbConfig = new DatabaseConfig(); dbConfig.setAllowCreate(true); // dbConfig.setReadOnly(true); db = env.openDatabase(null, "myDB", dbConfig); classDB = env.openDatabase(null, "classDB", dbConfig); classCatalog = new StoredClassCatalog(classDB); System.out.println("Db: " + db.count()); EntryBinding dataBinding = new SerialBinding(classCatalog, Suppliers.class); DatabaseEntry keyEntry = new DatabaseEntry("key".getBytes("UTF-8")); DatabaseEntry dataEntry = new DatabaseEntry(); db.get(null, keyEntry, dataEntry, LockMode.DEFAULT); Suppliers p = (Suppliers) dataBinding.entryToObject(dataEntry); System.out.println(p.getCategory()); } /** * test: read database * @throws Exception */ public void testStore() throws Exception { EnvironmentConfig envConfig = new EnvironmentConfig(); envConfig.setAllowCreate(true); env = new Environment(new File(".//src//util//importData"), 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,Suppliers.class); Cursor cursor = null; CursorConfig config = new CursorConfig(); config.setDirtyRead(true); cursor = db.openCursor(null, config); // open cursor try { // Database and environment open omitted for brevity // Open the cursor. cursor = myDatabase.openCursor(null, null); // Cursors need a pair of DatabaseEntry objects to operate. These hold // the key and data found at any given position in the database. DatabaseEntry foundKey = new DatabaseEntry(); DatabaseEntry foundData = new DatabaseEntry(); // To iterate, just call getNext() until the last database record has been // read. All cursor operations return an OperationStatus, so just read // until we no longer see OperationStatus.SUCCESS while (cursor.getNext(foundKey, foundData, LockMode.DEFAULT) == OperationStatus.SUCCESS) { // getData() on the DatabaseEntry objects returns the byte array // held by that object. We use this to get a String value. If the // DatabaseEntry held a byte array representation of some other data // type (such as a complex object) then this operation would look // considerably different. String keyString = new String(foundKey.getData()); Suppliers supp = (Suppliers)dataBinding.entryToObject(foundData); System.out.println("Key - Data : " + keyString + " - " + supp.getCompanyName() + ""); } } catch (DatabaseException de) { System.err.println("Error accessing database." + de); } finally { // Cursors must be closed. cursor.close(); db.close(); classDB.close(); env.cleanLog(); env.close(); } } public void tearDown() throws Exception { db.close(); classDB.close(); env.cleanLog(); env.close(); } public static void main(String[] args) { Jedtion t = new Jedtion(); try { // t.setUp(); // Suppliers supp = new Suppliers(); // supp.setCategory("fivefive"); // t.testPut("5",supp); // t.testGet(); // t.testStore(); // t.tearDown(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }转:http://www.iteye.com/topic/227040
发表评论
-
基于Hadoop的Hbase环境搭建
2010-12-22 20:47 1322转:http://www.tech126.com/hado ... -
Hbase Shell的常用命令
2010-12-22 20:32 1666总结的一些Hbase shell的命令 都很简单,可以h ... -
HBase的性能优化和相关测试
2010-12-22 20:29 1593HBase的写效率还是很高的,但其随机读取效率并不高 可 ... -
understanding redis internal - 持久化机制
2010-12-05 09:28 1112redis 持久化有2种方式,定时快照与append only ... -
understanding redis internal - 主体结构与启动流程
2010-12-05 09:27 1087一. redis的定义 官方wiki对redis的定 ... -
MemcacheDB, Tokyo Tyrant, Redis performance test
2010-11-29 21:05 882I had tested the following ke ... -
mongodb API
2010-11-28 21:17 836http://api.mongodb.org/java/2.3 ... -
MongoDB 安装与启动
2010-11-28 19:06 986主要介绍在Windows 与 Linux 下的安装与启动 ... -
分布式key-value数据库mongoDB 安装
2010-11-28 19:05 1142Mongo是一个高性能,开源,模式自由(schema-free ... -
NoSQL数据库MongoDB之Windows安装
2010-11-28 19:04 1689就像和被人们当初炒得沸沸扬扬的SOA、OSGi等技术一 ... -
HBase使用例子(中文翻译)
2010-11-28 17:33 1557通过编码(java)的形式对HBase进行一系列的管理 ... -
HBase安装及测试
2010-11-28 17:25 1458HBase安装及测试 1. ... -
HBase安装
2010-11-28 17:23 1001官方文档:http://hbase.apache.org/ ... -
在Windows中使用Cygwin安装HBase
2010-11-28 17:21 13541.简介 HBase是 Hadoop 的 ... -
hbase的安装配置
2010-11-28 17:21 923standalone&pseudo-distribut ... -
javaeye上一些hbase讲解的链接
2010-11-28 17:20 10631.比较多的一些讲解http://beyiwork.iteye ... -
HBase入门
2010-11-28 15:58 1019HBase入门 部分内容参考于http://www.na ... -
HBase的安装配置
2010-11-28 15:56 946首先需要先下载HBase最新且稳定的版本:http://www ... -
MongoDB
2010-11-28 14:18 1295软硬件环境 MySQL版本:5.1.50,驱动版本:5. ... -
Berkeley DB Java Edition Research
2010-11-27 14:10 1028一、Berkeley DB Java Edition ...
相关推荐
Berkeley DB Java Edition(简称BDB JE)是一种高性能、轻量级的嵌入式数据库系统,由Oracle公司开发,广泛应用于需要快速数据存储和检索的应用场景。它并非传统的关系型数据库管理系统(RDBMS),而是一种键值对...
总的来说,Berkeley DB Java Edition是一款强大的、基于文件的Java数据库,利用B+树数据结构实现高效的数据存储和检索。它的特点是轻量级、可移植和高性能,适用于各种需要本地持久化数据存储的Java应用。
**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(简称BDB JE)是Oracle公司推出的一款强大的、高度可定制的嵌入式数据库系统,尤其适用于Java应用程序。这款数据库引擎以其轻量级、高性能和易用性在Java企业开发领域广受欢迎。本文将深入...
《嵌入式Berkeley DB Java版与Derby技术研究》一文主要探讨了两种典型的嵌入式数据库技术——Berkeley DB Java Edition和Apache Derby。嵌入式数据库在资源有限的环境中,如嵌入式系统,因其体积小、功能齐全、可...
3. **示例和文档**:可能包含演示如何使用BerkeleyDB Java API的示例代码,以及详细说明如何配置、操作和管理数据库的文档。 4. **依赖库**:BerkeleyDB可能依赖于其他的Java库,这些库也可能包含在jar文件中或者...
**正文** Berkeley DB(简称BDB)是由Oracle公司开发...总之,Berkeley DB的Java版本为开发者提供了一个强大而灵活的嵌入式数据库解决方案,通过深入学习和实践,可以充分利用其特性来构建高效、可靠的数据存储系统。
总结来说,Java-Edition-BerkeleyDB-3.1.0是一个强大且灵活的数据库解决方案,特别适合对数据访问速度和并发性能有高要求的Java应用。其易用的API、丰富的功能集以及高度的可定制性使其成为许多开发者的首选。
Berkeley DB 是一款高效、轻量级的嵌入式数据库系统,特别适合于需要本地存储且对性能有高要求的应用程序。它支持多种编程语言,包括Java,这使得开发人员能够在Java应用程序中直接使用Berkeley DB进行数据管理。在...
Berkeley DB JE(Java Edition)是Oracle公司提供的一款开源、嵌入式、基于Java的键值对数据库系统。它以其轻量级、高性能和高可用性而受到广泛的青睐,尤其适合于需要在内存中管理大量数据的应用场景。在版本7.0.6...
通过上述知识点的详细介绍,我们可以了解到 Berkeley DB Java Edition 的基本使用流程及其实现细节。Berkeley DB 作为一款强大的嵌入式数据库,其高效、灵活的特点使其成为许多应用领域的首选数据库解决方案之一。...
Berkeley DB Java Edition (JE) 是一款由Oracle公司开发的全Java实现的轻量级数据库管理系统,特别适用于处理大量简单数据。其主要特点包括: 1. **高效性能**:JE能有效处理从1到100万条记录,性能瓶颈通常在于...
- **BerkeleyDB Java Edition**:针对Java环境进行了优化,最新版本3.3已发布。 - **BerkeleyDB XML**:原生XML数据库,支持通过XQuery访问存储在容器中的文档,并根据内容进行索引。最新版本2.4已发布。 **1.3 ...
DBD (Berkeley DB) Java Edition,简称JE,是Oracle公司提供的一款开源、高性能、嵌入式、事务处理型数据库系统。它专为Java应用程序设计,提供了轻量级的数据存储和管理解决方案,尤其适合需要在内存中高效处理大量...
10. **嵌入式数据库**:SQLite和Berkeley DB等轻量级数据库常与Java嵌入式开发结合,用于存储和检索数据。 11. **硬件访问**:通过Java本地接口(JNI)或特定的硬件抽象层(HAL),开发者可以编写Java代码来控制...
在这个“berkeley db je-6.4.9.gz”压缩包中,包含了BDB Java Edition(JE)的6.4.9版本。这个版本的发布可能包含了性能优化、新功能、bug修复以及对先前版本的改进。下面将详细探讨BDB JE的相关知识点。 1. **键值...
Berkeley DB Java Edition 是 Oracle 公司的 Java 版嵌入式数据库管理解决方案,能够提供高性能和高可靠性的数据库管理解决方案。该产品提供了 Java 版嵌入式数据库管理功能,能够满足客户对高性能和高可靠性的需求...