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

 

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<900;

100

94

 

 

 

 

 

203

 

 

delete from T19 where no>=0 and no<=0NO创建了索引)

10000

344

328

1063

 

1141

 

1547

 

 

delete from T19 where no>=0 and no<=0(没有为NO创建了索引)

10000

2282

2125

3156

 

3484

 

2359

 

 

update T19 set a=123 where no>=0 and no<=0(为NO创建了索引)

10000

1610

750

1515

 

3078

 

2218

 

 

update T19 set a=123 where no>=0 and no<=0(没有为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

 

你可能感兴趣的:(HSQLDB的研究与性能测试(与Mysql对比))