- 浏览: 623862 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
xianzi_2008:
xianzi_2008 写道楼主请教下,我缓存了一个List& ...
Ehcache -
xianzi_2008:
楼主请教下,我缓存了一个List<Bean>对象, ...
Ehcache -
jsdsh:
收藏好.五个字
hibernate之one-to-many详细 -
Tlife:
好!!!!
hibernate------HQL总结 -
yanqingluo:
例子很恰当。
观察者模式
1.JDBM可以把它理解成一个嵌入式非常简单的数据库。官方网站:http://jdbm.sourceforge.net/ (OpenJMS和ActiveMQ 都用到了JDBM)
A:如果是以RecordManager.insert形式存储数据的话,它存储数据的格式是:一个自动生成的id + 一个序列化的对象。
B:如果是以BTree或HTree的insert形式存储数据的话,它存储数据的格式是:key + value ,类似Hashtable等
多数为个人理解,如果有不对的地方,望指正,谢谢:)
2.JDBM的普通存储(RecordManager.insert存储)
首先需要创建一个RecordManager,一般是通过RecordManagerFactory来创建它,需要一个字符串参数,这个参数用作JDBM创建的两个数据库文件名字的前缀。 例如:
- RecordManager recman = RecordManagerFactory.createRecordManager("test");
然后如果要保存一条新的记录,只需要调用RecordManager插入方法insert,它会返回 保存这条数据自动生成的一个id。例如:
- //返回一个保存对象new Integer(100)后生成的一个id值
- long recid = recman.insert(new Integer(100);
保持新记录之后,你需要通过使用RecordManager的commit方法(这个方法用来完成JDBM事件处理)来提交更改。你也可以使用rollback方法回滚到最后一次提交的地方,例如:
- recman.commit();
也可以为插入的记录设置一个别名,方便通过这个别名来取这条数据。例如:
- //也可以为插入的记录设置一个别名,方便通过这个别名来取这条数据。
- recman.setNamedObject("othername",recid);
为了取回保存的对象,如果你有记录id,那么可以通过RecordManager的fetch方法取,例如:
- Integer person2 = (Integer)recman.fetch(recid);
也可以通过它的引用别名来取,可以通过RecordManager的getNamedObject来获得记录id。这将返回记录id,如果要取出的记录不存在的话,将返回0,例如:
- long recid3 = recman.getNamedObject("othername");
- Integer person3 = (Integer)recman.fetch(recid3);
如果需要更新的话,可以调用RecordManager的update方法,例如:
- //可以把一个完全不同的类放到更新里,但是JDBM不会报错,因为它会把这些东西看作是可序列化的对象
- recman.update(recid, new Integer(10011));
3 JDBM里的HTree和BTree存储(BTree或HTree的insert形式存储)
Htree会给JDBM一个简单的保持哈希树,你可以在其中put()和get()键值,但是它缺少排序和大小语义。BTree是一个可伸缩性和可管理性更强的树,具有排序和大小语义,并能够浏览该树。所以我们一般常用BTree.可以通过BTree的static方法createInstance获得一个BTree的实例化对象,createInstance需要2个参数,一个是RecordManager,另一个是java.util.Comparator (让其能够对键值进行比较),JDBM自身带有一组用于Long、String和ByteArray的Comparator 。
例如:
- BTree bTree = BTree.createInstance(recman,new LongComparator());
这样就构建了一个BTree实例化对象,这个BTree拥有一个唯一的id(可以通过bTree.getRecid()获得到),这个id也就代表了这个BTree对象。也可以给这个BTree对象定义一个别名。例如:
- recman.setNamedObject("bTreeName",bTree.getRecid());
然后你就可以通过这个别名(bTreeName)来获得到这个BTree的id了。例如:
- long bTreeId = recman.getNamedObject("bTreeName");
通过BTree的load方法,也可以获得一个指定bTreeId的BTree对象,需要传递2个参数,一个是RecordManager,一个是要获得BTree对象的id值。
例如:
- BTree bTree1 = BTree.load(recman, bTree.getRecid());
如果要想从BTree里取出存储的值,可以通过find方法,参数是key值
- String key = "ttitfly"
- String strValue = (String)bTree.find(key);
如果要浏览这个树,可以使用通过browse()从BTree里获取的TupleBrowser,browse()方法返回一个TupleBrowser,放在树的键的开始部分。如果你向browse()提供了一个键,它就会位于树里的键的前面,如果你向它提供了一个“空(null)”作为键,那么它就会位于结尾。一旦有了TupleBrowser,就需要创建一个Tuple来保存键/值对(Tuple tuple=new Tuple(); ).当调用TupleBrowser.getNext()或者getPrevious()方法的时候,TupleBrowser将tuple作为一个参数。这两个方法都会返回一个布尔值,如果Tuple被取回,那么返回的就是“真(true)”,如果没有被取回,那么返回的就是“假(false)”。所以要在所有的键/值对里迭代,可以循环调用getNext()直到它返回false:
- Tuple tuple=new Tuple();
- TupleBrowser browser = bTree.browse();
- while ( browser.getNext( tuple ) ) {
- System.out.println( tuple.getKey()+" "+tuple.getValue() );
- }
4 。两种方式存储详细demo例子:
A:基本方式存储
- package ttitfly.jdbm;
- import java.io.Serializable;
- import jdbm.RecordManager;
- import jdbm.RecordManagerFactory;
- public class Test {
- public static void main(String[] args){
- try{
- //创建RecordManager实例对象
- RecordManager recman = RecordManagerFactory.createRecordManager("test" );
- //插入
- Person person1 = new Person();
- person1.setAge(24);
- person1.setName("ttitfly");
- long recid = recman.insert(person1);
- recman.commit();
- System.out.println(recid);
- //也可以为插入的记录设置一个别名,方便通过这个别名来取这条数据。
- recman.setNamedObject("othername",recid);
- //查询
- Person person2 = (Person)recman.fetch(recid);
- System.out.println(person2.getName());
- System.out.println(person2.getAge());
- //通过别名查询
- long recid3 = recman.getNamedObject("othername");
- Person person3 = (Person)recman.fetch(recid3);
- System.out.println(person3.getName());
- System.out.println(person3.getAge());
- //更新
- Person person4 = new Person();
- person4.setAge(25);
- person4.setName("test update");
- recman.update(recid, person4);
- recman.commit();
- Person person5 = (Person)recman.fetch(recid);
- System.out.println(person5.getAge());
- System.out.println(person5.getName());
- }catch(Exception e){
- e.printStackTrace();
- }
- }
- }
- class Person implements Serializable{
- public String name;
- public int age;
- 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;
- }
- }
输出结果为:
- 131130
- ttitfly
- 24
- ttitfly
- 24
- 25
- test update
B:BTree方式存储:
- package ttitfly.jdbm;
- import jdbm.RecordManager;
- import jdbm.RecordManagerFactory;
- import jdbm.btree.BTree;
- import jdbm.helper.StringComparator;
- import jdbm.helper.Tuple;
- import jdbm.helper.TupleBrowser;
- public class TestBTree {
- public static void main(String[] args){
- try{
- //创建RecordManager实例对象
- RecordManager recman = RecordManagerFactory.createRecordManager("test" );
- //构建一个BTree对象
- BTree bTree = BTree.createInstance(recman,new StringComparator());
- System.out.println(bTree.getRecid());
- String key = "ttitfly";
- String value = "true";
- boolean replace = true;
- //insert插入
- bTree.insert(key, value, replace);
- //给该BTree对象起个别名
- recman.setNamedObject("bTreeName",bTree.getRecid());
- //通过该别名获得到该BTree的id值
- long bTreeId = recman.getNamedObject("bTreeName");
- System.out.println(bTreeId);
- //通过BTree的id值,获取指定的BTree对象
- BTree bTree1 = BTree.load(recman, bTree.getRecid());
- //insert
- bTree1.insert("testkey", "testvalue", replace);
- //查找
- String strValue = (String)bTree.find("ttitfly");
- System.out.println(strValue);
- //查找出该BTree树里的所有的key,value值
- Tuple tuple=new Tuple();
- TupleBrowser browser = bTree.browse();
- while ( browser.getNext( tuple ) ) {
- System.out.println( tuple.getKey()+" "+tuple.getValue() );
- }
- }catch(Exception e){
- e.printStackTrace();
- }
- }
- }
- 输出结果为:
- 131150
- 131150
- true
- testkey testvalue
- ttitfly true
发表评论
-
struts备忘(转)
2008-03-31 15:14 1049=======<html:messages>=== ... -
Ehcache
2008-01-04 17:33 6980参考:http://macrochen.blogdriver. ... -
maven2介绍
2008-01-03 10:35 7596Maven2主要配置文件:pom.xml和settings.x ... -
struts2知识点备忘
2007-12-23 19:06 2252struts2标签写的form表单 1. 只有FieldErr ... -
dwr 错误:org.directwebremoting.util.CommonsLogging
2007-12-07 15:47 3456dwr遇到这种错误: org.directwebremotin ... -
XFire简单使用
2007-11-29 15:09 37331 . XFire可以认为是webservice的一个实现。 ... -
转:maven2
2007-09-11 10:00 16021.安装 下载Maven.目前的版本是2.0.4 ... -
eclipse plugin:EasyExplorer
2007-09-04 17:19 13975EasyExplorer 是一个类似于 Windows Ex ... -
openjms
2007-09-02 12:16 11702种模式 : 1. PTP (Point-to-Point) ... -
struts跳转问题
2007-08-07 15:46 3723web.xml <!-- Struts Action ... -
jndi,连接池,nameserver区别
2007-04-18 10:16 1455连接池就不用说了 jndi是种规范 nameserver是按照 ... -
XML-RPC 中文传递
2007-04-13 15:29 1936XML-RPC 中文传递 /** * 支持中文,Bas ... -
prototype
2007-03-14 16:52 1224new Ajax.Updater("infotop ... -
删除目录及子目录下隐藏的某个文件
2007-03-06 15:03 1430删除目录及子目录下隐藏的某个文件 del /S /A:H Th ... -
ehcache的一个bug
2007-01-23 16:55 3667java.lang.IllegalAccessError: t ... -
Rome使用简单说明二(部分关键源码分析)
2007-01-22 17:48 5112Parser部分(解析) com.sun.syndicatio ... -
hibernate 缓存
2007-01-19 17:24 1787查询缓存: 1。key(根据hql生成的sql,再加上参数,分 ... -
Rome使用简单说明一(基本应用)
2007-01-17 16:10 2952Rome: http://wiki.java.net/bin/ ... -
dwr遇到的问题解决
2007-01-10 19:05 1707问题:.Max depth exceeded when der ... -
XMLC在eclipse中的使用
2007-01-06 17:49 2227XMLC 插件 关于外部插件 ...
相关推荐
开发者或者系统管理员可以通过将这个JAR文件添加到他们的应用或服务器类路径中,来启用或升级ApacheDS的JDBM存储功能。 依赖包 在部署或使用"apacheds-jdbm-1.5.4.jar"时,还需要注意其他依赖的库。通常,一个JAR...
压缩包内的"activemq-store-jdbm-2.1.jar"文件是实际的ActiveMQ JDBM存储组件的实现,开发者或系统管理员可以将其添加到ActiveMQ的类路径中,以使用JDBM作为消息存储的后端。而"license.txt"文件通常包含了软件的...
`apacheds-jdbm-1.5.7.jar.zip` 文件是ApacheDS项目中使用JDBM存储引擎的一个组件,版本号为1.5.7。这个JAR文件包含实现ApacheDS和JDBM集成所需的所有代码,对于构建一个基于LDAP的服务,尤其是在需要高效持久化存储...
在实际使用中,配置ActiveMQ使用JDBM存储通常涉及修改ActiveMQ的配置文件(如activemq.xml),指定store类型的为JDBM,并设置相关的参数,如数据文件的位置、缓存大小等。这有助于优化存储性能,满足不同场景下的...
ActiveMQ Store JDBM 1.2 是一个专门为 Apache ActiveMQ 集成设计的持久化存储解决方案,它利用 JDBM(Java Database Minimal)库来提供高效、可靠的存储服务。在这个版本中,我们主要关注的是 activemq-store-jdbm-...
1. 配置ActiveMQ的配置文件(如activemq.xml),指定使用JDBM存储引擎。 2. 定义数据存储目录,确保JDBM能够正确地创建和访问数据库文件。 3. 调整JDBM的相关参数,如缓存大小、事务超时等,以适应特定的系统需求和...
ActiveMQ Store JDBM 2.0 是一个专门为 Apache ActiveMQ 开发的持久化存储解决方案,它基于 JDBM 库,用于在Java应用程序中实现高效的数据存储。在本文中,我们将深入探讨 ActiveMQ Store JDBM 2.0 的核心概念、功能...
《磁盘的KV存储:深度解析JDBM2》 在计算机科学中,键值对(Key-Value,简称KV)存储是一种常见的数据存储模型,它以键为索引,以值为数据,提供快速的查找和访问。JDBM2是其中的一款开源实现,专为磁盘上的KV存储...
**磁盘的KV存储 JDBM2** JDBM2是一个开源的键值对存储引擎,主要用于在磁盘上持久化数据。它提供了一个简单的Java API,允许开发者以键值对的形式快速存取大量数据。在Java应用中,JDBM2常用于数据库缓存、日志记录...
Java源码:磁盘的KV存储 JDBM2是一个经典的键值对(Key-Value)持久化存储实现,主要用于在磁盘上存储大量数据。JDBM2是JDBM项目的一个版本,它提供了一个简单易用的API,用于在Java应用程序中实现高效的本地数据库...
JDBM2是一个开源的、基于Java实现的磁盘KV存储系统,它提供了一种在Java应用程序中实现数据库功能的方式,而无需依赖外部数据库引擎。JDBM2的设计目标是简单易用、性能高效,以及支持事务处理。 JDBM2的核心特性...
JDBM2是一个基于Java的磁盘键值(KV)存储库,它提供了高效、可靠的持久化数据存储解决方案。JDBM2的设计目标是为Java应用程序提供快速、易用的数据库存储,适合那些对内存占用和性能有高要求的场景。 1. **键值...
《基于Java的磁盘KV存储:JDBM2深度解析》 在当今的软件开发中,数据存储是不可或缺的一部分,而键值对(Key-Value)存储作为一种简单且高效的存储模型,广泛应用于缓存、日志记录、配置管理等多个场景。Java作为...
JAVA源码磁盘的KV存储JDBM2JAVA源码磁盘的KV存储JDBM2
JDBM3, 嵌入式 key-value Java数据库 注意:这个项目处于维护模式,我将精力转向 JDBM4,...JDBM提供由磁盘存储备份的TreeMap,HashMap和其他集合。 现在你可以处理数十亿项而不用耗尽内存。 JDBM可能是最快和simpliest
JDBM2是Java实现的一个高效、可扩展的键值(Key-Value)存储系统,它允许开发者将数据以键值对的形式持久化到磁盘上。JDBM2的设计目标是提供接近内存的读写速度,同时保持数据在磁盘上的持久性,使得它成为数据库...
java资源磁盘的KV存储 JDBM2java资源磁盘的KV存储 JDBM2提取方式是百度网盘分享地址
在这个实例源码"基于Java的实例源码-磁盘的KV存储 JDBM2.zip"中,我们探讨的是一个关键的计算机科学概念——键值对(Key-Value)存储,以及它在磁盘上的实现。JDBM2是一个开源的Java库,专门用于实现持久化的键值对...
JDBM是一个开源的Java持久化存储库,它提供了高性能的键值对存储功能,常用于数据库和缓存系统。NMS(Network Management System)在上下文中可能指的是JDBM的一个特定模块或应用,用于管理和监控JDBM数据库的网络...
标题中的"activemq-store-jdbm-1.5.jar.zip"是一个压缩文件,其中包含的是ActiveMQ存储组件JDBM的1.5版本。ActiveMQ是Apache软件基金会的一个开源项目,它是一款功能强大的消息代理,实现了Java消息服务(JMS)规范...