比如一個人對同一篇文章不停得重新整理,這樣不能算有效。我現在的想法是當使用者第一次瀏覽文章的時候存一個cookie,cookie裡有文章的id,有效期間一個小時,如果同一小時,該使用者訪問該文章,如果cookie存在則不記錄。不知道大家又沒有更加高端,友好的統計方式。
回複內容:
比如一個人對同一篇文章不停得重新整理,這樣不能算有效。我現在的想法是當使用者第一次瀏覽文章的時候存一個cookie,cookie裡有文章的id,有效期間一個小時,如果同一小時,該使用者訪問該文章,如果cookie存在則不記錄。不知道大家又沒有更加高端,友好的統計方式。
瀏覽記錄最好通過日誌來記錄,然後進行日誌分析即可,好處是非同步。
日誌記錄使用者ID,URL,訪問時間。然後簡單去做去重統計即可。
登入使用者:使用者ID+log+時間判斷
未登入使用者:用戶端IP+log+時間判斷
cookie也不錯的,如果要節約資源直接CNZZ統計、百度統計
cookie記錄不太合適,會造成request http header過大,現代瀏覽器可以用local storage儲存在用戶端,判斷是否存在文章id再進行計數的request
這種統計就交給CNZZ,百度統計,Google統計等第三方統計平台吧。
瀏覽量,單頁面瀏覽量,單人單頁面瀏覽量,老訪客,新訪客等等都能統計到,展現方式也很友好。
還能資料匯出。
可以採用bitmap思想:每篇文章對應一個bitmap,每個uid對應bitmap中的某offset,某uid訪問這篇文章,把uid對應的offset置為1。這樣就不會出現重複訪問的問題,而且有現成的方法計算值為1的bit的數量。如果網站訪問量不是很大的話,每篇文章對應的bitmap為128*128足夠了。這樣有點是簡單,缺點可能就是還有存在資源浪費。
自己做個事件記錄
用戶端:
檢測cookie,沒有就隨機產生一個作為客戶標識(uid),並將逾時設定很長很長....
js發送一條請求到事件記錄伺服器,參數:timestamp uid eventName eventValue
eventName 是事件名,比如 postVisit
eventValue是事件值,比如 <文章ID>
服務端:
1. 記錄事件到檔案,可以按時間比如10分鐘一個檔案
2. 寫個指令碼 定時(10分鐘)處理事件記錄檔案,根據eventName,eventValue 計算文章訪問量,然後更新資料庫中對應欄位(累加)
自由組合eventName,eventValue可以做多種事件統計
拋磚引玉一下,非同步請求,用bloomfilter後台判斷:
使用者登入用使用者id,使用者未登入,用IP+UA或者其他產生使用者標識
後台有一個bloomfilter的集合,用來判斷是否已存在