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