簡單的站內消息
分表來設計。把msg內容存另一張表
表msg_send:
ID、發送者ID、接收者ID、msg_id(消息內容ID)、閱讀狀態、delete_time(是否刪除)
表msg_content:
msg_id、title、content
適合群發不規則用戶的站內消息
如群發不是所有人,不是某類人,而是根據有訂單或積分>200的不規則用戶,適合此項
表msg_send:
ID、發送者ID、所有接收者IDS、msg_id(消息內容ID)、date
表msg_content:
msg_id、title、content
表msg_status:
用戶id、msg_id、del刪除狀態
查詢用戶A的所有消息ID
$send_ids=查詢msg_send表,條件: 接收者IDS
like ',uid,', 返回:msg_send的ID列
根據A的所有消息ID,查詢消息內容
查詢msg_content表
根據A的所有消息ID,查詢消息狀態
查詢msg_status表關聯msg_content表,條件msg_id in $send_ids and 用戶id=uid and del=0
返回結果都是已讀,對比后自然得出已讀未讀狀態
這樣的好處是群發一條100W人的消息,msg_send和msg_content都只各一條數據,msg_status已讀一人加一條,僵尸用戶不增加數據
msg_send存入所有接收者IDS格式為json的'[0,12,16,0]'
百萬級用戶量的站內信設計
2個表:消息表、用戶消息容器表
管理員發一條站內信,系統往站內信表插入一條數據,其中發送方式區分接收的對象(0為全體發送,1為只發送給注冊會員,2為只發送給企業會員,3為指定會員發送),這樣,發送給全體會員的一條站內信暫時只生成了一條數據。
前臺會員登陸或的時候,根據會員自身的會員類型(普通會員,企業會員)查詢站內信表中屬于自己的最新消息(根據自己所持消息的最新時間與消息表的發送時間做 比對)或(是否存在做對比),往消息容器中插入自身與所持消息的關聯數據,默認未未讀。