iT邦幫忙

2

請問像 IT幫、StackOverflow 防止文章洗人數作法?

請問像 StackOverflow 防止文章洗人數作法?

先分享我個人做法

目前是 mysql 的文章表格增加一個閱讀人數欄位
每次啟動時候都會去select * from article將資料讀到一個緩存內

每次一個請求進來,會將這個緩存閱讀人數 +1,而不是下 sql update 指令
當閱讀人數 +100 時才會去 sql update
原因是避免每一次請求就更新,造成 db 負擔

但這樣不能避免洗文章的動作

另外知道 session 方式跟 IP 方式,但這樣會造成AP伺服器的判斷負擔

有memory table可用... 定時才update回主表
archer9080 iT邦研究生 4 級 ‧ 2020-09-29 13:54:48 檢舉
去年討論及修正過的
參考
https://ithelp.ithome.com.tw/articles/10217609
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

6
japhenchen
iT邦超人 1 級 ‧ 2020-09-29 14:47:23
最佳解答

每個IP + 文章大樓ID + 觀看者帳號 → 24小時內只計1個觀看量

有人說,多申請N個帳號不就得了?

如果是我架站,我會把新手的觀看量乘以0.01計算,以級別往上乘

至於系統負擔,別想太多,只是運算,還沒存進資料庫,更何況主機不是只有資料庫可以短期存放變數,還有MemoryTable、再不然我也能存json進tmpfs用實體記憶體做的分區上,能存多少?幾GB沒問題,關機就不見了(再洗也沒有用)

(我還沒睡醒,所以當我在夢遊說夢話)

正一 iT邦新手 5 級 ‧ 2020-09-29 16:35:19 檢舉

我沒想分權重方式,這對我來說是新想法!

1

你的問題,說的很籠統。不清楚你是想問負載的問題。還是計數量的正確性問題。

就負載的問題來說,使用update完全不需要去思考負載問題。
畢竟你在點擊的同時。還需要做select處理。
順便做個update算還好。所以很少人會去思考這個問題。
一但量變大,select的影響度一定會大於update的影響度。
所以就算負載過大,也一定不會是計數update造成的影響。

但洗文章就得另當別論了。基本的做法有非常多個方式。cookie、session、ip....等等判斷。
這還得看行政問題。是要實際點擊數?還是文章view數等等來做處理。
實際點擊數就是不管三七二十一,有點就算。文章view數則是會依成員來做計數。

正一 iT邦新手 5 級 ‧ 2020-09-29 18:18:17 檢舉

感謝您,目前看起來簡單版還是直接 update + 1 最快

我要發表回答

立即登入回答