最近有个项目要用到高性能数据库,数据量不大但读写统计非常频繁,所以优先考虑内存数据库。找了找发现一个叫H2的数据库,据说性能不错,拿来试验一下。
硬件环境:Inter E8400 @ 3.0G,4G内存
软件环境:Windows 7 32bit,H2 1.3.167,JDK 1.6
开发时非常简单,只有一个1.2M的jar文件,引入项目就可以了。
测试代码:
- import java.sql.*;
- import java.util.*;
- public class H2Test {
- public static void main(String[] args) throws Exception {
- //以嵌入式内存模式工作,建个简单的表
- Connection conn = DriverManager.getConnection("jdbc:h2:mem:test");
- PreparedStatement stmt = conn.prepareStatement("CREATE TABLE cc (GUID varchar(40) PRIMARY KEY,Data int,AddTime datetime)");
- stmt.execute();
- Random rand = new Random();
- //精度要求不高,就用这个计时吧
- long start = System.currentTimeMillis();
- stmt = conn.prepareStatement("INSERT INTO cc VALUES (RANDOM_UUID(), ?, NOW())");
- for(int i = 0;i < 100000;++i){
- stmt.setInt(1, rand.nextInt());
- stmt.execute();
- }
- long duration = System.currentTimeMillis() - start;
- conn.close();
- System.out.println("Finished in " + duration + " ms");
- }
- }
运行一下,单线程插入10万条数据,只用时1827ms,性能确实惊人,之前对比过MySQL的Memory引擎,同样的表结构,记得插入10万条记录大约要8秒。
PS:另外测试了一下5个线程并发总共插入10万条记录,性能略有下降,2050ms。
PPS:如果不用内存模式,改用tcp模式,性能下降严重,10万次插入要将近7秒,不过和MySQL比仍有一点优势。
本文转自 BoyTNT 51CTO博客,原文链接:http://blog.51cto.com/boytnt/932237,如需转载请自行联系原作者