Hibernate的delete操作性能测试 博客分类: 技术 HibernateJDBCSQLOracleMySQL
程序员文章站
2024-02-15 08:55:40
...
这两天和论坛里的老兄有关于Hibernate的delete操作性能的争论,最后是谁也不服谁,不欢而散,唯一比较统一的结论就是相信测试。
我们争论的焦点有两个:
1)、仁兄说,原则上批量delete是用JDBC,但是现在的Hibernate在这方面做的也不错,可以直接用
2)、仁兄说,batch size对delete操作会有很大的性能提升。
今天有一点点时间,我尝试性的做了一下简单测试。当然并不具有多少科学性,我只想证明我的观点是对的。
JDBC删除:
Hibernate删除:
针对仁兄的第一个观点而言,确实如果我们所作的系统如果要求不是太高的话,这个时间我们是可以接受的,毕竟不是太长吗,但是还是不在同一个“数量级”上的(牛人用过的词汇,据说怕我听不懂)。但是你有没有发现Hibernate是怎么样来优化删除操作的呢?做删除的时候它只是查找出所有的要删除的记录的id,然后把这些id扔给cache,我们的delete就算完成啦,剩下删除每一个id对应的记录交给cache来做,当然cache的作用本来就是匹配吗,这种优化确实有些高明,我们需要等的时间是少了,但是性能实实在在的没有多少提升,我们还是要运行10000行sql语句,所以我还是坚持我的观点,用Hibernate删除是没有选择的情况下才做的,用JDBC删除也有一点的缺点,我们需要一个更好的解决方案,等待牛人的出现。
针对仁兄的第二个观点而言,从运行结果上,确确实实设置了batch size后有一点性能提升,但是也实实在在的和我原先的观点一样,当应用和数据库是在同一机器上时并不能带来多少性能提升(虽然这个观点我也是从仁兄说的“圣经”里得出的)。
仁兄说,我捧着夏昕的书当圣经,首先一点我要声明的是我不信基督教啊,所以圣经在我还比不上一堆草纸啊,确实,我对这些大家普遍接受的畅销书作者是比较信奉的,我确信能写出这种水平的书的人肯定是研究过源代码的,至少熟悉这个框架是怎么实现的。
另外每一样技术我都不只看一本书啊,有三四本书综合之后,相同的观点我觉得我可以信任,不同地方我们再探讨吗,看看谁的是对的,如果你这个信不着也那个信不过,那你还信不信Gavin king呢,不信的话你自己开发持久层好了啊,数据库也是别人的东西,你也不要用了,自己写一个,还有Java,还有Windows,还有你的显示器,cpu….,你回到原始社会自给自足好了吗。
好了,火药味太重了,这个话题到此为止了。嘿嘿,这两天为了和你争,由于我频繁访问javaeye的流量大增啊。
我们争论的焦点有两个:
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在数据库和应用在同一台机器上的情况下会没太大作用
针对仁兄的第二个观点而言,从运行结果上,确确实实设置了batch size后有一点性能提升,但是也实实在在的和我原先的观点一样,当应用和数据库是在同一机器上时并不能带来多少性能提升(虽然这个观点我也是从仁兄说的“圣经”里得出的)。
仁兄说,我捧着夏昕的书当圣经,首先一点我要声明的是我不信基督教啊,所以圣经在我还比不上一堆草纸啊,确实,我对这些大家普遍接受的畅销书作者是比较信奉的,我确信能写出这种水平的书的人肯定是研究过源代码的,至少熟悉这个框架是怎么实现的。
另外每一样技术我都不只看一本书啊,有三四本书综合之后,相同的观点我觉得我可以信任,不同地方我们再探讨吗,看看谁的是对的,如果你这个信不着也那个信不过,那你还信不信Gavin king呢,不信的话你自己开发持久层好了啊,数据库也是别人的东西,你也不要用了,自己写一个,还有Java,还有Windows,还有你的显示器,cpu….,你回到原始社会自给自足好了吗。
好了,火药味太重了,这个话题到此为止了。嘿嘿,这两天为了和你争,由于我频繁访问javaeye的流量大增啊。