2011-05-11 35 views
2

爲了在我的網站上爲用戶添加統計信息和跟蹤,我一直在考慮保持瀏覽量和其他非常頻繁發生的事件的計數器的最佳方式。現在,我的網站顯然不是Facebook的大小來保證他們實施的一些策略(例如分片甚至不是必需的),但是我想避免任何公然愚蠢的錯誤。保持計數統計的最佳做法?

看來跟蹤最簡單的方法是在表中只有一個整數列。例如,每個頁面都有一個瀏覽量列,每個瀏覽量只增加1。這似乎可能是一個問題,如果人們點擊頁面的速度超過數據庫可以寫入的速度。

如果兩個人打的頁面在同一時間,例如,那麼previous_pageview數是相同的前兩個更新,並且每次更新將更新它是previous_pageview+1而非+2。不過,假設數據庫寫入速度爲10毫秒(這相當高,我相信),您需要的數據量爲每秒一百次瀏覽量或每天幾百萬次瀏覽量。

那好吧,那麼,對我來說只是增加一列?確切的數字不是太重要,所以在這裏和那裏有一些錯誤是可以容忍的。如果同一行有很多列,那麼一列上的更新語句會減慢嗎? (我的猜測是否定的)

我曾計劃使用單獨的非SQL數據庫來爲每個統計數據存儲pk_[stat]->value對,然後快速遞增,然後運行cron作業以定期更新MySQL值。這感覺像是矯枉過正;有人請讓我確信它是。

回答

6

UPDATE foo SET counter = counter + 1是原子的。即使兩個人同時擊中,它也能按預期工作。

+0

這種方法將足以滿足您的需求,非常快速等。 – Henry 2011-05-11 17:52:56

3

將查看次數放入輔助表格中,然後每晚(或以某個間隔)更新實際計數也很常見。

INSERT INTO page_view (page_id) VALUES (1); 

...

UPDATE page SET views = views + new_views WHERE id = 1; 

這應該是比X = X + 1快一點,但需要多做一些工作。