作者adrianshum (Alien)
看板java
標題Re: [問題] Hibernate 多年來的疑問
時間Sun Mar 31 00:29:21 2013
※ 引述《lookjohn (《經濟狀況》赤貧)》之銘言:
: 各位大大好,小弟,用Hibernate 進行開發已經有一段時間了,
: 不管大小專案的進行,hibernate 已經是我開發上不可或缺的開發元件之一
: 但是有個疑問一直存在小弟身上多年,想請各位大大幫忙釐清一下小弟的觀念
[43]
: 這兩隻 皆指到 TableA (不管事用annotion或是ORM)..
: ===
: 想請教:
: 使用語法 : "From TableA where 1=1" ; query.setMaxResults(1000);
直接 "from BeanA" 或 "from BeanASimple" 就行了。
: 在同樣10000筆的查詢之中,我使用的BeanASimple 的情況 是否優於BeanA?
: 是否下列幾個條件皆有比較好:
: 1.查詢效率
: 2.記憶體的佔用率
: 3.多人同時查詢的情況
: 這是我個人的認知,就觀念上不知是否是正確的或是有相對的謬論存在,
: 請各位大大不吝指教..:)
單是你上面的幾項而言,如我在上一篇的 comment 所說,你可以
單純把問題考慮為一般 SQL statement, select 的 field 的多少
對 performance 的影響。
一般而言,select 比較少的 field, 用的 memory 較少,傳送的資料
也較少,所以 1,2,3 都應該是 BeanASimple 的情況較好,如果撇除因
資料量多少而引起的分別,則 1,3 應該都一樣。
But!
簡單而言是這樣而已,實際有太多可能影響的東西。比如說,很多地方都
在用 select 多 field 的 SQL, 很有可能 DB 已經做了相關的 cache
(比如execution plan 的 cache),select 多 field 也可能變得反而較
快。
除此以外,更值得關注的是 BeanA & BeanASimple 的用處。究竟哪一個
才是實際的 model? 比如,建立 entity 的關係的時候,是用哪一個?這
可能影響到 Hibernate first level cache,也會對效率有影響。
更重要的是,對於設計而言的問題 (雖然有點離題),單純因為大部
份時間只用到其中幾個 field 而弄一個 entity 出來,看來並不是很
合理的做法。要知道 Hibernate (或其他 ORM framework) 是讓你把
你的 model map 到 relational database, 意即,目標是讓你能有合
理的 model design. 可是你的出發點卻還是以 DB 出發,把 entity
當成單純的 value object (所以才會出現“因為只要到幾個 field
所以弄一個 Simple entity 出來”)。通常這樣用 Hibernate 的少
有見到結果理想的,倒不如用 MyBatis 更適合。
Alien
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 223.19.42.175
推 lookjohn:謝謝Alien 大哥,小弟受教了,之所以這麼問,是因為 03/31 11:34
→ lookjohn:在大部份的function implement之中用不到那麼多Field 03/31 11:36