国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Hibernate和Jive緩存策略的比較

2019-11-17 06:30:26
字體:
來源:轉載
供稿:網友

一.基本概念

PO是持久化對象,它只是對物理數據實體的一種對象表示。

VO是值對象,準確地講,它是業務對象。

FormBean只是Html表單的封裝,起到在控制層弱化的request中存儲數據的作用,將request的get方法轉

變為對象的存取值。

二.緩存策略比較

Jive

1.Jive的緩存策略的過程描述:

(1)條件查詢的時候,Jive用 select id from table_name where …. (只選擇ID字段)這樣的SQL語句查詢數據庫,來獲得一個ID列表。

(2) Jive根據ID列表中的每個ID,首先查看緩存中是否存在對應ID的數據對象:假如存在,那么直接取出,加入到 結果列表中;假如不存在,那么通過一條select * from table_name where id = {ID value} 這樣的SQL查詢數據庫,取出對應的數據對象,放入到結果列表,并把這個數據對象按照ID放入到緩存中。

(3) ID查詢的時候,Jive執行類似第(2)步的過程,先從緩存中查找該ID,查不到,再查詢數據庫,然后把結果放入到緩存。

(4) 刪除、更新、增加數據的時候,同時更新緩存。

2.Jive緩存策略的優點:

(1) ID查詢的時候,假如該ID已經存在于緩存中,那么可以直接取出。節省了一條數據庫查詢。

(2) 當多次條件查詢的結果集相交的情況下,交集里面的數據對象不用重復從數據庫整個獲取,直接從緩存中獲取即可。比如,第一次查詢的ID列表為{1, 2},然后根據ID列表的ID從數據庫中一個一個取出數據對象,結果集為{a(id = 1), b(id = 2)}。下一次查詢的ID列表為{2, 3},由于ID = 2的數據對象已經存在于緩存中,那么只要從數據庫中取出ID = 3的數據對象即可。

3.Jive緩存策略的缺點:

(1) 在根據條件查找數據對象列表的過程中,DAO的第(1)步用來獲得ID列表的那一次數據庫查詢,是必不可少的。

(2) 假如第(1)步返回的ID列表中有n個ID,在最壞的命中率(緩存中一個對應ID都沒有)情況下,Jive還要再查詢n次數據庫。最壞情況下,共需要n + 1數據庫查詢。

Hibernate

Hibernate用session類包裝了數據庫連接從打開到關閉的過程。Session內部維護一個數據對象集合,包括了本Session內選取的、操作的數據對象。這稱為Session內部緩存,是Hibernate的第一級最快緩存,屬于Hibernate的既定行為,不需要進行配置。

Session的生命期很短,存在于Session內部的第一級最快緩存的生命期當然也很短,命中率自然也很低。當然,這個Session內部緩存的主要作用是保持Session內部數據狀態同步。假如需要跨Session的命中率較高的全局緩存,那么必須對Hibernate進行二級緩存配置。一般來說,同樣數據類型(Class)的數據對象,共用一個二級緩存(或其中的同一塊)。

Hibernate

1.Hibernate二級緩存策略的過程描述:

(1)條件查詢的時候,總是發出一條select * from table_name where …. (選擇所有字段)這樣的SQL語句查詢數據庫,一次獲得所有的數據對象。

(2) 把獲得的所有數據對象根據ID放入到第二級緩存中。

(3) 當Hibernate根據ID訪問數據對象的時候,首先從Session一級緩存中查;查不到,假如配置了二級緩存,那么從二級緩存中查;查不到,再查詢數據庫,把結果按照ID放入到緩存。

(4) 刪除、更新、增加數據的時候,同時更新緩存。

2.Hibernate二級緩存策略的優點:

(1) 具有Jive緩存策略同樣的第(1)條優點:ID查詢的時候,假如該ID已經存在于緩存中,那么可以直接取出。節省了一條數據庫查詢。

(2) 不具有Jive緩存策略的第(2)條缺點,即hibernate不會有最壞情況下的 n + 1次數據庫查詢。

3.Hibernate二級緩存策略的缺點:

(1) 同Jive緩存策略的第(1)條缺點一樣,條件查詢的時候,第(1)步的數據庫查詢語句是不可少的。而且Hibernate選擇所有的字段,比只選擇ID字段花費的時間和空間都多。

(2) 不具備Jive緩存策略的第(2)條優點。條件查詢的時候,必須把數據庫對象從數據庫中整個取出,即使該數據庫的ID已經存在于緩存中。

Hibernate的Query緩存策略

可以看到,Jive緩存和Hibernate的二級緩存策略,都只是針對于ID查詢的緩存策略,對于條件查詢則毫無作用。(盡管Jive緩存的第(2)個優點,能夠避免重復從數據庫獲取同一個ID對應的數據對象,但select id from …這條數據庫查詢是每次條件查詢都必不可少的)。

為此,Hibernate提供了針對條件查詢的Query緩存。



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宜兴市| 革吉县| 大田县| 乌审旗| 彰武县| 长治市| 巴塘县| 扶沟县| 酒泉市| 威海市| 弥勒县| 庄浪县| 临沧市| 泾阳县| 松潘县| 古丈县| 卫辉市| 和龙市| 垦利县| 安泽县| 奉节县| 上饶市| 瓦房店市| 宁夏| 交口县| 林州市| 含山县| 光山县| 临湘市| 区。| 白朗县| 贵溪市| 桦川县| 丹东市| 辽源市| 南乐县| 年辖:市辖区| 大港区| 金门县| 通许县| 潮州市|