2009-09-28 151 views
2

跟蹤頁面瀏覽量的最佳方法是什麼?跟蹤唯一的頁面瀏覽量

示例:論壇中的主題,視頻網站中的視頻,Q/A腳本(SO)中的問題。

目前,我正在只是一個簡單的「意見」對每行我想計數的意見欄的方式,但是我知道這是不是最有效的方式。

而對於唯一視圖,我有一個單獨的表,其中包含「QuestionID」和「UserID」的一行。當用戶訪問問題/頁面時,我的代碼嘗試在視圖表中找到具有「UserID」和「QuestionID」的行,如果不行,則添加一行,然後增加問題的Views值「問題」表。

回答

1

您的存儲解決方案似乎是追蹤用戶的最佳方式。這些表格沒有冗餘數據,您的多對多關係由其自己的表格表示。

在另一方面: 對於您需要記錄自己的IP地址匿名用戶,並且你可以使用COUNT()SQL函數來獲得獨特的訪客這樣的數字,但即使和IP地址不是「唯一「本身。

1

首先,當你有存儲用戶ID-quesitonid對錶,這意味着你可以數得過來,加入意見欄是對標準化的,我想規則。

其他的事情是,我可以F5像我想,如果你不執行一個cookie的解決方案,如果沒有則添加行到表中。

,當涉及到IP地址的解決方案,這是遠遠形式是一個解決方案的話,那將塊,旋轉路由器背後的人。

我認爲(也實現現在),檢查餅乾,sessionIds,DB表給註冊用戶的解決方案,如果沒有發現,添加一行到表中。無論如何,Itr還會記錄SessionID和IP地址,但並不真正依賴它們。

0

如果您正在使用ASP.NET成員和匿名提供者爲匿名用戶,則每個匿名用戶,只要你說的Profile.Save()獲取aspnet_Users表格內創建一行。在這種情況下,您可以跟蹤查看特定頁面的匿名用戶和註冊用戶。所有你需要做的就是記錄aspnet_user的UserID和QuestionID。

但是,我強烈建議不要在數據庫級別這樣做,因爲它會炸燬數據庫。如果您有10,000個問題,1,000個註冊用戶和100,000個匿名用戶,並且假設每個用戶平均訪問10個問題,那麼您最終會在跟蹤表中擁有1M行。相當一些負載。

此外,在跟蹤表上執行一個SELECT COUNT()在數據庫上的工作量相當大,特別是你幾乎在你的論壇上的每個頁面視圖上執行此操作。最好的辦法是在每個問題的問題表上保留一個總計數器。每當你看到一個獨特的用戶頁面,你只需增加計數器。

也不要在跟蹤表中爲用戶表創建FK關係。你將需要清理aspnet_users表,因爲它隨着時間的推移堆積了很多匿名用戶,他們很可能永遠不會回來。因此,跟蹤頁面只需要具有userID字段,並且不需要FK。此外,您將不得不隨時清理跟蹤表,並且它將繼續獲得數百萬行。這就是爲什麼TotalView計數器需要在問題表中,並且從不使用SELECT COUNT()來計算顯示頁面時的視圖數量。

這是回答您的問題嗎?

+0

這個答案對您有幫助嗎? – oazabir 2011-05-18 10:52:23

相關問題