HSQLDB 的研究与性能测试(与Mysql对比) 1. HSQLDB 简介 HSQLDB 数据库是一款纯 Java 编写的免费数据库,许可是 BSD-style 的协议。相对其他数据库来说,其体积小,才 563kb 。仅一个 hsqldb.jar 文件就包括了数据库引擎,数据库驱动,还有其他用户界面操作
HSQLDB 的研究与性能测试(与Mysql对比)
1. HSQLDB 简介
HSQLDB 数据库是一款纯 Java 编写的免费数据库,许可是 BSD-style 的协议。相对其他数据库来说,其体积小,才 563kb 。仅一个 hsqldb.jar 文件就包括了数据库引擎,数据库驱动,还有其他用户界面操作等内容。在 Java 开源世界里, hsql 是极为受欢迎的(就 Java 本身来说), JBoss 应用程序服务器默认也提供了这个数据库引擎。由于其体积小的原因,又是纯 Java 设计,又支持 SQL99 , SQL2003 大部分的标准,所以也是作为商业应用程序展示的一种选择。
2. HSQLDB 的工作模式:
1) In-Process(Standalone) 模式
主要是在一个 JVM 中使用,不能通过网络来访问数据库,数据存储格式为文本文件。
2) Memory-Only 单机模式
主要是在一个 JVM 中使用,不能通过网络来访问数据库,只存储在内存中。
3) Memory-Only 网络模式(本机访问)
数据存储在内存中,支持本地访问和网络访问,可应用于多个 JVM 间进行数据交换。
4) Server 模式(本机访问)
类似我们常用的 Mysql 、 oracle 等数据库,支持本地访问和网络访问,数据存储格式为文本文件。
5) WebServer 模式
和 Server 运行模式基本一样,只是支持了 Http 等协议,主要用于防火墙,其余的和 Server 模式完全一致。
3. 测试的 SQL 语句:
6) CREATE
CREATE TABLE T0(NO INTEGER,a CHAR(20),b CHAR(20),c CHAR(20),d CHAR(20),e CHAR(20),f CHAR(20),g CHAR(20),h CHAR(20),i CHAR(20),j CHAR(20),k CHAR(20),l CHAR(20),m CHAR(20),n CHAR(20),o CHAR(20),p CHAR(20),q CHAR(20),r CHAR(20),s CHAR(20),t CHAR(20));
7) INSERT
INSERT INTO T0 VALUES (0,'00','01','02','03','04','05','06','07','08','09','010','011','012','013','014','015','016','017','018','019');
8) SELECT
select * from T0;
9) SELECT.all
select a,b,c,d,e from T0
10) SELECT.join
select tmp1.No no1,tmp2.NO no2 from T0 tmp1,T0 tmp2 where (tmp1.NO%5=0) and (tmp2.NO-tmp1.NO)=4;
4. 测试数据记录表:
字段个数
测试用例
测试次数(次)
In-Process(Standalone) 模式耗时( ms )
Memory-Only 单机模式耗时( ms )
Memory-Only 网络模式(本机访问)耗时( ms )
Memory-Only 网络模式(网络访问)耗时( ms )
Server 模式(本机访问)耗时( ms )
Server 模式(远程访问)耗时( ms )
Mysql (本机访问)耗时( ms )
Mysql (远程访问)耗时( ms )
21 个
CREATE
20 次
0
0
0
32
15
16
344
312
INSERT
10000 次
984
844
1688
7343
1875
7938
2281
8969
SELECT
5000 次
40531
40109
1156859
>20 分钟,实在等不下去了
1181094
>20 分钟,实在等不下去了
432563
782437
SELECT
1000 次
4234
4703
92031
667359
SELECT
100 次
468
469
9031
67328
11 个
CREATE
20 次
0
0
INSERT
10000 次
672
576
SELECT
5000 次
27641
28672
SELECT
1000 次
5 个
CREATE TABLE T0(NO INTEGER PRIMARY KEY,a CHAR(20),b CHAR(20),c CHAR(20),d CHAR(20),e CHAR(20));
20 次
0
0
0
312
INSERT INTO T0 VALUES (0,'00','01','02','03','04');
10000 次
375
406
1203
1985
select * from T0;
5000 次
21968
19860
select * from T0;
1000 次
25828
select * from T0;
100 次
512
2594
select a,b,c,d,e from T0
5000 次
19313
select a,b,c,d,e from T0
100 次
391
2266
select tmp1.No no1,tmp2.NO no2 from T0 tmp1,T0 tmp2 where (tmp1.NO%5=0) and (tmp2.NO-tmp1.NO)=4;
100 次
不支持 %
226047
select tmp1.No no1,tmp2.NO no2 from T0 tmp1 join T0 tmp2 on (tmp2.NO-tmp1.NO)=4;
1 次
32062
11219
select tmp1.No no1,tmp2.NO no2 from T0 tmp1 join T0 tmp2 on mod(tmp1.NO,5) = 0 and (tmp2.NO-tmp1.NO)=4 ;
1 次
6360
2078
select tmp1.No no1,tmp2.NO no2 from T0 tmp1 join T0 tmp2 on tmp1.NO>50 and (tmp2.NO-tmp1.NO)=4 ;
1 次
32063
36031
10000
select No from T0 where mod(NO,5) = 0 ;
100 次
1328
688
select No from T0 where NO>50 ;
100 次
250
1719
select No from T0 where NO>50 and NO
100 次
94
203
delete from T19 where no>=0 and no ( 为 NO 创建了索引)
10000 次
344
328
1063
1141
1547
delete from T19 where no>=0 and no (没有为 NO 创建了索引)
10000 次
2282
2125
3156
3484
2359
update T19 set a=123 where no>=0 and no (为 NO 创建了索引)
10000 次
1610
750
1515
3078
2218
update T19 set a=123 where no>=0 and no (没有为 NO 创建了索引)
10000 次
4297
2734
3656
5594
2547
21 个
CREATE
20 次
0
16
31
32
16
16
328
313
INSERT
500 次
125
78
172
421
141
734
156
453
SELECT
500 次
234
250
8078
17438
10078
18125
1078
3234
16 个
CREATE
20 次
15
0
16
31
31
16
312
344
INSERT
500 次
110
78
156
391
125
122
157
469
SELECT
500 次
218
219
5890
13250
6329
13422
859
2515
11 个
CREATE
20 次
16
0
16
15
0
16
312
328
INSERT
500 次
78
79
156
344
109
406
156
453
SELECT
500 次
172
203
3469
7391
1985
7438
610
1906
6 个
CREATE
20 次
0
0
15
15
0
16
312
313
INSERT
500 次
78
63
141
329
109
672
156
437
SELECT
500 次
141
156
1516
3968
969
3937
469
1407
从上表可见:
1) 支持远程访问时,执行 CREATE 、 INSERT 语句, HSQLDB 明显比 MYSQL 具有优势。
2) 支持远程访问时,执行 SELECT 查询语句, MYSQL 比 HSQLDB 具有优势。
3) “ Memory-Only 网络模式”和“ Server 模式”在效率上差别不明显。
4) “ In-Process(Standalone) 模式”和“ Memory-Only 单机模式” 在效率上差别不明显。
5) 只允许单机访问时, HSQLDB 明显比 MYSQL 具有明显的优势。(写速度 2 : 1 ,读速度 4 : 1 )
6) HSQLDB 对 JOIN 查询的效率显著不如 MYSQL
查看更多关于HSQLDB的研究与性能测试(与Mysql对比)的详细内容...