[英]Unread message count in a PHP app
我目前正在開發一個簡單的 PHP 應用程序,用戶可以在其中相互發送消息。 消息存儲在 SQL 數據庫中。 我想在每一頁的菜單中計算未讀消息的數量,以便用戶可以快速查看他們是否有新消息,而無需定期檢查收件箱。
雖然這可能是一個容易解決的問題,但我不知道最好的方法是什么,性能方面:
我所有的解決方案都是基於服務器的,因為我對 JS 不是很熟悉。 但是如果使用 JavaScript 存在更好的解決方案,那沒關系。
謝謝您的幫助 !
我建議第4個:
將新消息發送給用戶后,您將更新memcache
中的計數器。 您在客戶端創建簡單的 ajax 應用程序,每 X 秒發送一次請求。 在服務器端,您只需檢查是否有未讀消息。 在頁面刷新時,您不需要查詢數據庫,因為您從memcache
中獲取計數非常快。
如果我在 DB 中遇到瓶頸,這就是我所做的(在 90% 的情況下,DB 是任何數據庫驅動應用程序中最常用的部分)。
這就是我們通常在高負載的 web 站點上所做的事情:我們試圖避免任何 COUNTER 查詢。 如果不是,我們將數據庫非規范化以將計數器存儲在適當的表中作為另一列,例如,如果您不能使用memcache
,則將未讀消息計數器存儲為Users
表的列。
對於選項三,我會選擇 go,但我會添加memcached作為解決方案 4。
在每次頁面加載時執行一個普通的 SQL COUNT() 未讀消息(立即通知更改,但它可能會嚴重影響性能?)
只要你有一個像樣的表結構, COUNT() 是一個非常快的命令。 我不會緩存這個特定的命令。 相反,我會計算其他查詢,以確保您只在向他們顯示列表時返回您需要的數據。 例如,如果您只需要摘錄,我會確保執行以下操作:
SELECT id, author, msgdate, substring(body, 0, 50) from table where recipient = ?
代替
SELECT * from table where recipient = ?;
恕我直言。 最好讓客戶端 ping 服務器並發送一個 json 與未讀消息的數量。 mysql 的計數應該很快,所以我認為沒有理由不使用它。 只需過濾聊天 session 上的結果。
對於數據庫部分。 最好的方法是在你的 db 表中存儲一個 new_message 並將其默認為 1,並在消息加載后將其設置為 0。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.