首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

hibernate跟jdbc加载对象性能

2012-08-30 
hibernate和jdbc加载对象性能??jdbc不过你的hibenate和jdbc的差距也不是很大阿。看到你测试性能损失8.37%差

hibernate和jdbc加载对象性能

?

?jdbc

不过你的hibenate和jdbc的差距也不是很大阿。
看到你测试性能损失8.37%差不多阿,不过你的这个count太慢了点吧。

?

我一直觉得Hibernate的性能不会很差,我只用他做映射,一般不搞继承、所有关系只用ID而不用对象做对应。

今天测试510W数据从数据库(表实际有3700W记录)加载到内存中:java参数 -server -Xms2048M -Xmx2048M

?

    jdbc从数据库拿出来变成对象,大约内存占用:1300MB。
      jdbc执行时间:09:47:28,989->09:54:51,456time: 7:23s ?mem: 1819.28-756.68=1062.6MB
    hibernate:?无法正确完成,内存不够,调整内存为?-server -Xms2048M -Xmx4000M依然不行

?

?

?

?

1 楼 skzr.org 2011-05-04   顺便测试了数据库加载和文件加载的性能差别:
同最前面的:100W数据。
持久化到文件中,然后再反序列化到内存,耗时9.58s>>数据库写入耗时五百多秒 2 楼 terencewong 2012-02-15   你这个benchmark是不是会误导别人?你的DB table有index吗?如果有的话,插入当然费时了。 3 楼 skzr.org 2012-02-16   terencewong 写道你这个benchmark是不是会误导别人?你的DB table有index吗?如果有的话,插入当然费时了。

兄弟,第一个测试的表结构是APP_USER(ID, NAME, PASSWORD),只是用来测试用,没创建任何其他多余,就是ID是inc的主键。这个测试测试的是insert。

关键是后来在实际中的一次测试——510W数据从数据库(表实际有3700W记录)加载到内存中
hibernate完败,跟踪进去发现hibernate构建数据List出来时,List会产生很多的扩容,最后导致内存(内存已调整到最大4000M依然失败)不够。 4 楼 terencewong 2012-02-20   skzr.org 写道terencewong 写道你这个benchmark是不是会误导别人?你的DB table有index吗?如果有的话,插入当然费时了。

兄弟,第一个测试的表结构是APP_USER(ID, NAME, PASSWORD),只是用来测试用,没创建任何其他多余,就是ID是inc的主键。这个测试测试的是insert。

关键是后来在实际中的一次测试——510W数据从数据库(表实际有3700W记录)加载到内存中
hibernate完败,跟踪进去发现hibernate构建数据List出来时,List会产生很多的扩容,最后导致内存(内存已调整到最大4000M依然失败)不够。

Sorry to type English since I am on duty now. Actually, the primary key will induce DB to create index. Anyhow, lets forget the insertion. Could you provide any detail for your Hibernate proof of concept with big dataset because it is intriguing for me to know which intermediate variables occupy your memory. Maybe you can provide a heap map, and your conclusion will because more sound and solid. Many thanks.  5 楼 skzr.org 2012-02-20   terencewong 写道
Sorry to type English since I am on duty now. Actually, the primary key will induce DB to create index. Anyhow, lets forget the insertion. Could you provide any detail for your Hibernate proof of concept with big dataset because it is intriguing for me to know which intermediate variables occupy your memory. Maybe you can provide a heap map, and your conclusion will because more sound and solid. Many thanks. 

我英语比较差。
这两点我们是共识的:
主键是一个特殊的索引 索引对insert确实会产生性能的影响(详见此博文我的一条评论oracle数据从一个表空间导入到另外一个表空间)
所以我那个insert测试的是——jdbc和hibernate他们在insert时性能差距不大
原结论:
skzr.org 写道
可见Hibernate性能并不太慢。大约损失性能2.75%还是可以接受,如果对性能苛刻的要求建议还是直接jdbc吧。


List<MyBigTable> data = queryHQL("select * from MyBigTable"),对于HQL来说List容量无法指定初始值,必然会发生扩容。
扩容也就算了,同样是jdbc当使用默认new ArrayList<MyBigTable>()作为存储集,也会发生扩容,现象:
1. jdbc方式的却最终能执行完毕
2. hibernate的最终cpu一直100%,长时间(>20分钟)等待无果

终极优化,jdbc:
select count(id) from MyBigTable获取size new ArrayList<MyBigTable>(size)作为存储list,再执行jdbc查询

最后:
已经很久很久(>1年)没用hibernate了,一直用spring的jdbc挺好的
1. 开发效率并不比hibernate慢
2. 性能也不再操心了
3. 关键是update时,不再每次把所有的字段set一次了,数据不一致的情况很少了 6 楼 terencewong 2012-02-21   skzr.org 写道terencewong 写道
Sorry to type English since I am on duty now. Actually, the primary key will induce DB to create index. Anyhow, lets forget the insertion. Could you provide any detail for your Hibernate proof of concept with big dataset because it is intriguing for me to know which intermediate variables occupy your memory. Maybe you can provide a heap map, and your conclusion will because more sound and solid. Many thanks. 

我英语比较差。
这两点我们是共识的:
主键是一个特殊的索引 索引对insert确实会产生性能的影响(详见此博文我的一条评论oracle数据从一个表空间导入到另外一个表空间)
所以我那个insert测试的是——jdbc和hibernate他们在insert时性能差距不大
原结论:
skzr.org 写道
可见Hibernate性能并不太慢。大约损失性能2.75%还是可以接受,如果对性能苛刻的要求建议还是直接jdbc吧。


好的,我来试试看看能不能复制你的问题

List<MyBigTable> data = queryHQL("select * from MyBigTable"),对于HQL来说List容量无法指定初始值,必然会发生扩容。
扩容也就算了,同样是jdbc当使用默认new ArrayList<MyBigTable>()作为存储集,也会发生扩容,现象:
1. jdbc方式的却最终能执行完毕
2. hibernate的最终cpu一直100%,长时间(>20分钟)等待无果

终极优化,jdbc:
select count(id) from MyBigTable获取size new ArrayList<MyBigTable>(size)作为存储list,再执行jdbc查询

最后:
已经很久很久(>1年)没用hibernate了,一直用spring的jdbc挺好的
1. 开发效率并不比hibernate慢
2. 性能也不再操心了
3. 关键是update时,不再每次把所有的字段set一次了,数据不一致的情况很少了

热点排行