設計篇--站內信設計思路之己見(基於上百萬用戶)


大家都知道站內信,分為少量(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的用戶現在只會依據活躍用戶而占用存儲空間,而不活躍的用戶,根本不用再去為浪費的存儲空間而煩惱了。

看完之后,想必大家對站內信設計,也有自己的看法觀點,歡迎評價,提出您寶貴的意見,讓我學到更多考慮問題的角度,謝謝

 

轉載請注明出處,這是對作者寫的文章的肯定和支持,謝謝。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM