[請益] 如何有效率的處理"計數器"

看板PHP作者 (Will)時間16年前 (2009/06/30 01:25), 編輯推噓2(205)
留言7則, 4人參與, 最新討論串1/2 (看更多)
我的縮短網址服務 http://3b8.cc/ 當使用者用短網址跳址時,系統自動在 MySQL 加一筆資料當 log 然後使用者可以查詢短網址被使用次數 (SELECT COUNT(*)...) 當初沒想太多只想快快上線 但,隨著 log table 越來越大,查詢的時間變得越來越慢 log table 現有上百萬筆資料,每次 SELECT COUNT(*) 都要好久 我想換個處理方式: 加一個 counter 欄位,每當使用者跳址時,直接去讀取原值然後 +1 寫回去 這樣處理當量大的時候會不會有問題? 或是有沒更有效的處理方法呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 71.246.99.38

06/30 01:40, , 1F
應該還好吧... 因為update時應該會lock
06/30 01:40, 1F

06/30 01:55, , 2F
我覺得第二種比 重要性不夠高的 就另開欄位遞增
06/30 01:55, 2F

06/30 01:55, , 3F
第二種比較好 切到字
06/30 01:55, 3F

06/30 02:30, , 4F
不過讀取原值建議用counter=counter+1這種寫法
06/30 02:30, 4F

06/30 02:30, , 5F
不要讀進來php再寫回去,不然可能會有race的問題
06/30 02:30, 5F

06/30 10:32, , 6F
你想的第二種處理方式比較好。
06/30 10:32, 6F

06/30 20:57, , 7F
建議透過檔案快取,批次寫回資料庫
06/30 20:57, 7F
文章代碼(AID): #1AIFaW0E (PHP)
文章代碼(AID): #1AIFaW0E (PHP)