在我們的實際的網路應用中,若網頁是透過Django動態產生且會存取到資料庫,每一次對網頁的呼叫,都會造成DB的I/O,若是用戶量或存取量很大的時候,就會對DB造成很大的負荷,所以我們就必需要加上Cache的機制,若快取內有東西,就直接從快取讀出並送回給Client端。
快取主要用於頻繁讀取但改動較低的資料量,例如Blog或論壇相對來說就很適合做這件事,因為以上的例子大部份讀的次數會遠高於寫的次數,且在某種情況下,快取內的資料與資料庫內的資料有一點誤差也無所謂。
Django最主要第三方資料庫做快取的兩個套件為django-cache-machine與johnny-cache,之前曾經試用過johnny-cache,但它是透過middleware的方式對整個系統的models層做快取,採取負面表列的方法設定不快取的Model。但這樣對我們程式可以控制的幅度較低,所以這一次換了django-cache-machine來做測試。
django-cache-machine主要讓Model多重繼承了他的方法與原有django的Model物件,並將Manager設定到其上,透過內部的一些方法去進行封裝。因為我們在程式碼的內部利用了很多update_fields或是一些優化的手法去進行DB存取的加速,但在實測上的結果,以上兩個快取層會產生誤判的狀況,所以後續的使用有一點風險,看來這樣的套件還是比較適合應用在一般的網頁上。
沒有留言:
張貼留言