测试一下H2数据库的性能

简介:

最近有个项目要用到高性能数据库,数据量不大但读写统计非常频繁,所以优先考虑内存数据库。找了找发现一个叫H2的数据库,据说性能不错,拿来试验一下。

硬件环境:Inter E8400 @ 3.0G,4G内存
软件环境:Windows 7 32bit,H2 1.3.167,JDK 1.6

开发时非常简单,只有一个1.2M的jar文件,引入项目就可以了。

测试代码:

 
  1. import java.sql.*; 
  2. import java.util.*; 
  3.  
  4. public class H2Test { 
  5.  
  6.     public static void main(String[] args) throws Exception { 
  7.         //以嵌入式内存模式工作,建个简单的表 
  8.         Connection conn = DriverManager.getConnection("jdbc:h2:mem:test"); 
  9.         PreparedStatement stmt = conn.prepareStatement("CREATE TABLE cc (GUID varchar(40) PRIMARY KEY,Data int,AddTime datetime)"); 
  10.         stmt.execute(); 
  11.         Random rand = new Random(); 
  12.          
  13.         //精度要求不高,就用这个计时吧 
  14.         long start = System.currentTimeMillis(); 
  15.         stmt = conn.prepareStatement("INSERT INTO cc VALUES (RANDOM_UUID(), ?, NOW())"); 
  16.         for(int i = 0;i < 100000;++i){ 
  17.             stmt.setInt(1, rand.nextInt()); 
  18.             stmt.execute(); 
  19.         } 
  20.         long duration = System.currentTimeMillis() - start; 
  21.         conn.close(); 
  22.          
  23.         System.out.println("Finished in " + duration + " ms"); 
  24.     } 

运行一下,单线程插入10万条数据,只用时1827ms,性能确实惊人,之前对比过MySQL的Memory引擎,同样的表结构,记得插入10万条记录大约要8秒。

PS:另外测试了一下5个线程并发总共插入10万条记录,性能略有下降,2050ms。

PPS:如果不用内存模式,改用tcp模式,性能下降严重,10万次插入要将近7秒,不过和MySQL比仍有一点优势。

 




     本文转自 BoyTNT 51CTO博客,原文链接:http://blog.51cto.com/boytnt/932237,如需转载请自行联系原作者


相关文章
|
4天前
|
存储 NoSQL Oracle
数据库在各种工作负载下的性能表现
【8月更文挑战第15天】数据库在各种工作负载下的性能表现
14 4
|
3天前
|
SQL 缓存 数据库连接
拯救php性能的神器webman-数据库
Webman 框架与这些最佳数据库管理实践的结合,可为应用程序提供快速响应的用户体验,高吞吐量,提升应用程序的整体性能表现。在对数据库交互进行设计和开发时,持续关注性能指标和优化,确保数据库层面不会成为应用程序的瓶颈,这样便能充分利用 Webman 来提升 PHP 应用的性能。
14 4
|
8天前
|
SQL 存储 关系型数据库
"MySQL增列必锁表?揭秘InnoDB在线DDL,让你的数据库操作飞一般,性能无忧!"
【8月更文挑战第11天】在数据库领域,MySQL凭借其稳定高效的表现深受开发者喜爱。对于是否会在给数据表添加列时锁表的问题,MySQL的行为受版本、存储引擎等因素影响。从5.6版起,InnoDB支持在线DDL,可在改动表结构时保持表的可访问性,避免长时间锁表。而MyISAM等则需锁表完成操作。例如,在使用InnoDB的表上运行`ALTER TABLE users ADD COLUMN email VARCHAR(255);`时,通常不会完全锁表。虽然在线DDL提高了灵活性,但复杂操作或大表变更仍可能暂时影响性能。因此,进行结构变更前应评估其影响并择机执行。
29 6
|
4天前
|
存储 监控 测试技术
如何评估数据库性能?
【8月更文挑战第15天】如何评估数据库性能?
8 1
|
5天前
|
缓存 NoSQL Redis
一天五道Java面试题----第九天(简述MySQL中索引类型对数据库的性能的影响--------->缓存雪崩、缓存穿透、缓存击穿)
这篇文章是关于Java面试中可能会遇到的五个问题,包括MySQL索引类型及其对数据库性能的影响、Redis的RDB和AOF持久化机制、Redis的过期键删除策略、Redis的单线程模型为何高效,以及缓存雪崩、缓存穿透和缓存击穿的概念及其解决方案。
|
7天前
|
存储 缓存 运维
优化高并发环境下的数据库查询性能:实战经验与技巧
在高并发环境下,数据库性能往往成为系统瓶颈。本文将深入探讨在高并发场景下优化数据库查询性能的策略与实践,包括索引优化、查询优化、数据库架构设计以及缓存机制的应用。通过对具体案例的分析,读者将能够掌握提升数据库性能的关键技术,从而在面对大规模用户请求时提高系统的响应速度和稳定性。
|
10天前
|
监控 Oracle 关系型数据库
"深度剖析:Oracle SGA大小调整策略——从组件解析到动态优化,打造高效数据库性能"
【8月更文挑战第9天】在Oracle数据库性能优化中,系统全局区(SGA)的大小调整至关重要。SGA作为一组共享内存区域,直接影响数据库处理能力和响应速度。本文通过问答形式介绍SGA调整策略:包括SGA的组成(如数据缓冲区、共享池等),如何根据负载与物理内存确定初始大小,手动调整SGA的方法(如使用`ALTER SYSTEM`命令),以及利用自动内存管理(AMM)特性实现智能调整。调整过程中需注意监控与测试,确保稳定性和性能。
21 2
|
13天前
|
监控 Java 测试技术
实战派必看!Python性能测试中,JMeter与Locust如何助力性能调优
【8月更文挑战第6天】性能优化是软件开发的关键。本文介绍JMeter与Locust两款流行性能测试工具,演示如何用于Python应用的性能调优。JMeter可模拟大量用户并发访问,支持多种协议;Locust用Python编写,易于定制用户行为并模拟高并发。根据场景选择合适工具,确保应用在高负载下的稳定运行。
36 4
|
13天前
|
测试技术 数据库 UED
Python 性能测试进阶之路:JMeter 与 Locust 的强强联合,解锁性能极限
【8月更文挑战第6天】在数字化时代,确保软件在高并发下的稳定性至关重要。Python 提供了强大的性能测试工具,如 JMeter 和 Locust。JMeter 可配置复杂请求场景,而 Locust 则以 Python 脚本灵活模拟真实用户行为。两者结合,可全面评估系统性能。例如,对电商网站进行测试时,JMeter 模拟登录请求,Locust 定义浏览和购物行为,共同揭示系统瓶颈并指导优化,从而保证稳定高效的用户体验。
27 1
|
13天前
|
关系型数据库 MySQL OLTP
性能工具之 MySQL OLTP Sysbench BenchMark 测试示例
【8月更文挑战第6天】使用 pt-query-digest 工具分析 MySQL 慢日志性能工具之 MySQL OLTP Sysbench BenchMark 测试示例
52 0
性能工具之 MySQL OLTP Sysbench BenchMark 测试示例