2017-06-22 56 views
0

我的視圖顯示數據表(特定於可能有很多用戶的客戶),並且此表佔用大量計算資源來填充。客戶數據每週變化4/5次,通常在同一天。Python Django緩存vs模型字段中的商店?哪個更有效率?

緩存是一個明顯的解決方案,但我想知道Django's cache framework是否比在客戶級創建文本字段並將數據存儲在那裏更有效?

我覺得它更容易實現(並在數據更改時清除文本字段),但有什麼缺點,還有什麼我需要注意的? (問題是如果數據集變得太大?在模型等附加領域???)

任何幫助將不勝感激!

回答

0

使用緩存框架的好處是您不必使用數據庫。您可以獨立於數據庫擴展緩存存儲,並在不同的物理(或虛擬)機器上運行緩存。

此外,您不必執行陳舊vs新鮮的邏輯,但這是一次性的。

2

緩存是一個緩存,但是你實現它,並且緩存的主要問題是無效。

正如Melvyn正確地回答,緩存框架的情況是,它的數據庫外部(可以,取決於您選擇哪個後端)。無論是專業還是缺點,都取決於你的數據庫負載,基礎設施和whatnots ...如果你已經使用了緩存框架(我的意思是說,不僅僅是普通的無條件整頁緩存),並且希望減少數據庫的負載,那麼它就是可能值得增加複雜性。

否則將計算結果存儲在數據庫中非常簡單,並且不需要額外的服務器,安裝等。我個人會去專用模型 - 以避免不必要的數據庫級開銷 - 包括緩存結果和該結果所依賴的參數的校驗和(規範記憶模式),以便您可以輕鬆檢測是否需要重新計算。我發現這個解決方案比試圖檢測每個參數和任何這些參數的變化更容易維護,並且無效/「即時」重新計算緩存(這可以使適當的緩存失效變得困難或至少很難實現),但是這又取決於這些參數是什麼以及它們來自哪裏。

+0

好的答案和真正的測試是看看計算需要多長時間,如果系統已經處於壓力之下。如果超時,你需要考慮提供陳舊的數據,直到完成爲止,這對於緩存領域來說很難做到。角落的情況下,一個理智的基礎設施。 – Melvyn

+0

布魯諾,非常感謝。這是我想去的方法,所以很高興聽到。您建議爲該數據創建一個新模型,將文本字段直接添加到客戶表是否是一個壞主意?我正在閱讀[這裏](https://stackoverflow.com/questions/5268523/when-you-have-a-text-field-in-mysql-or-postgresql-should-you-put-it-in-a -separa)使用Postgres(我是)它在這種情況下仍然有效,但我想知道是否還有其他要考慮的事情? –

+0

就我而言,如果僅僅因爲它在語義上無關緊要,那麼我仍然會將它與客戶表保持一致 - 一個實現細節,使用db作爲丟棄數據的bitbucket - 您的客戶表保存關鍵業務數據。不僅如此,我還會在它的前面放置一個facade api,以隱藏它存儲在數據庫中的事實,因此切換到緩存後端或將此表移動到另一個數據庫將保持本地化實現更改。 –

0

每週4-5次看起來並不是一個很大的挑戰,但沒有人知道除了你有什麼樣的計算,你應該存儲多少數據,你有多少用戶等等。 如果你想用TextField實現它,它仍然是某種緩存系統,所以我建議首先使用django的緩存系統和數據庫後端。https://docs.djangoproject.com/en/1.11/topics/cache/#database-caching如果是TextField,你不能用1個查詢檢索數據,但是以後可以必要時用其他圖層替換數據庫。