2009-05-06 61 views
4

我有一個相當小的(每天大約4.5k的綜合瀏覽量)網站在Django上運行,PostgreSQL 8.3作爲db。如何測量Django緩存的性能?

我正在使用數據庫作爲緩存和sesssion後端。我聽說過有關使用Memcached達到此目的的很多好處,我一定會嘗試一下。不過,我想知道這種變化的好處是什麼:我想我的網站可能不夠大,以便更好的緩存後端能夠發揮作用。重點是:我不會安裝和配置memcached,而且我也不想浪費任何東西或很少的時間。

我該如何測量使用db作爲緩存後端引入的開銷?我看了一下django-debug-toolbar,但是如果我理解正確,它不是你想要放在生產站點上的東西(你必須設置DEBUG=True才能工作)。不幸的是,我無法完全重現筆記本電腦的生產環境(我有不同的操作系統,CPU和更多的RAM)。

有沒有人測試過不同的Django緩存/會話後端?有沒有人知道如果我正在做什麼會影響性能,例如,每次請求都會寫一個會話?

回答

5

在我以前的工作中,我們試圖衡量緩存對我們正在開發的網站的影響。在同一臺機器上,我們加載測試了最常用作起始頁(對象列表)的10個頁面集,以及從〜200000池中隨機獲取的一些對象詳細信息頁。差異是150個請求/秒到30000個請求/秒,數據庫查詢降到每頁1-2個。

什麼被緩存:

  • 會議在對象中的每個單獨的頁面列出
  • 次要目標和共同的內容檢索的對象
  • 列表(在每一頁上找到)對象類別的
  • 名單和其他分類屬性
  • 對象計數器(通過cron job離線計算)
  • 個別對象

通常,我們只使用低級粒度緩存而不是高級緩存框架。它需要非常小心的設計(緩存在每次數據庫狀態更改時必須正確無效,例如添加或修改任何對象)。

2

簡短回答:如果你使用ram,memcached將會更快。你不能真正對memcached與數據庫緩存進行比較,只要記住,服務器的大瓶頸是磁盤訪問,特別是寫訪問。

無論如何,如果你有很多緩存對象和很長的時間到期,磁盤緩存會更好。但是對於這種情況,如果你想要演出表演,最好用python腳本靜態生成你的頁面,並用ligthtpd或nginx提供它們。

對於memcached,您可以調整專用於服務器的ram數量。

+0

我知道使用memcache會比db更快。問題在於它是否會更快*足夠*來證明更改配置的合理性。 – 2009-05-06 12:29:51

0

試試吧。使用螢火蟲或類似的工具,並在測試服務器上運行一些RAM分配(例如64MB)的memcache。

在沒有memcache的情況下標記您在Firebug中看到的平均加載結果,然後打開緩存並標記新結果。這樣做很容易。

結果通常會使人感到震驚,因爲性能提升非常好。

2

DiskCache項目發佈Django cache benchmarks比較本地存儲,Memcached的,Redis的,基於文件的,和diskcache.DjangoCache。 DiskCache的另一個好處是不需要單獨的進程(與Memcached和Redis不同)。取而代之的是緩存鍵和小值被內存映射到Django進程內存中。從緩存檢索值通常比本地主機上的Memcached快。一些settings控制着多少數據保存在內存中;其餘的被分頁到磁盤。