我目前正在將數據庫中的每個視圖與用戶IP,觀看日期等進行存儲。但是,我的網站有大量點擊,並且正在增加數據庫鎖定時間並降低性能。最佳觀點計數策略
我正在考慮將文件中的計數保存1小時,然後更新數據庫,但有人告訴我,我們不對重負載網站使用文件操作。
請爲我提供最佳策略。
注意:我不需要計算獨特的視圖。
我目前正在將數據庫中的每個視圖與用戶IP,觀看日期等進行存儲。但是,我的網站有大量點擊,並且正在增加數據庫鎖定時間並降低性能。最佳觀點計數策略
我正在考慮將文件中的計數保存1小時,然後更新數據庫,但有人告訴我,我們不對重負載網站使用文件操作。
請爲我提供最佳策略。
注意:我不需要計算獨特的視圖。
您的網絡服務器日誌已經爲您追蹤了大部分這些數據。
我建議每小時旋轉一次日誌,然後有一個計劃作業生成聚合統計並將它們存儲在數據庫中。
看起來很酷。我對服務器沒有太多瞭解,請告訴我在哪裏可以找到網絡服務器日誌 – 2012-04-12 18:17:19
您使用的是什麼Web服務器以及什麼操作系統? – 2012-04-13 08:19:12
直接在MySQL中保存和更新此信息應該沒有任何問題。每小時3000次點擊意味着每秒不到一個查詢。對此表使用InnoDB存儲引擎應該刪除鎖定問題。然而,InnoDB有很多選項,需要進行正確配置纔能有效地工作 - 這很重要。
根據您的意見,我認爲你正在尋找的結構將類似於:
id - page id
type - period length, could be 'day', 'week', 'month'
period - date when period starts, could be integer written as YYYYMMDD or YYYYMM
- depending on the contents of 'type' field
count - hit count for a url over given period
的主鍵是(type, period, id)
。在(id, period)
和(type, period, count)
高效而且指標:
SELECT *
FROM ...
WHERE type='week'
and period = 20120409
ORDER BY count DESC
在創建頁面,插入記錄每個時段用計數= 0。當頁面獲取一擊,運行一個簡單的更新:
UPDATE table
SET count = count + 1
WHERE id = $page_id
AND period IN (201204, 20120409)
它會更新「日」,「周」和「月」統計的所有三條記錄。
已經有一個非常有效的插件(儘管你需要使用數據對帖子進行排序等):BAW Post Views Count。它將所有內容存儲在postmeta中,因此很容易獲得,並將每日和其他總計保存在單獨的元條目中。我在幾個網站上使用它,每天有50,000頁面瀏覽量,並且不會減慢任何速度。
我認爲交易可能是好的。 – hjpotter92 2012-04-12 17:13:19
這是出於分析目的嗎?如果是這樣,您可能需要考慮使用Google Analytics或Jetpack等免費服務來追蹤視圖。 – 2012-04-12 17:26:56
我應該考慮使用APC緩存先緩存數據,然後在一些視圖之後將其更新到數據庫中...? – 2012-04-12 17:27:44