最近需要一个大Map保存大量KV,找了一下最新的JDBM4(已经重命名为MapDB)来测了一下性能,性能不错~
1亿条记录测试:
5千万读,5千万写:103417 ms
1亿条记录读:1ms<
十万条记录平均处理时间: 1295 ns
1亿条记录+(测试过3亿条)
时间成线性增长
import java.io.File; import java.util.Map; import org.mapdb.DB; import org.mapdb.DBMaker; public class StatMapDB { private static final String MAP_NAME = "STAT_MAP"; private String filePath; DB db = null; Map<Long,Long> statMap = null; DBMod type = null; static enum DBMod { READ, WRITE } public StatMapDB(String filePath,DBMod type) { this.filePath = filePath; this.type = type; init(); } private void init() { File file = new File(filePath); db = DBMaker .newFileDB(file) .transactionDisable() .asyncFlushDelay(100) .make(); if(type.equals(DBMod.WRITE)) { if(file.exists()) { file.delete(); new File(filePath + ".p").delete(); } statMap = db.createTreeMap(MAP_NAME).make(); } else{ statMap = db.getTreeMap(MAP_NAME); } } public Map<Long,Long> getStatMapDB() { return this.statMap; } public void close() { if(db!=null){ db.close(); db = null; } } }
import java.util.Map; import java.util.Map.Entry; public class TestApp { private static final String PATH = "test"; //private static long TOTAL = 10000; private static long TOTAL = 100000000; private static void write() { StatMapDB db = new StatMapDB(PATH, StatMapDB.DBMod.WRITE); Map<Long,Long> map = db.getStatMapDB(); long sum = 0; long count = 0; long startTime = System.currentTimeMillis(); for (long i = -1 * TOTAL / 2; i < TOTAL / 2; i++) { Long key = Math.abs(i); long oneStartTime = System.nanoTime(); if (!map.containsKey(key)) { map.put(key, key); } else { map.put(key, map.get(key) + key); } if (i % 100000 == 0) { sum += (System.nanoTime() - oneStartTime); count++; } } System.out.println("avg:" + sum / count + " ns"); System.out.println("write 10 million times:" + (System.currentTimeMillis() - startTime) + " ms"); db.close(); } private static void read() { StatMapDB db = new StatMapDB(PATH, StatMapDB.DBMod.READ); Map<Long,Long> map = db.getStatMapDB(); long startTime = System.currentTimeMillis(); for (Entry<Long, Long> entry : map.entrySet()) { Long key = entry.getKey(); Long value = entry.getValue(); } System.out.println("read 10 million times:" + (System.currentTimeMillis() - startTime) + " ms"); db.close(); } public static void main(String[] args) { write(); read(); } }
相关推荐
ApacheDS与JDBM简介 Apache Directory Server(简称ApacheDS)是一个开源的、高性能的、轻量级...在实际使用中,确保正确配置和管理依赖关系,以及理解如何利用JDBM提供的性能优势,是成功部署和操作ApacheDS的关键。
标签:apollo-jdbm2-1.0-beta4.jar,apollo,jdbm2,1.0,beta4,jar包下载,依赖包
3. **测试和监控**:在实际应用中,需要对JDBM2进行充分的性能测试,并监控其运行状态,以便及时发现和解决问题。 4. **版本兼容性**:随着JDBM2的更新,可能会引入新的功能和改进,因此在升级版本时需要注意兼容性...
ApacheDS与JDBM简介 Apache Directory Server(简称ApacheDS)是一个开源的、高性能的、轻量级的LDAP( Lightweight Directory Access Protocol)服务器,由Apache软件基金会开发并维护。它提供了一个灵活且可扩展...
JDBM3, 嵌入式 key-value Java数据库 注意:这个项目处于维护模式,我将精力转向 JDBM4,这应该提供更好的并发可以伸缩性。JDBM提供由磁盘存储备份的TreeMap,HashMap和其他集合。 现在你可以处理数十亿项而不用耗尽...
JDBM,全称为Java Database Minimal,是一个开源的、高性能的键值存储库,常被用作简单的持久化解决方案。 ActiveMQ的核心功能之一是消息存储,这使得它能够保存消息直到它们被消费者处理或者超时。"store"在这里指...
4. **可扩展性**:JDBM的设计允许用户根据需求进行扩展,例如,通过实现自定义的序列化器来处理特定类型的数据。 5. **备份与恢复**:JDBM提供了备份和恢复功能,可以帮助在系统崩溃或硬件故障时恢复数据。 6. **...
JDBM2是一个基于Java的高性能KV存储系统,它实现了持久化存储,支持事务处理,并且具有较高的读写速度。JDBM2的设计目标是在磁盘上实现接近内存级别的性能,这得益于其优化的数据结构和算法。它常被用于日志记录、...
4. 测试存储和恢复消息的功能,确保在不同场景下都能正常工作。 总结起来,ActiveMQ Store JDBM 1.4是一个用于ActiveMQ的消息持久化解决方案,它借助JDBM数据库实现高效、可靠的消息存储。了解并掌握其工作原理和...
4. **序列化支持**:JDBM2支持Java对象的直接存储和检索,通过自动序列化和反序列化简化了数据管理。 5. **内存映射**:JDBM2使用内存映射文件(Memory-Mapped Files),将文件内容映射到进程的虚拟内存空间,提高...
4. **事务支持**:JDBM2提供了ACID(原子性、一致性、隔离性和持久性)事务支持,这是数据库管理系统中的核心特性,保证了数据操作的可靠性和一致性。事务对于处理并发操作和错误恢复至关重要。 5. **API设计**:...
JDBM2在设计时考虑了性能优化,如缓存机制、预读取策略等,以减少磁盘I/O操作,提高整体性能。此外,JDBM2还支持批量操作,以减少事务开销。 8. **扩展性** JDBM2允许用户自定义序列化器和比较器,以适应各种类型...
JDBM 是一个纯 Java 实现的键值对数据库,它提供了快速的读写性能,同时具备事务处理能力,非常适合于消息队列这种需要频繁读写操作的场景。 JDBM 2.0 版本相较于早期版本,主要提升了性能和稳定性,并且增加了对大...
4. **内存映射**:JDBM2使用内存映射文件(Memory-Mapped Files),将数据直接映射到进程的虚拟内存中,从而提高了访问速度。 5. **兼容性**:JDBM2兼容Berkeley DB Java Edition(JE)的API,使得迁移数据或代码变...
JDBM2是一款用纯Java实现的高性能、持久化的键值对存储系统,它允许开发者将数据存储在硬盘上,同时提供类似于内存中的操作体验。JDBM2的设计目标是提供快速、可靠的磁盘存储,同时保持API简洁易用,使其成为Java...
标签:apollo-jdbm2-1.0-beta4-scaladoc.jar,apollo,jdbm2,1.0,beta4,scaladoc,jar包下载,依赖包
标签:apollo-jdbm2-1.0-beta4-sources.jar,apollo,jdbm2,1.0,beta4,sources,jar包下载,依赖包
标签:apollo-jdbm2-1.0-beta4-javadoc.jar,apollo,jdbm2,1.0,beta4,javadoc,jar包下载,依赖包
JDBM2库的设计考虑了性能和效率,它使用B-Tree(一种自平衡的搜索树)数据结构来组织键值对,以实现快速的查找和插入操作。B-Tree的特性使得数据在磁盘上的分布更均匀,减少了磁盘I/O操作,从而提高了性能。此外,...
这有助于优化存储性能,满足不同场景下的需求。 总结起来,"activemq-store-jdbm-1.3.jar.zip"是一个针对Apache ActiveMQ的持久化存储解决方案,利用JDBM实现高效的消息存储。开发者可以借助这个压缩包中的组件,...