亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

不知道各位有什么更好的思路,比下面這個準確度更高的?

不知道各位有什么更好的思路,比下面這個準確度更高的?

拉莫斯之舞 2023-04-15 19:15:05
我們經常在項目中遇到的需求就是計算在一周內的記錄總數,而且這個數目是需要在列表頁出現的,所以用SELECT COUNT顯然不合適。但是如果你用緩存來做的話,因為這個值是根據你的當前時間不斷在變的,比如用戶在下午14:10來訪問這個頁面,那么我們要計算的就是從7天前的14:10到現在這段時間內的記錄總數。這是不可能緩存的,我不知道各位是怎么設計的。我有一個思路就是,還是用SELECT COUNT來統計,但是把它緩存住,一個小時更新一次。
查看完整描述

3 回答

?
藍山帝景

TA貢獻1843條經驗 獲得超7個贊

你要不創建一個trigger和一張表用來記錄行數,如果你的入數據庫的量不大的話。 比如
ON INSERT UPDATE counter SET table_name_count = table_name_count + 1 ;
然后前臺讀取的時候從那張表讀就是了。

不過也要看你用的是什么SQL了, MySQL的 MyISAM 對這個問題是做了優化的; 就直接SELECT COUNT就是了。


查看完整回答
反對 回復 2023-04-19
?
縹緲止盈

TA貢獻2041條經驗 獲得超4個贊

維護一個隊列,隊列的每個元素是記錄產生的時間:

1. 每當一個新紀錄產生時,入隊。更新隊列的元素總數。

2. 每當來一次查詢的時候,計算起始時間t,將所有小于t的記錄出隊。更新隊列的元素總數。返回隊列的元素總數。

優點:高效、精確。
缺點:占用一定的內存,對于100萬個元素需要約4MB的內存空間。

p.s. 這個算法可以很容易地用mysql表來實現。


查看完整回答
反對 回復 2023-04-19
?
函數式編程

TA貢獻1807條經驗 獲得超9個贊

不斷變化,還是count比較好吧,你緩存還不要斷更新緩存。
因為這個值是根據你的當前時間不斷在變的。
還有你實際上每時每刻都要重新計算,因為14:00訪問,14:01訪問,14:02訪問得到的數據都需要重新計算,都可能發生變化。
不過要是只是統計7天的數據,你倒是可以緩存一下,當前時間超過7天的就從緩存中刪除,然后不斷更新對應時間段的緩存。
可是有一個問題,如果按照時間段來緩存count,你可能會同時更新n個緩存。

查看完整回答
反對 回復 2023-04-19
  • 3 回答
  • 0 關注
  • 193 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號