我們有一種情況,我們覺得我們沒有充分利用NHibernate的功能,這會降低性能。這個問題的實際情況被簡化爲一個「有帖子的博客」的例子。NHibernate最佳實踐(查詢緩存中有很多靜態數據)
一個博客網站,每個用戶可以擁有自己的博客,其中有任意數量的帖子。因此,對於具有下列列定義職位表:
id, blog_id, post_title, post_contents
大多數博客都很少更新,而有些「類似Twitter的」頻繁的更新。有更多的讀取比寫入。
每個博客的首頁顯示最新的5個條目。
SELECT TOP 5 * FROM blog_posts WHERE blog_id = ?
這將導致在第二級緩存和查詢緩存中放置大量元素。
我們的問題是,由於少數博客經常更新,因此具有99%以上讀取次數的博客的緩存查詢結果被銷燬。
你們其他人如何解決這個問題?什麼是最佳實踐?
除非您在查詢數據庫之前知道哪些博客經常更新(「類似twitter」),否則我認爲設計一種方法來緩存不太頻繁的博客結果將非常困難... – 2010-06-28 13:56:48
不幸的是,這隻能在運行時確定。 我正在考慮在邏輯代碼中使用博客 - >帖子的靜態字典,並且在添加/刪除條目時(當然有適當的鎖定),只需保持此狀態即可。但是,如果網站有一天會在多臺服務器上託管,這隻會導致問題。 – Thomas 2010-06-30 07:10:15