欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

HSQLDB的研究与性能测试(与Mysql对比)

程序员文章站 2022-06-08 11:36:12
...

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设计,又支持SQL99SQL2003大部分的标准,所以也是作为商业应用程序展示的一种选择。

2. HSQLDB的工作模式:

1) In-Process(Standalone)模式

主要是在一个JVM中使用,不能通过网络来访问数据库,数据存储格式为文本文件。

2) Memory-Only 单机模式

主要是在一个JVM中使用,不能通过网络来访问数据库,只存储在内存中。

3) Memory-Only 网络模式(本机访问)

数据存储在内存中,支持本地访问和网络访问,可应用于多个JVM间进行数据交换。

4) Server模式(本机访问)

类似我们常用的Mysqloracle等数据库,支持本地访问和网络访问,数据存储格式为文本文件。

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 noNO创建了索引)

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) 支持远程访问时,执行CREATEINSERT语句,HSQLDB明显比MYSQL具有优势。

2) 支持远程访问时,执行SELECT查询语句,MYSQLHSQLDB具有优势。

3) Memory-Only 网络模式”和“Server模式”在效率上差别不明显。

4) In-Process(Standalone)模式”和“Memory-Only 单机模式” 在效率上差别不明显。

5) 只允许单机访问时,HSQLDB明显比MYSQL具有明显的优势。(写速度21,读速度41

6) HSQLDBJOIN查询的效率显著不如MYSQL