2010-07-29 65 views
2

我正在爲我的報紙網站創建一個Django驅動的網站。如何最好地爲頁面的側邊欄生成「頂級文章」列表,這是我在獲取網站時遇到的最不明顯和常識性的任務。Django中動態創建的熱門文章列表?

首先想到的是某種數據庫列,它隨每個視圖而更新(基於什麼?)。這似乎(根據我的直覺)可笑的數據庫密集和不切實際,因此我想我想找到另一種解決方案。

謝謝大家。

回答

1

我會給celery試試(用django-芹菜)。儘管配置和用作緩存並不那麼容易,但它使您能夠像增加計數器一樣排列任務並在後臺執行它們。它甚至可以與高速緩存技術結合使用 - 在緩存中的增量計數器中定義PeriodicTask,然後定期運行,重置計數器並將它們寫入數據庫。

我只記得 - 我曾經發現this blog entry,它提供了一種很好的方式,用AJAX JS調用在數據庫中增加'viewed_count'(或類似的)列。如果你的交通不繁忙,這可能是個好主意?

在這篇文章中還提到django-tracking,但我不太瞭解它,我從來沒有用過它(但)。

0

如果您按照頂部視圖進行排序,那麼如果您在數據庫中爲視圖列編制索引,這將會很快。另一種選擇是每小時只收集前x篇文章,然後將這個值傳遞給Django的緩存框架。

關於緩存列表的好處在於,用於確定頂級文章的算法可以像您喜歡的那樣複雜,而不會在每個頁面視圖中都難以打開數據庫。 Django的緩存框架可以使用內存,數據庫或文件系統。我更喜歡DB,但其他許多人更喜歡內存。我相信它使用了pickle,所以你也可以直接存儲Python對象。這很容易使用,推薦。

0

一個索引不會幫助,因爲他們的主要問題我相信沒有那麼多得到排序列表有一個DB寫與每頁查看的文章。另一個指標實際上使問題變得更糟,儘管只有一點。

所以我會去緩存。我認爲django的緩存填充在這裏是一個問題,因爲它需要在所有鍵上超時。我不確定這是否是memcached強加的,如果不是的話,請使用redis。實際上,只要使用redis就可以了,python庫非常棒,我之前從django項目中使用過它,它具有原子增量和強大的排序功能 - 您需要的一切。

1

不成熟的優化,首先嚐試數據庫的方式,然後看看它是否真的太過數據庫敏感。任何體面的數據庫都有非常好的緩存,它可能無關緊要。即使這是一個問題,請看看這裏的其他數據庫/緩存建議。

很可能順便說一下,您將擁有比每個視圖更多的密集型db查詢,而不是簡單的視圖更新。