`
huangjun_mail
  • 浏览: 118761 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JDBM4(MapDB)性能测试

    博客分类:
  • Java
阅读更多

最近需要一个大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();
	}

}

 

分享到:
评论
2 楼 lintaozhou 2016-12-23  
这个file里存放是Map中的数据吗?
1 楼 在世界的中心呼喚愛 2014-07-31  
写入时间应该不准确

相关推荐

    apacheds-jdbm-1.5.7.jar.zip

    ApacheDS与JDBM简介 Apache Directory Server(简称ApacheDS)是一个开源的、高性能的、轻量级...在实际使用中,确保正确配置和管理依赖关系,以及理解如何利用JDBM提供的性能优势,是成功部署和操作ApacheDS的关键。

    apollo-jdbm2-1.0-beta4.jar

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

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

    3. **测试和监控**:在实际应用中,需要对JDBM2进行充分的性能测试,并监控其运行状态,以便及时发现和解决问题。 4. **版本兼容性**:随着JDBM2的更新,可能会引入新的功能和改进,因此在升级版本时需要注意兼容性...

    apacheds-jdbm-1.5.4.jar.zip

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

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

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

    activemq-store-jdbm-2.1.jar.zip

    JDBM,全称为Java Database Minimal,是一个开源的、高性能的键值存储库,常被用作简单的持久化解决方案。 ActiveMQ的核心功能之一是消息存储,这使得它能够保存消息直到它们被消费者处理或者超时。"store"在这里指...

    jdbm.rar_nms

    4. **可扩展性**:JDBM的设计允许用户根据需求进行扩展,例如,通过实现自定义的序列化器来处理特定类型的数据。 5. **备份与恢复**:JDBM提供了备份和恢复功能,可以帮助在系统崩溃或硬件故障时恢复数据。 6. **...

    磁盘的KV存储 JDBM2.7z

    JDBM2是一个基于Java的高性能KV存储系统,它实现了持久化存储,支持事务处理,并且具有较高的读写速度。JDBM2的设计目标是在磁盘上实现接近内存级别的性能,这得益于其优化的数据结构和算法。它常被用于日志记录、...

    activemq-store-jdbm-1.4.jar.zip

    4. 测试存储和恢复消息的功能,确保在不同场景下都能正常工作。 总结起来,ActiveMQ Store JDBM 1.4是一个用于ActiveMQ的消息持久化解决方案,它借助JDBM数据库实现高效、可靠的消息存储。了解并掌握其工作原理和...

    磁盘的KV存储 JDBM2

    4. **序列化支持**:JDBM2支持Java对象的直接存储和检索,通过自动序列化和反序列化简化了数据管理。 5. **内存映射**:JDBM2使用内存映射文件(Memory-Mapped Files),将文件内容映射到进程的虚拟内存空间,提高...

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

    4. **事务支持**:JDBM2提供了ACID(原子性、一致性、隔离性和持久性)事务支持,这是数据库管理系统中的核心特性,保证了数据操作的可靠性和一致性。事务对于处理并发操作和错误恢复至关重要。 5. **API设计**:...

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

    JDBM2在设计时考虑了性能优化,如缓存机制、预读取策略等,以减少磁盘I/O操作,提高整体性能。此外,JDBM2还支持批量操作,以减少事务开销。 8. **扩展性** JDBM2允许用户自定义序列化器和比较器,以适应各种类型...

    activemq-store-jdbm-2.0.jar.zip

    JDBM 是一个纯 Java 实现的键值对数据库,它提供了快速的读写性能,同时具备事务处理能力,非常适合于消息队列这种需要频繁读写操作的场景。 JDBM 2.0 版本相较于早期版本,主要提升了性能和稳定性,并且增加了对大...

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

    4. **内存映射**:JDBM2使用内存映射文件(Memory-Mapped Files),将数据直接映射到进程的虚拟内存中,从而提高了访问速度。 5. **兼容性**:JDBM2兼容Berkeley DB Java Edition(JE)的API,使得迁移数据或代码变...

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

    JDBM2是一款用纯Java实现的高性能、持久化的键值对存储系统,它允许开发者将数据存储在硬盘上,同时提供类似于内存中的操作体验。JDBM2的设计目标是提供快速、可靠的磁盘存储,同时保持API简洁易用,使其成为Java...

    apollo-jdbm2-1.0-beta4-scaladoc.jar

    标签: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,sources,jar包下载,依赖包

    apollo-jdbm2-1.0-beta4-javadoc.jar

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

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

    JDBM2库的设计考虑了性能和效率,它使用B-Tree(一种自平衡的搜索树)数据结构来组织键值对,以实现快速的查找和插入操作。B-Tree的特性使得数据在磁盘上的分布更均匀,减少了磁盘I/O操作,从而提高了性能。此外,...

    activemq-store-jdbm-1.3.jar.zip

    这有助于优化存储性能,满足不同场景下的需求。 总结起来,"activemq-store-jdbm-1.3.jar.zip"是一个针对Apache ActiveMQ的持久化存储解决方案,利用JDBM实现高效的消息存储。开发者可以借助这个压缩包中的组件,...

Global site tag (gtag.js) - Google Analytics