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

Hibernate的delete操作性能测试 博客分类: 技术 HibernateJDBCSQLOracleMySQL

程序员文章站 2024-02-15 08:55:40
...
   这两天和论坛里的老兄有关于Hibernate的delete操作性能的争论,最后是谁也不服谁,不欢而散,唯一比较统一的结论就是相信测试。

我们争论的焦点有两个:
1)、仁兄说,原则上批量delete是用JDBC,但是现在的Hibernate在这方面做的也不错,可以直接用
2)、仁兄说,batch size对delete操作会有很大的性能提升。

   今天有一点点时间,我尝试性的做了一下简单测试。当然并不具有多少科学性,我只想证明我的观点是对的。
JDBC删除:
	时间 
1	196
2	172
3	187
4	189


Hibernate删除:
	运行时间	Batch size
1	5786	0
2	5562	20
3	5360	50
4	5265	100


   针对仁兄的第一个观点而言,确实如果我们所作的系统如果要求不是太高的话,这个时间我们是可以接受的,毕竟不是太长吗,但是还是不在同一个“数量级”上的(牛人用过的词汇,据说怕我听不懂)。但是你有没有发现Hibernate是怎么样来优化删除操作的呢?做删除的时候它只是查找出所有的要删除的记录的id,然后把这些id扔给cache,我们的delete就算完成啦,剩下删除每一个id对应的记录交给cache来做,当然cache的作用本来就是匹配吗,这种优化确实有些高明,我们需要等的时间是少了,但是性能实实在在的没有多少提升,我们还是要运行10000行sql语句,所以我还是坚持我的观点,用Hibernate删除是没有选择的情况下才做的,用JDBC删除也有一点的缺点,我们需要一个更好的解决方案,等待牛人的出现。

引用
仁兄的原话:
我也不知道用猪脑袋猜问题的人是从哪里猜出来Batch Size在数据库和应用在同一台机器上的情况下会没太大作用

针对仁兄的第二个观点而言,从运行结果上,确确实实设置了batch size后有一点性能提升,但是也实实在在的和我原先的观点一样,当应用和数据库是在同一机器上时并不能带来多少性能提升(虽然这个观点我也是从仁兄说的“圣经”里得出的)。


    仁兄说,我捧着夏昕的书当圣经,首先一点我要声明的是我不信基督教啊,所以圣经在我还比不上一堆草纸啊,确实,我对这些大家普遍接受的畅销书作者是比较信奉的,我确信能写出这种水平的书的人肯定是研究过源代码的,至少熟悉这个框架是怎么实现的。

另外每一样技术我都不只看一本书啊,有三四本书综合之后,相同的观点我觉得我可以信任,不同地方我们再探讨吗,看看谁的是对的,如果你这个信不着也那个信不过,那你还信不信Gavin king呢,不信的话你自己开发持久层好了啊,数据库也是别人的东西,你也不要用了,自己写一个,还有Java,还有Windows,还有你的显示器,cpu….,你回到原始社会自给自足好了吗。


   好了,火药味太重了,这个话题到此为止了。嘿嘿,这两天为了和你争,由于我频繁访问javaeye的流量大增啊。