沉浮于各种文件型数据库 hsqldb h2 仍是derbyITeyetengxun - 超凡娱乐

沉浮于各种文件型数据库 hsqldb h2 仍是derbyITeyetengxun

2019-02-02 08:16:38 | 作者: 昆杰 | 标签: 文件,数据库,数据 | 浏览: 7013

 

    通过几天的折腾总算仍是心碎了,前前后后为了这个数据库合计花费了约2周的时刻……
    体系选用的是经典技能结构 Spring 2.0.5 + Hibernate 3.2 + iBatis 2.2.0
    用于衔接文件型数据库的jdbc衔接东西是ExecuteQuery 3.1.5(以下简称为EQ)     数据库现在选用的是 hsqldb
测验环境下预备了一个巨细为33Mb的数据库命名为 test.script ,中心的是寄存首要数据的材料表,首要结构如下:

create table Member_info(
    id char(32), employee_id char(32), employee_name varchar(50), company_id char(32), company_name varchar(50), ... ,
user_def_txt0 varchar(50), user_def_txt1 varchar(50), ... , user_def_txt9 varchar(50),
    user_def_num0 number(8,2), user_def_num1 number(8,2), ... , user_def_num99 number(8,2)
)

好了,全部预备就绪,开端阐明一下为什么hsqldb和h2这么折腾我了吧!!

1.在这个运用里,hsqldb的内存形式和cached形式都不能用
运用hsqldb的内存形式来读入数据,会发现衔接数据库的时分奇慢无比,读了一下hsqldb的源代码,发现它在创立数据库衔接的时分,会查看log文件、script文件的修正时刻是否共同,然后查询网上hsqldb的开发者Thomas的话是说,也会查看properties文件中modified特点是否为yes,如果在退出运用的时分,没有履行shutdown,那么modified值肯定为yes,这样的话,下次衔接数据库的时分,hsqldb会以为前次的退出是不合法退出,需求依据log文件的内容从中止处进行康复,并将这些未写入的数据持续写入到script数据文件中。
详细履行进程时,先创立一个与script文件同名的后缀为.new的文件,比方数据文件为test.script,那么临时文件的名称为test.script.new,等数据写入完成后,删去原有的script文件,重命名.new的文件为test.script。
目测这个转化的时刻就很长……所以这儿就不再给出详细的时刻长度……

    运用 EQ 衔接内存形式下的hsqldb,会发现衔接速度也是挺慢……猜想是内存形式下,会将33Mb的数据全部都载入到内存,这个加载进程或许也在耽搁着咱们名贵的时刻……

cached形式,运用EQ和运用衔接数据库都是古怪无比,然后进行运用中最常用的一个事务功用测验功用,这个事务功用依据几十个公式对库表中的某些数值字段进行核算,例如以下这些句子:

update member_info
set user_def_num0 = user_def_num1 + user_def_num2 + user_def_num3
where company_id = 123456

update member_info
user_def_num10 = user_def_num11 * 1.3 + user_def_num12
where company_id = 123456

……

    测验的时分,涉及到的数据行数大约在800行左右,company_id 上有独自的索引,履行的速度上,内存形式十分的快,cached形式大约慢30%左右,还算能够承受……
不过仔细调查cached形式下,hsqldb发生的后缀为.data的文件,会发现一个很可怕的工作——
内存形式下,script巨细为33Mb,转化为cached形式后,寄存数据的文件是.data文件,大约为68Mb。运用上述的十多个sql句子履行核算之后,会发现.data文件巨细变成了200Mb。
调查运用程序占用的内存空间(还有虚拟内存空间),发现内存形式和cached形式平起平坐……这和hsqldb中声称的cached形式很省资源的说法截然不同……

由于纠结于这么大的data文件会不会有什么其他功用问题,所以想在核算完成后,履行“checkpoint defrag”来对数据库进行紧缩,成果却让人无法承受——履行进程根本与之前的从头衔接内存形式的数据库相同,会先创立.new的文件,再删去原有data文件,然后重命名——这个进程耗时实在是太久了,大约需求1分钟多,根本上是无法承受的时刻长度。

2.H2的功用堪忧
仍是挺感谢Thomas的热心回复,之前在google新闻组上发帖求助,许多朋友协助,最热心的莫过于H2作者的Thomas,他一起也是hsqldb的作者。
怀着对hsqldb的无比敬意,试用了H2,可是在上面的核算进程中遇到了无法跨越的功用问题,依据我的测验成果来看,上述核算进程在hsqldb中每条update句子耗时0.2秒,在H2中则需求大约2秒;所以我发帖求助是否存在设置问题,后来Thomas也做了测验,比我测验的成果功用要好一些,可是依然有5倍以上的耗时距离,因而该运用也无法运用H2,由于咱们不能让用户在核算进程上等候得太久!!

3.Derby
现在时刻是2009年9月11日0:29:52,刚刚将数据移植到Derby,在紧缩安稳后,数据文件夹巨细约为66Mb。
    运用 EQ 的衔接速度也还不错,运用上述的update句子,单条履行的时刻约为 0.2 秒跟hsqldb相仿……这一步步好像激动人心哦……可是没有通过运用的实地调查,暂时无法下定论。


通关本文没有给出一个切当的定论,乃至没有详细的测验成果数据,由于这些太依赖于环境,根本没有参考价值。这儿仅仅想通过本文传达一个观念,任何新技能都得通过多种不同的视点来调查后,得出一个在必定环境中是否适用的定论。

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表超凡娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章

阅读排行

  • 1
  • 2

    oracle权限传递tengxun

    权限,用户,时分
  • 3
  • 4
  • 5

    主题:ORACLE函数大全sohu

    字符串,字符,函数
  • 6

    数据库备份问题huabian

    数据库,备份,数据
  • 7

    MySQL刺进数据报错处理sina

    文件,目录,数据库
  • 8

    mysql计算句子ITeye头条

    数据,汇总,季度
  • 9

    zz 彻底卸载mysqlITeyeitjob

    目录,数据库,问题
  • 10