2012-03-29 51 views
0

對於stackoverflow.com有一個問題的多少個視圖的統計。我如何獲得像stackoverflow視圖計數器的職位的查看計數?

它是如何跟蹤的?註冊和未註冊的用戶可以查看任何問題。

該計數的數據庫關係模式是什麼?

我應該只是增加數據庫表中特定問題的列值?

或者我應該添加一個新的記錄/行,當用戶查看該問題,然後顯示計數echo表結果(thatcolumn)該表?

+0

請,我們不能告訴你stackoverflow的結構。那是祕密=)。更具體地說,你的問題太籠統 – safarov 2012-03-29 20:23:23

+0

跟蹤頁面視圖。 – shibly 2012-03-29 20:29:43

回答

0

這有很多方法。有你提到的兩個,但也有其他的將取決於你的情況適合你更好。

如果你有很多點擊到你的網站,像stackoverflow一樣,當一個人查看問題時增加數據庫表上的計數器可能是非常昂貴的(取決於他們的數據庫如何設置我不確定)。

我以前使用的另一種方法是將視圖存儲在像memcache/xcache/eaccelerator之類的緩存引擎中(每個緩存引擎都有各自的優點),並且具有每小時/每晚/每秒運行一次的cron。這將清理視圖並插入SO.com情況下唯一ID所引用的數據庫表中的問題ID,並重置緩存中的計數器。

如果您想要總體可靠性,像mongoDB這樣的noSQL引擎在快速和有效的鍵值數據存儲方面會非常出色。

+0

爲什麼用該頁面/問題/帖子增加該行的價值是很昂貴的?在我提到的這兩種方法之間哪種方法更好?緩存引擎是否增加計數?什麼是緩存引擎的機制? – shibly 2012-03-29 20:38:05

+0

並不是說它很昂貴(可能很貴),但不知道你的系統可以。你的系統每秒能處理10,000次更新?看看我來自哪裏?緩存引擎不會增加計數,您讀取緩存,將其增加1,然後將其存儲在緩存中,以便下一個要增加視圖的人員。我不能說哪個更好,因爲我們不知道你的系統。如果你只有一個小時可以說500-1000次觀看的話,那麼增加列並不是一個壞方法。 – ncremins 2012-03-29 20:47:43

+0

第二種方式呢?爲每個視圖添加一個新的記錄/行,然後顯示該表的計數總和(thatcolumn)或計數(*)。 – shibly 2012-03-29 20:50:09

0

如果您只想查看問題的次數,我會在特定問題記錄中添加一個計數器。在每個問題視圖的另一個表格中輸入內容可能非常容易失控。

總結這些記錄只是爲了每次查看計數都會導致繁忙系統出現性能問題。

所以,爲了進一步解釋,我建議你在問題表中添加一個整數列。每次查看問題時,只需增加計數器即可。把事情簡單化。保持快速。

+0

你能解釋一下嗎?我無法理解你的答案。我應該增加每個視圖的行嗎? – shibly 2012-03-29 20:30:36