`
ttitfly
  • 浏览: 620204 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

JDBM存储

阅读更多

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创建的两个数据库文件名字的前缀。 例如:

java 代码
  1. RecordManager recman = RecordManagerFactory.createRecordManager("test");  

然后如果要保存一条新的记录,只需要调用RecordManager插入方法insert,它会返回 保存这条数据自动生成的一个id。例如:

java 代码
  1. //返回一个保存对象new Integer(100)后生成的一个id值   
  2. long recid = recman.insert(new Integer(100);  

 保持新记录之后,你需要通过使用RecordManager的commit方法(这个方法用来完成JDBM事件处理)来提交更改。你也可以使用rollback方法回滚到最后一次提交的地方,例如:

java 代码
  1. recman.commit();  

也可以为插入的记录设置一个别名,方便通过这个别名来取这条数据。例如:

java 代码
  1. //也可以为插入的记录设置一个别名,方便通过这个别名来取这条数据。   
  2. recman.setNamedObject("othername",recid);   

 

为了取回保存的对象,如果你有记录id,那么可以通过RecordManager的fetch方法取,例如:

java 代码
  1. Integer person2 = (Integer)recman.fetch(recid);   

 

也可以通过它的引用别名来取,可以通过RecordManager的getNamedObject来获得记录id。这将返回记录id,如果要取出的记录不存在的话,将返回0,例如:

java 代码
  1. long recid3 = recman.getNamedObject("othername");    
  2. Integer person3 = (Integer)recman.fetch(recid3);  

 如果需要更新的话,可以调用RecordManager的update方法,例如:

java 代码
  1. //可以把一个完全不同的类放到更新里,但是JDBM不会报错,因为它会把这些东西看作是可序列化的对象   
  2. 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 。

例如:

java 代码
  1. BTree bTree = BTree.createInstance(recman,new LongComparator());   

 这样就构建了一个BTree实例化对象,这个BTree拥有一个唯一的id(可以通过bTree.getRecid()获得到),这个id也就代表了这个BTree对象。也可以给这个BTree对象定义一个别名。例如:

java 代码
  1. recman.setNamedObject("bTreeName",bTree.getRecid());   

 然后你就可以通过这个别名(bTreeName)来获得到这个BTree的id了。例如:

java 代码
  1. long bTreeId = recman.getNamedObject("bTreeName");  

 

通过BTree的load方法,也可以获得一个指定bTreeId的BTree对象,需要传递2个参数,一个是RecordManager,一个是要获得BTree对象的id值。

例如:

java 代码
  1. BTree bTree1 = BTree.load(recman, bTree.getRecid());  

 

如果要想从BTree里取出存储的值,可以通过find方法,参数是key值

java 代码
  1. String key = "ttitfly"  
  2. 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:

java 代码
  1. Tuple tuple=new Tuple();    
  2. TupleBrowser  browser = bTree.browse();   
  3. while ( browser.getNext( tuple ) ) {   
  4.           System.out.println( tuple.getKey()+" "+tuple.getValue() );   
  5. }  

 

4 。两种方式存储详细demo例子:

A:基本方式存储

java 代码
  1. package ttitfly.jdbm;   
  2.   
  3. import java.io.Serializable;   
  4.   
  5. import jdbm.RecordManager;   
  6. import jdbm.RecordManagerFactory;   
  7.   
  8. public class Test {   
  9.   
  10.     public static void main(String[] args){   
  11.         try{   
  12.             //创建RecordManager实例对象   
  13.             RecordManager recman = RecordManagerFactory.createRecordManager("test" );   
  14.             //插入   
  15.             Person person1 = new Person();   
  16.             person1.setAge(24);   
  17.             person1.setName("ttitfly");   
  18.             long recid = recman.insert(person1);   
  19.             recman.commit();   
  20.             System.out.println(recid);   
  21.                
  22.             //也可以为插入的记录设置一个别名,方便通过这个别名来取这条数据。   
  23.             recman.setNamedObject("othername",recid);    
  24.             //查询   
  25.             Person person2 = (Person)recman.fetch(recid);   
  26.             System.out.println(person2.getName());   
  27.             System.out.println(person2.getAge());   
  28.   
  29.             //通过别名查询   
  30.             long recid3 = recman.getNamedObject("othername");    
  31.             Person person3 = (Person)recman.fetch(recid3);   
  32.             System.out.println(person3.getName());   
  33.             System.out.println(person3.getAge());   
  34.        
  35.             //更新   
  36.             Person person4 = new Person();   
  37.             person4.setAge(25);   
  38.             person4.setName("test update");   
  39.             recman.update(recid, person4);   
  40.             recman.commit();   
  41.             Person person5 = (Person)recman.fetch(recid);   
  42.             System.out.println(person5.getAge());   
  43.             System.out.println(person5.getName());   
  44.   
  45.         }catch(Exception e){   
  46.             e.printStackTrace();   
  47.         }   
  48.     }   
  49. }   
  50.   
  51. class Person implements Serializable{   
  52.     public String name;   
  53.     public int age;   
  54.     public int getAge() {   
  55.         return age;   
  56.     }   
  57.     public void setAge(int age) {   
  58.         this.age = age;   
  59.     }   
  60.     public String getName() {   
  61.         return name;   
  62.     }   
  63.     public void setName(String name) {   
  64.         this.name = name;   
  65.     }   
  66.        
  67. }   

输出结果为:

  1. 131130  
  2. ttitfly   
  3. 24  
  4. ttitfly   
  5. 24  
  6. 25  
  7. test update  

B:BTree方式存储:

java 代码
  1. package ttitfly.jdbm;   
  2.   
  3. import jdbm.RecordManager;   
  4. import jdbm.RecordManagerFactory;   
  5. import jdbm.btree.BTree;   
  6. import jdbm.helper.StringComparator;   
  7. import jdbm.helper.Tuple;   
  8. import jdbm.helper.TupleBrowser;   
  9.   
  10. public class TestBTree {   
  11.   
  12.     public static void main(String[] args){   
  13.         try{   
  14.             //创建RecordManager实例对象   
  15.             RecordManager recman = RecordManagerFactory.createRecordManager("test" );   
  16.             //构建一个BTree对象   
  17.             BTree bTree = BTree.createInstance(recman,new StringComparator());   
  18.             System.out.println(bTree.getRecid());   
  19.             String key = "ttitfly";   
  20.             String value = "true";   
  21.             boolean replace = true;   
  22.                
  23.             //insert插入   
  24.             bTree.insert(key, value, replace);   
  25.                
  26.             //给该BTree对象起个别名   
  27.             recman.setNamedObject("bTreeName",bTree.getRecid());    
  28.             //通过该别名获得到该BTree的id值   
  29.             long bTreeId = recman.getNamedObject("bTreeName");   
  30.             System.out.println(bTreeId);   
  31.                
  32.             //通过BTree的id值,获取指定的BTree对象   
  33.             BTree bTree1 = BTree.load(recman, bTree.getRecid());   
  34.             //insert   
  35.             bTree1.insert("testkey""testvalue", replace);   
  36.                
  37.             //查找   
  38.             String strValue = (String)bTree.find("ttitfly");   
  39.             System.out.println(strValue);   
  40.                
  41.             //查找出该BTree树里的所有的key,value值   
  42.             Tuple tuple=new Tuple();    
  43.             TupleBrowser  browser = bTree.browse();   
  44.             while ( browser.getNext( tuple ) ) {   
  45.                 System.out.println( tuple.getKey()+" "+tuple.getValue() );   
  46.             }   
  47.         }catch(Exception e){   
  48.             e.printStackTrace();   
  49.         }   
  50.     }   
  51. }   
  52.   
  53.   
  54.   
  55. 输出结果为:   
  56. 131150  
  57. 131150  
  58. true  
  59. testkey testvalue   
  60. ttitfly true  

 

分享到:
评论

相关推荐

    apacheds-jdbm-1.5.4.jar.zip

    开发者或者系统管理员可以通过将这个JAR文件添加到他们的应用或服务器类路径中,来启用或升级ApacheDS的JDBM存储功能。 依赖包 在部署或使用"apacheds-jdbm-1.5.4.jar"时,还需要注意其他依赖的库。通常,一个JAR...

    activemq-store-jdbm-2.1.jar.zip

    压缩包内的"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.zip` 文件是ApacheDS项目中使用JDBM存储引擎的一个组件,版本号为1.5.7。这个JAR文件包含实现ApacheDS和JDBM集成所需的所有代码,对于构建一个基于LDAP的服务,尤其是在需要高效持久化存储...

    activemq-store-jdbm-1.3.jar.zip

    在实际使用中,配置ActiveMQ使用JDBM存储通常涉及修改ActiveMQ的配置文件(如activemq.xml),指定store类型的为JDBM,并设置相关的参数,如数据文件的位置、缓存大小等。这有助于优化存储性能,满足不同场景下的...

    activemq-store-jdbm-1.2.jar.zip

    ActiveMQ Store JDBM 1.2 是一个专门为 Apache ActiveMQ 集成设计的持久化存储解决方案,它利用 JDBM(Java Database Minimal)库来提供高效、可靠的存储服务。在这个版本中,我们主要关注的是 activemq-store-jdbm-...

    activemq-store-jdbm-1.4.jar.zip

    1. 配置ActiveMQ的配置文件(如activemq.xml),指定使用JDBM存储引擎。 2. 定义数据存储目录,确保JDBM能够正确地创建和访问数据库文件。 3. 调整JDBM的相关参数,如缓存大小、事务超时等,以适应特定的系统需求和...

    activemq-store-jdbm-2.0.jar.zip

    ActiveMQ Store JDBM 2.0 是一个专门为 Apache ActiveMQ 开发的持久化存储解决方案,它基于 JDBM 库,用于在Java应用程序中实现高效的数据存储。在本文中,我们将深入探讨 ActiveMQ Store JDBM 2.0 的核心概念、功能...

    磁盘的KV存储 JDBM2.7z

    《磁盘的KV存储:深度解析JDBM2》 在计算机科学中,键值对(Key-Value,简称KV)存储是一种常见的数据存储模型,它以键为索引,以值为数据,提供快速的查找和访问。JDBM2是其中的一款开源实现,专为磁盘上的KV存储...

    磁盘的KV存储 JDBM2

    **磁盘的KV存储 JDBM2** JDBM2是一个开源的键值对存储引擎,主要用于在磁盘上持久化数据。它提供了一个简单的Java API,允许开发者以键值对的形式快速存取大量数据。在Java应用中,JDBM2常用于数据库缓存、日志记录...

    java资源磁盘的KV存储JDBM2java资源磁盘的KV存储JDBM2

    java资源磁盘的KV存储 JDBM2java资源磁盘的KV存储 JDBM2提取方式是百度网盘分享地址

    java源码:磁盘的KV存储 JDBM2.rar

    Java源码:磁盘的KV存储 JDBM2是一个经典的键值对(Key-Value)持久化存储实现,主要用于在磁盘上存储大量数据。JDBM2是JDBM项目的一个版本,它提供了一个简单易用的API,用于在Java应用程序中实现高效的本地数据库...

    基于Java的磁盘的KV存储 JDBM2.zip

    JDBM2是一个开源的、基于Java实现的磁盘KV存储系统,它提供了一种在Java应用程序中实现数据库功能的方式,而无需依赖外部数据库引擎。JDBM2的设计目标是简单易用、性能高效,以及支持事务处理。 JDBM2的核心特性...

    基于java的磁盘的KV存储 JDBM2.zip

    JDBM2是一个基于Java的磁盘键值(KV)存储库,它提供了高效、可靠的持久化数据存储解决方案。JDBM2的设计目标是为Java应用程序提供快速、易用的数据库存储,适合那些对内存占用和性能有高要求的场景。 1. **键值...

    基于Java的源码-磁盘的KV存储 JDBM2.zip

    《基于Java的磁盘KV存储:JDBM2深度解析》 在当今的软件开发中,数据存储是不可或缺的一部分,而键值对(Key-Value)存储作为一种简单且高效的存储模型,广泛应用于缓存、日志记录、配置管理等多个场景。Java作为...

    JDBM3, 嵌入式 key-value Java数据库.zip

    JDBM3, 嵌入式 key-value Java数据库 注意:这个项目处于维护模式,我将精力转向 JDBM4,...JDBM提供由磁盘存储备份的TreeMap,HashMap和其他集合。 现在你可以处理数十亿项而不用耗尽内存。 JDBM可能是最快和simpliest

    基于java的开发源码-磁盘的KV存储 JDBM2.zip

    JDBM2是Java实现的一个高效、可扩展的键值(Key-Value)存储系统,它允许开发者将数据以键值对的形式持久化到磁盘上。JDBM2的设计目标是提供接近内存的读写速度,同时保持数据在磁盘上的持久性,使得它成为数据库...

    基于Java的实例源码-磁盘的KV存储 JDBM2.zip

    在这个实例源码"基于Java的实例源码-磁盘的KV存储 JDBM2.zip"中,我们探讨的是一个关键的计算机科学概念——键值对(Key-Value)存储,以及它在磁盘上的实现。JDBM2是一个开源的Java库,专门用于实现持久化的键值对...

    jdbm.rar_nms

    JDBM是一个开源的Java持久化存储库,它提供了高性能的键值对存储功能,常用于数据库和缓存系统。NMS(Network Management System)在上下文中可能指的是JDBM的一个特定模块或应用,用于管理和监控JDBM数据库的网络...

    activemq-store-jdbm-1.5.jar.zip

    标题中的"activemq-store-jdbm-1.5.jar.zip"是一个压缩文件,其中包含的是ActiveMQ存储组件JDBM的1.5版本。ActiveMQ是Apache软件基金会的一个开源项目,它是一款功能强大的消息代理,实现了Java消息服务(JMS)规范...

    磁盘的KV存储 JDBM2源码

    《磁盘KV存储:JDBM2源码解析》 在IT行业中,数据存储是至关重要的环节,尤其是在大数据时代,高效、可靠的键值对(Key-Value)存储系统更是受到广泛应用。JDBM2,作为一个基于Java实现的磁盘KV存储引擎,以其简单...

Global site tag (gtag.js) - Google Analytics