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

 

你們都知道站內信,分爲少許(10-999用戶),中量(1000-99999用戶),大量(100W用戶)不一樣的站內信架構,消耗存儲空間,和效率也是不一樣的。數據庫

本人基於最大的架構,來於你們共同討論,站內信這個小功能,究竟要怎麼設計,才能更節約空間。下面是架構

你們都知道站內信,分爲少許(10-999用戶),中量(1000-99999用戶),大量(100W用戶)不一樣的站內信架構,消耗存儲空間,和效率也是不一樣的。spa

本人基於最大的架構,來於你們共同討論,站內信這個小功能,究竟要怎麼設計,才能更節約空間。下面是基於我我的的一些看法:設計

站內信的功能是:blog

一、用戶與用戶之間的交流,像郵件形式。ci

二、管理員給用戶發站內信。it

三、管理員羣發消息給全部的用戶(對於100W用戶,你要怎麼作?)效率

 

開門見山,先看看我設計的數據庫表關係:權限

Message表:im

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表中插入一條記錄,格式如同這樣子:

這條系統消息已經記錄在數據庫中

如今用戶都讀不到這條信息,如今模擬,假若有一個用戶登錄了賬號,接下來要作的就是:

  一、首先讀取Recid中有沒有與該用戶Id匹配的消息,目前結果是沒有;

  二、以後再匹配RecId=0的系統消息數量,如今有一條,MessageID=1;

  三、而後就對系統消息表SysMessag 插入現有的一條記錄插入以後,也就像下面這樣:

    

    SysStatus狀態默認爲未讀0。

  四、若是有多條信息的話,就執行多條插入操做,(什麼?會有不少系統消息?  你見過系統消息有上百條?就算有上百條,數據執行100次插入 我想問題也不大吧? - -||)

  五、最後取消息的總數Message+SysMessag,反饋給前臺,如今是1。

模擬到此結束。     o(∩_∩)o

用戶已讀系統消息只能修改存於SysMessag 中的SysStatus的狀態,不能去修改Message表中的狀態,我想這個是可控的。

(什麼?你說用戶發消息的時候輸入RecId=0?這個權限問題你不能控制? 那我真不知道說什麼好了。^_^ )

有100W的用戶如今只會依據活躍用戶而佔用存儲空間,而不活躍的用戶,根本不用再去爲浪費的存儲空間而煩惱了。

相關文章
相關標籤/搜索