大家都知道站內信,分為少量(10-999用戶),中量(1000-99999用戶),大量(100W用戶)不同的站內信架構,消耗存儲空間,和效率也是不同的。
本人基於最大的架構,來於大家共同討論,站內信這個小功能,究竟要怎么設計,才能更節約空間。下面是基於我個人的一些見解:
站內信的功能是:
1、用戶與用戶之間的交流,像郵件形式。
2、管理員給用戶發站內信。
3、管理員群發消息給所有的用戶(對於100W用戶,你要怎么做?)
開門見山,先看看我設計的數據庫表關系:
Message表:
MessageID:標識列; SendId:發件人id; RecId:收件人id; TextId:消息id; Status:標識已讀1/未讀0;
MessageText表:
TextId:標識列; Titel:標題; Text:信件內容; Time:發件時間;
SysMessag表:
SysID:標識列; CustomerID:用戶標識列; MessageID:消息標識列; SysStatus:系統消息已讀1/未讀0;
一個用戶需要接收多條系統信息,而每條系統信息則會有一個對應的消息狀態,所以這張表是對應沒條系統消息的一個狀態的判斷。
所有標識列都是主鍵
三張表關系就是這樣子:
表設計就是這個樣子,用到三張表。
現在需要來檢驗我的設計的時候了,假如,管理員給所用戶群發消息的發送id=0也就是RecId = 0
我需要在Message表中插入一條記錄,格式如同這樣子:
這條系統消息已經記錄在數據庫中
現在用戶都讀不到這條信息,現在模擬,假如有一個用戶登陸了帳號,接下來要做的就是:
1、首先讀取Recid中有沒有與該用戶Id匹配的消息,目前結果是沒有;
2、之后再匹配RecId=0的系統消息數量,現在有一條,MessageID=1;
3、然后就對系統消息表SysMessag 插入現有的一條記錄插入之后,也就像下面這樣:
SysStatus狀態默認為未讀0。
4、如果有多條信息的話,就執行多條插入操作,(什么?會有很多系統消息? 你見過系統消息有上百條?就算有上百條,數據執行100次插入 我想問題也不大吧? - -||)
5、最后取消息的總數Message+SysMessag,反饋給前台,現在是1。
模擬到此結束。 o(∩_∩)o
用戶已讀系統消息只能修改存於SysMessag 中的SysStatus的狀態,不能去修改Message表中的狀態,我想這個是可控的。
(什么?你說用戶發消息的時候輸入RecId=0?這個權限問題你不能控制? 那我真不知道說什么好了。^_^ )
有100W的用戶現在只會依據活躍用戶而占用存儲空間,而不活躍的用戶,根本不用再去為浪費的存儲空間而煩惱了。
看完之后,想必大家對站內信設計,也有自己的看法觀點,歡迎評價,提出您寶貴的意見,讓我學到更多考慮問題的角度,謝謝
轉載請注明出處,這是對作者寫的文章的肯定和支持,謝謝。