去年10月份就下载了一个SimpleSQL数据库在硬盘上,一直没有好好去摆弄摆弄,昨晚看到它,就想测测它的性能,于是就动手写点简单程序测了一下,立此存照一下。
简单介绍一下SimpleSQL是何物。SimpleSQL(下面简称为SSQL)是一个JAVA开发的单文件关系数据库,可以嵌入使用,可以在内存中保持数据,也可以以C-S模式使用,还可以用作其他多个数据库的代理,这是SSQL比较有意思的特点。下面的图表示出了SSQL的几种工作方式:
从这些工作模式来看,SSQL与HSQL很象,但我感觉SSQL的语法、函数等更象Oracle,用这个数据库开发的应用,移到Orace上时迁移工作量可能会小一些。所以,在有些场合不妨可以试用一下这个数据库。下面是SSQL手册自己宣称的特性:
autocommit mode
multiversion concurrency control
transactional mode
deadlock detection
transactional integrity (unique constraints and references)
64-bit portable database file
theoretical limit of 8589934592 GB
subselects
distributed queries
outerjoins: standard SQL92 JOIN command, (+) outerjoin operator (与Oracle相似之处)
heterogeneous queries
data migration queries (比较独特的特点)
Web report formatting functions
它还支持诸如: CASE、DECODE等函数(学Oracle的 :-) )
其他详细的特性我就不罗列了,如果有兴趣大家可以自己找来玩玩。
下面简单讲一下昨晚我测试的结果。
我的测试案例设计是:
对一张表操作:
tbl_user
---------------------------------
id bigint
login_id varchar(20)
password varchar(50)
name varchar(20)
email varchar(200)
sign varchar(2000)
regtime timestamp
用一个SQL语句往表里插入1000X1000记录:
Insert into tbl_user
values( NEXTVAL('tbl_user'), 'test'|| CURRVAL('tbl_user'), '720123', '张三'|| CURRVAL('tbl_user'), CURRVAL('tbl_user') || '@yahoo.com', MD5('张三'|| CURRVAL('tbl_user')), NOW())
这个SQL语句中的NEXTVAL是Sequence函数,与Oracle的Sequence很类似,不同的只是这里的Sequence不需要手工建,只要我们有调用NEXTVAL('tbl_user'),就会自动生成一个名为“tbl_user”的sequence,用起来比Oracle方便一些。
用一个SQL语句从表里查询总记录数:
select count(id) as cnt from tbl_user
我的机器配置是:
DELL LATITUDE D610
CPU: 迅驰1.8G
内存: 512M
在NetBeans5.5 Beta版中编写程序并以Run模式运行程序:
测试结果如下:
插入操作: 191分钟
查询操作(三次): 100秒
94秒
87秒
从这个结果来看,我认为SSQL作为内嵌数据库发布一些DEMO应用或是用来作开发数据库,是能够胜任。
最后有一点比较遗憾的是SSQL的新版本移掉了其中一些作者认为不需要的特性(包括C-S工作方式、事务等),而这些特性可能是我们应用开发人員往往需要的,所以我们只能用它的早期版本。作者网站对移掉的一些特性声明如下:
为了下次不至于找不到这个数据库的早期版本,我把我下的1.2.3版放上来。