2010-08-28 274 views
1

我將爲文章創建查看計數器。我有一些問題:在ASP.NET MVC中查看計數器

  1. 我應該忽略,當他打開文章文章的作者 ?

  2. 我不想更新數據庫中的每個 時間。我可以在 Dictionary<int, int>(articleId,viewCount)中存儲 每篇文章的查看次數。 100 命中後,我可以更新數據庫。

  3. 我應該只爲每個用戶和文章數量命中每 小時一次。 (如果 用戶在一小時內打開一個文章多次 次,則查看次數 應該只增加一次)。

對於每個問題,我想知道你的建議如何做到這一點。

我特別感興趣如何做#3。我應該存儲用戶在Cookie中打開文章的時間嗎?這是否意味着我應該爲每個頁面創建一個新的Cookie?

回答

2

我想我知道了答案 - 他們正在分析的IIS日誌爲Ope宇宙建議。

隱藏圖像的src設置爲

http://stackoverflow.com/posts/3590653/ivc/[Random code] 

[隨機代碼]需要,因爲許多人可以共享相同的IP(網絡中,例如)和碼用於區分用戶。

+0

也許我會用同樣的方法。 – 2010-08-28 21:30:15

+0

我知道這已經有一段時間了,但是你有沒有想到同時這個[隨機代碼]的目的是什麼?我今天在這個主題上開始了一個新的問題:http://stackoverflow.com/questions/5633942/dissecting-stackoverflow-views-counter。也許你可以在那裏分享你的見解? – 2011-04-12 12:10:38

2
  1. 當然 - 我認爲這是一個好主意

  2. 和3的關係:問題是你會在哪裏實際存儲這個字典和邏輯。

ASP.NET應用程序或會話範圍當然是最簡單的選擇,但您真的需要了解應用程序池的邏輯。 ASP.NET應用程序會不時被回收:當網站在某段時間或特殊情況下沒有任何操作時 - 例如,如果進程開始佔用太多內存,則應用程序將關閉,並在下一個請求中啓動新應用程序。有會議和應用程序關閉的事件,但至少在幾年前,它們並不真正可靠:在許多特殊情況下,它們並不總是開火。也許他們現在更好,但是測試很痛苦。 1小時實際上是很長時間的:通常會話只在最後一次請求後的20分鐘內保持活躍狀態​​。

一個可靠的方法是將有一個單獨的Windows服務(很多工作方案),或者總是存儲到數據庫雙視圖分析(對於這樣一個小功能相當大量的開銷)。

您是否有權訪問IIS日誌?如何分析IIS日誌每30分鐘進行一次計時器處理並從那裏進行計數?或者,只需將所有匹配數據與用戶信息一起存儲到數據庫中,並使用類似的計時過程計算獨特匹配。

最後一個問題:你真的確定沒有成千上萬的反應用的/在互聯網服務不會做足夠接近你的要求的工作嗎?

祝你好運!

+0

我忘了提 - 字典將存儲在一個靜態屬性。 不,我沒有訪問IIS日誌。我想要一個像StackOverflow一樣的視圖計數器。 – 2010-08-28 13:12:50

1

這是Firebug中此頁面的屏幕截圖。您可以看到有一個返回204狀態碼的請求(無內容)。

這是stackoverflow的查看計數器。他們正在使用一個指向控制器動作的隱藏圖像。

我有很多文章。如何跟蹤用戶已經訪問過哪些文章?

P.S.順便說一句,爲什麼這個請求做了兩次?

alt text

+0

你確定嗎?我想你會在你輸入問題的詳細信息時更新查看計數器,就像這個頁面一樣。 – goenning 2010-08-28 18:52:34

+0

是的,這種圖像只存在於需要多個視圖的頁面上。 – 2010-08-28 19:02:45