jdbm4也发布部分代码了, 从作者的描述来看, 作者在多线程方面不是很精通, 可能是作者自谦吧. 不知道什么时候可以看到他的jdbm4正式版本.
强烈推荐使用 jdbm3. 虽然还在alpha4, 不过已经很稳定了. 这些天在项目中使用, 达到了极好的性能, 非事务性写入, 在我的电脑上可以达到 每秒 13w条(每条记录 一个long, 二个int). 在写入时, cpu使用为50%. 用两个线程进行写入, 速度反而慢了. 据说在jdbm4会解决这个锁的问题. 让我们一起期待jdbm4.
Announcing JDBM4
jdbm3 github:
https://github.com/jankotek/JDBM3
maven引用:
<dependency>
<groupId>org.apache.jdbm</groupId>
<artifactId>jdbm</artifactId>
<version>3.0-alpha4</version>
</dependency>
转自:http://christmaslin.iteye.com/blog/1395651
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,提供更强的功能和性能优化。
分享到:
相关推荐
ApacheDS与JDBM简介 Apache Directory Server(简称ApacheDS)是一个开源的、高性能的、轻量级的LDAP( Lightweight Directory Access Protocol)服务器。它由Apache软件基金会开发,旨在提供一个可扩展且易于管理...
ApacheDS与JDBM简介 Apache Directory Server(简称ApacheDS)是一个开源的、高性能的、轻量级的LDAP( Lightweight Directory Access Protocol)服务器,由Apache软件基金会开发并维护。它提供了一个灵活且可扩展...
标题中的"activemq-store-jdbm-2.1.jar.zip"是一个压缩文件,其中包含的是ActiveMQ存储组件JDBM的2.1版本。ActiveMQ是Apache软件基金会开发的一个开源消息代理,它实现了Java消息服务(JMS)规范,用于在分布式系统...
JDBM3, 嵌入式 key-value Java数据库 注意:这个项目处于维护模式,我将精力转向 JDBM4,这应该提供更好的并发可以伸缩性。JDBM提供由磁盘存储备份的TreeMap,HashMap和其他集合。 现在你可以处理数十亿项而不用耗尽...
标签:apollo-jdbm2-1.0-beta4.jar,apollo,jdbm2,1.0,beta4,jar包下载,依赖包
JDBM是一个开源的Java持久化存储库,它提供了高性能的键值对存储功能,常用于数据库和缓存系统。NMS(Network Management System)在上下文中可能指的是JDBM的一个特定模块或应用,用于管理和监控JDBM数据库的网络...
《磁盘的KV存储:深度解析JDBM2》 在计算机科学中,键值对(Key-Value,简称KV)存储是一种常见的数据存储模型,它以键为索引,以值为数据,提供快速的查找和访问。JDBM2是其中的一款开源实现,专为磁盘上的KV存储...
**磁盘的KV存储 JDBM2** JDBM2是一个开源的键值对存储引擎,主要用于在磁盘上持久化数据。它提供了一个简单的Java API,允许开发者以键值对的形式快速存取大量数据。在Java应用中,JDBM2常用于数据库缓存、日志记录...
JDBM2是一个开源的、基于Java实现的磁盘KV存储系统,它提供了一种在Java应用程序中实现数据库功能的方式,而无需依赖外部数据库引擎。JDBM2的设计目标是简单易用、性能高效,以及支持事务处理。 JDBM2的核心特性...
JDBM2是Java实现的一个高效、可扩展的键值(Key-Value)存储系统,它允许开发者将数据以键值对的形式持久化到磁盘上。JDBM2的设计目标是提供接近内存的读写速度,同时保持数据在磁盘上的持久性,使得它成为数据库...
《基于Java的磁盘KV存储:JDBM2深度解析》 在当今的软件开发中,数据存储是不可或缺的一部分,而键值对(Key-Value)存储作为一种简单且高效的存储模型,广泛应用于缓存、日志记录、配置管理等多个场景。Java作为...
JDBM2是一个基于Java的磁盘键值(KV)存储库,它提供了高效、可靠的持久化数据存储解决方案。JDBM2的设计目标是为Java应用程序提供快速、易用的数据库存储,适合那些对内存占用和性能有高要求的场景。 1. **键值...
Java源码:磁盘的KV存储 JDBM2是一个经典的键值对(Key-Value)持久化存储实现,主要用于在磁盘上存储大量数据。JDBM2是JDBM项目的一个版本,它提供了一个简单易用的API,用于在Java应用程序中实现高效的本地数据库...
《ActiveMQ Store JDBM 2.0:深入解析与应用》 ActiveMQ Store JDBM 2.0 是一个专门为 Apache ActiveMQ 开发的持久化存储解决方案,它基于 JDBM 库,用于在Java应用程序中实现高效的数据存储。在本文中,我们将深入...
《ActiveMQ Store JDBM 1.4:深入解析与应用》 ActiveMQ Store JDBM 1.4 是一个专门为Apache ActiveMQ设计的持久化存储解决方案,它使用JDBM作为后端数据库来存储消息数据。这个jar.zip包包含了核心的activemq-...
《ActiveMQ Store JDBM 1.3:深入解析与应用》 ActiveMQ Store JDBM 1.3 是一个专门为Apache ActiveMQ设计的持久化存储解决方案,它使用JDBM(Java Database Minimal)作为底层数据库引擎。在这个压缩包文件...
《ActiveMQ Store JDBM 1.2:深入解析与应用》 ActiveMQ Store JDBM 1.2 是一个专门为 Apache ActiveMQ 集成设计的持久化存储解决方案,它利用 JDBM(Java Database Minimal)库来提供高效、可靠的存储服务。在这个...
在这个实例源码"基于Java的实例源码-磁盘的KV存储 JDBM2.zip"中,我们探讨的是一个关键的计算机科学概念——键值对(Key-Value)存储,以及它在磁盘上的实现。JDBM2是一个开源的Java库,专门用于实现持久化的键值对...
标题中的"activemq-store-jdbm-1.5.jar.zip"是一个压缩文件,其中包含的是ActiveMQ存储组件JDBM的1.5版本。ActiveMQ是Apache软件基金会的一个开源项目,它是一款功能强大的消息代理,实现了Java消息服务(JMS)规范...
标题中的"jdbm.zip_Windows编程_includeqm4_twohw9"表明这是一个关于Windows编程的项目,可能包含了一些特定的任务或作业(twohw9),并且使用了includeqm4这一编程工具或库。从描述中我们可以了解到,这个项目涉及...