2012-01-21 23 views
0

我有很多模型中存儲的能量測量記錄。在django中緩存處理過的數據

我的用戶需要經常訪問使用的能源報告,因此model.manager負責查詢大量記錄,應用需要大約2秒的算法,我測試了memcached,但是用沒有運氣,因爲一段時間後緩存的數據不可用,但用戶經常回頭看到相同的報告。所以我對這個性能問題的潛在解決方案是在一個名爲「ProcessedData」的模型中存儲處理過的數據(不僅僅是查詢集,而是算法應用之後的數據查詢集)。

因此,當用戶提示訪問能源報告時,負責的經理將首先查詢ProccessData,如果ProccessData.objects.filter(field1='field1').exist():返回的數據將直接傳遞給模板進行可視化。如果以前沒有要求的數據,負責的經理將必須應用算法並將請求發送回用戶。

這是一個好方法嗎?

回答

1

在開始這樣的事情之前,我肯定會給像django-cache-machinejohnny-cache這樣的項目嘗試一下,他們做模型緩存,他們做得很好。

我認爲約翰尼緩存這是一個更適合您的需求,因爲它從來沒有過期查詢集緩存。

我不確定你的意思是「緩存數據不可用」,但是可以通過多種方式輕鬆解決問題(例如使用像redis這樣的持久緩存後端)。

這是另一件事情,我會嘗試數據庫緩存之前,你要實現如果你需要比queryset緩存更多的東西。

Django的緩存utils的有一個很好緩存裝飾(在@cached),它不基於參數緩存(參見文檔和示例here

+0

當我使用作爲輸入我知道一個查詢,查詢的結果處理數據甚至當我使用johny-cache的memcache時,發送給用戶的請求也被緩存,當數據需要12小時後可能需要一天,在這種情況下並且取決於數據庫與其他用戶的交互量,最初緩存的已處理數據不可用。 – Jaime

+1

你試過類似django-cache-utils的@cached裝飾器嗎?將它與自定義高速緩存後端結合,永不過期高速緩存(例如,由於django不支持「永遠」,因此實現了johnny高速緩存),並且持久化結果高速緩存 –