发表时间: Mar 18, 2004 7:30 PM |
| |||
这是个很老的贴子了,又被推上前台。 hibernate主要是将关系数据库变成面像对像的方式,目的在于开发维护代码的方便性。但在他身上,有些题外的东西却被我们关注得太多,浪费了很多。 像这种性能之类的问题,不只出现在这里,ejb,struts都有问过的贴子 为什么会,基础不牢! 如果,你知道读内存要多少时间,读硬盘数据要多少时间,读连续字节和单个字节时间差多少,知道硬盘的IO是一个还是多个等等,这些看似简单但又基础性的东西,又怎么为这些问题思来想去呢,还做那么多测试。浪费时间而已。 list整体读,iterate先查key再读。在DB分解: jdbc: sql传至db(select * from table)-->sql解析-->查索引区-->查表-->找到数据-->数据返回 list: hibernate将list动作解析成sql(select * from table)-->sql传至db-->sql解析-->查索引区-->查表-->找到数据-->数据返回-->hibernate将数据构造成list iterate: hibernate将list动作解析成sql(select key from table)-->sql传至db-->sql解析-->查索引区-->数据返回-->hibernate将数据构造成iterate 对每一次next方法有,hibernate将list动作解析成sql(select * from table where key ..)-->sql解析(只有第一次解析)-->查索引区-->数据返回-->hibernate将数据构造成object list比jdbc多了什么 一条,hibernate将list动作解析成sql(select * from table) iterate比jdbc多了什么 多了一次sql解析,多了几次sql传输及数据传输的动作,DB的数据查询上,可以利用IO读连续数据的机率少了些。 如此而已,为什么慢,就这些地方了。 |
|