2006/8/30

AP server上重要的Cache機制

Hibernate現在可說是ORM的代言人,但其中的cache機制直接影響到Hibernate的效能表現,目前 Hibernate 內建支援 EHCache, SwarmCache, OSCache, and JBoss Cache,不知道什麼原因Apache的JCS並沒有納入Hibernate,但JCS Usage in Hibernate這篇文章也提到,Apache提供的JCS也可以透過製作Hibernate Cache plugin的方式用在Hibernate裡面。

Cache可說是一種以空間換取時間的機制,利用local的memory或是disk,將AP使用的資料暫存起來,以供後面AP的使用,舉例來說,一個取所有文件列表的查詢,事實上就可以放入cache機制當中,因為每一位登入的使用者,沒有必要重複向資料庫查詢所有的文件列表,只要將資料放入cache,就可以讓其他使用者節省向DB查詢的時間,減少DB系統與網路資源的浪費。

在真實的AP使用上,cache也要分成不同等級,例如AP等級、使用者等級,甚至可以加上單位等級,不同等級的cache有不同的作用,也需要對應不同的cache策略。

Apache JCS提供LRU Memory Cache, Indexed Disk Cache, TCP Lateral Cache, RMI Remote Cache四種region,前面兩種是以memory與disk作為cache的儲存處,後面兩種分別是以UDP與RMI的方式將local cache傳送到其他server上。

JBoss Cache機制是以Tree為出發點,在cache機制中加入Tree的概念,所有的Key/Object的cache pair都要再加上一層樹狀節點,事實上這種機制很適合用在樹狀階層架構中,區分出不同等級的cache。另外JBoss的cache可以加上transaction的概念,在操作資料物件的同時,針對物件裡的資料commit或rollback,這樣的機制就跟Hibernate的概念一樣,可直接將操作物件的結果,即時反應到cache與DB上。

Hibernate 性能提升(Improving Performance), Chapter 19. Improving performance,在Hibernate效能提升中,把外部的cache當作The Second Level Cache,要把Hibernate用得更精純,顯然得把cache機制搞清楚。