2009-11-26 12 views
2

我想知道什麼是實現文章,產品等的熱門計數器的最佳方式。現在,如果有人訪問該頁面,計數器只會在數據庫中添加一個。如果有人刷新它的頁面不斷計數,誤導結果和不必要的讀取,寫道。如何實現文章上的獨特點擊

我想存儲他們的IP,但我不知道如何在mysql中建模。如果我爲每次打擊創建一個數據庫記錄,它將是巨大的。

我讀這篇文章: How to write an efficient hit counter for websites

最好的答案是使用日誌,然後更新此日誌數據庫。但話又說回來。

什麼是確定新命中的最佳方式,是IP還是其他變量。什麼是可接受的時間再次登錄特定用戶的命中。

也歡迎其他類型的實現。

回答

2

您也可以只存儲IP地址和首次登錄它的時間,並且只在時間足夠長時(也許30分鐘)時遞增,然後也增加與IP地址相關的時間。

+0

謝謝你的拼寫,對此感到抱歉。很好的答案,我想我可以在我的網站上使用這種方法。雖然我仍然有這樣的問題,如果最好將它寫入日誌或直接寫入數據庫。我讀過的文章建議寫入日誌會更好,因爲不會有數據庫鎖定。 – 2009-11-26 15:25:45

+0

我會與數據庫一起去,就像一個日誌那麼你有一個解析問題。這應該是一個非常快速的查找,因爲你可以把它放在一個帶有日期時間索引的表格中。如果您擔心使用觸發器,傳入ip addr和page/article,並讓觸發器做出決定。 – 2009-11-26 16:57:57

2

我想我只是用他們的會話ID來檢查。會話ID很容易獲得,並且不需要執行數據庫命中來檢索它。對我來說可以接受的時間是他們的下一次會議。在他們的會議中,我會跟蹤他們打的網頁。通過這種方式,數據庫中沒有任何內容可以檢查,數據在會話消失時消失。

+0

不錯的方法,我從來沒有想過使用會話ID。雖然在我的情況下這不是一個選項,但會話ID會不時變化。但是我會確保爲進一步的項目記住 – 2009-11-26 15:15:59

+0

會話ID的另一個問題是我可以打開firefox,opera,safari,ie和chrome並填充我的號碼,或者編寫一個自動程序來連接,轉到正確的文章,然後重新開始,新的會話,因爲它實際上並沒有堅持一個cookie,只是假裝,用htmlunit。 – 2009-11-26 16:59:34

1

最簡單的方法:當用戶第一次訪問時,遞增計數器併發送一個cookie。如果您檢測到cookie,請勿增加計數器。

0

這很棘手。這真的是不可能得到它100%正確的:

  1. 如果靠餅乾,當他們被刪除(1)會發生什麼,到期(1)或當他們被禁止(2)
  2. 如果您依賴IP,那些通過代理訪問您網站的人會發生什麼?有足夠的公司,ISP讓用戶只能通過代理(3)和/或(1)
  3. 會話Id:當它存儲爲cookie時,請參閱1.;當它不是時,每當用戶訪問您的站點時都會重置,而沒有設置會話Id GET/POST參數(1)(如果會話始終通過身份驗證過程綁定到用戶,這是不同的情況)

最常見的實現是使用cookie。請記住它並不完美。

(1),你會從同一用戶獲得多次點擊
(2)你會從相同的用戶獲得大量的點擊,如果不予處理,不允許餅乾客戶不同
(3)你只會得到一個來自多個用戶的打擊

相關問題