請問像 StackOverflow 防止文章洗人數作法?
先分享我個人做法
目前是 mysql 的文章表格增加一個閱讀人數欄位
每次啟動時候都會去select * from article將資料讀到一個緩存內
每次一個請求進來,會將這個緩存閱讀人數 +1,而不是下 sql update 指令
當閱讀人數 +100 時才會去 sql update
原因是避免每一次請求就更新,造成 db 負擔
但這樣不能避免洗文章的動作
另外知道 session 方式跟 IP 方式,但這樣會造成AP伺服器的判斷負擔
每個IP + 文章大樓ID + 觀看者帳號 → 24小時內只計1個觀看量
有人說,多申請N個帳號不就得了?
如果是我架站,我會把新手的觀看量乘以0.01計算,以級別往上乘
至於系統負擔,別想太多,只是運算,還沒存進資料庫,更何況主機不是只有資料庫可以短期存放變數,還有MemoryTable、再不然我也能存json進tmpfs用實體記憶體做的分區上,能存多少?幾GB沒問題,關機就不見了(再洗也沒有用)
(我還沒睡醒,所以當我在夢遊說夢話)
你的問題,說的很籠統。不清楚你是想問負載的問題。還是計數量的正確性問題。
就負載的問題來說,使用update完全不需要去思考負載問題。
畢竟你在點擊的同時。還需要做select處理。
順便做個update算還好。所以很少人會去思考這個問題。
一但量變大,select的影響度一定會大於update的影響度。
所以就算負載過大,也一定不會是計數update造成的影響。
但洗文章就得另當別論了。基本的做法有非常多個方式。cookie、session、ip....等等判斷。
這還得看行政問題。是要實際點擊數?還是文章view數等等來做處理。
實際點擊數就是不管三七二十一,有點就算。文章view數則是會依成員來做計數。