`
ChristmasLin
  • 浏览: 42096 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

dbm之jdbm

    博客分类:
  • dbm
 
阅读更多

 

jdbm的架构比较清晰,分为2层,RecordManager和BTree/HTree。

 

底层的ReocrdManager封装了IO,事务,提供record的put_record,update_record,get_record,remove_record,commit_record,rollback_record等操作。

 

BTree和HTree相当于kv的索引层。提供通过key去定位对应的record的功能。

 

RecordManager也相当于一个kv store,不过它的key固定是一个long值,在put_record是由RecordManager生成。update/get/romve _record都是通过该key去完成。这个key值包含了value在文件中的位置信息,这种处理方

式简化了如何在RecordManager对Record索引的处理。

 

RecordManager大体上的实现也是把file 划分固定大小的page来管理。事务是通过WAL来实现。在这里不对RecordManage的实现进行分析。

 

 

HTree

jdbm提供通过hash的方式索引kv。htree的子结点要么是hashBucket(hb),要么是hashDirectory(hd).hb是存放element的容器,hd则所存放hb或下一层的hd。hb如果是leaf-node则没有元素数目上限,否则最多存放8个element。hd和hb作为一个record保存在RecordManager里。

 

htree的最大层数是3(从0开始),共4层。每个节点最多有2^8=256个子节点。初始化时root是一个hd,指向256个hb,当某个hb的element数目达到上限时,用hd代替hb,把hb的element迁移到hd所指向的hb上。

在定位一个key的位置时,先计算32bit的hash value.因为子节点数是256,所以每8bit用于树的一层定位。写进disk时,每个hd或hb都是一个record,hd只包含所引用的hd或hb的record_id,每次更新的代价比较小。但是对于leaf-node的hb,如果element数目过多,那么每次更新的代价非常大,全部重写整个hb(包括里面的所有的element)。

 

 

BTree

BTree通过b+树索引kv。每个节点是BPage,作为1个record保存。当BPage 分裂合并,增删element时重写受影响的Bpage。

 

总结:

提到的3个dbm,w3c-dbm,sdbm,jdbm都是相对简单的实现,对并发的处理也比较简单(不支持并发或全局锁)。bdb,bdb-je,Kyoto Cabinet,Tokyo Cabinet都是更强大的dbm实现。此外:jdbm还有2个分支,jdbm2和jdbm3,提供更强的功能和性能优化。

 

0
0
分享到:
评论

相关推荐

    apacheds-jdbm-1.5.7.jar.zip

    ApacheDS与JDBM简介 Apache Directory Server(简称ApacheDS)是一个开源的、高性能的、轻量级的LDAP( Lightweight Directory Access Protocol)服务器。它由Apache软件基金会开发,旨在提供一个可扩展且易于管理...

    apacheds-jdbm-1.5.4.jar.zip

    ApacheDS与JDBM简介 Apache Directory Server(简称ApacheDS)是一个开源的、高性能的、轻量级的LDAP( Lightweight Directory Access Protocol)服务器,由Apache软件基金会开发并维护。它提供了一个灵活且可扩展...

    activemq-store-jdbm-2.1.jar.zip

    ActiveMQ的核心功能之一是消息存储,这使得它能够保存消息直到它们被消费者处理或者超时。"store"在这里指的是ActiveMQ的消息存储机制。JDBM作为存储后端,为ActiveMQ提供了基于文件系统的数据存储能力,允许快速...

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

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

    apollo-jdbm2-1.0-beta4.jar

    标签:apollo-jdbm2-1.0-beta4.jar,apollo,jdbm2,1.0,beta4,jar包下载,依赖包

    jdbm.rar_nms

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

    磁盘的KV存储 JDBM2.7z

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

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

    import org.jdbm.dbm.*; // 创建数据库实例 DB db = DBMaker.newFileDB(new File("mydb")).make(); // 存储键值对 db.put("key1", "value1"); db.put("key2", "value2"); // 读取键值对 String value1 = (String)...

    磁盘的KV存储 JDBM2

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

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

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

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

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

    activemq-store-jdbm-2.0.jar.zip

    《ActiveMQ Store JDBM 2.0:深入解析与应用》 ActiveMQ Store JDBM 2.0 是一个专门为 Apache ActiveMQ 开发的持久化存储解决方案,它基于 JDBM 库,用于在Java应用程序中实现高效的数据存储。在本文中,我们将深入...

    activemq-store-jdbm-1.4.jar.zip

    《ActiveMQ Store JDBM 1.4:深入解析与应用》 ActiveMQ Store JDBM 1.4 是一个专门为Apache ActiveMQ设计的持久化存储解决方案,它使用JDBM作为后端数据库来存储消息数据。这个jar.zip包包含了核心的activemq-...

    activemq-store-jdbm-1.3.jar.zip

    《ActiveMQ Store JDBM 1.3:深入解析与应用》 ActiveMQ Store JDBM 1.3 是一个专门为Apache ActiveMQ设计的持久化存储解决方案,它使用JDBM(Java Database Minimal)作为底层数据库引擎。在这个压缩包文件...

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

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

    activemq-store-jdbm-1.2.jar.zip

    《ActiveMQ Store JDBM 1.2:深入解析与应用》 ActiveMQ Store JDBM 1.2 是一个专门为 Apache ActiveMQ 集成设计的持久化存储解决方案,它利用 JDBM(Java Database Minimal)库来提供高效、可靠的存储服务。在这个...

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

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

    activemq-store-jdbm-1.5.jar.zip

    "store"在这里指的是ActiveMQ的消息存储部分,它是消息代理的核心组件之一。消息存储负责将接收到的消息保存到持久化介质上,以便在系统重启或故障后仍能恢复这些消息。ActiveMQ提供了多种存储选项,包括文件系统、...

    JAVA源码磁盘的KV存储JDBM2JAVA源码磁盘的KV存储JDBM2

    JAVA源码磁盘的KV存储JDBM2JAVA源码磁盘的KV存储JDBM2

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

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

Global site tag (gtag.js) - Google Analytics