站內資訊設計

2021-06-29 13:36:04 字數 2093 閱讀 4408

在很多**系統(如cms系統,sns系統等),都有「站內信」的功能。

「站內信」不同於電子郵件,電子郵件通過專門的郵件伺服器傳送、儲存。而「站內信」是系統內的訊息,說白了,「站內信」的實現,就是通過資料庫插入記錄來實現的。

「站內信」有兩個基本功能。一:點到點的訊息傳送。使用者給使用者傳送站內信;管理員給使用者傳送站內信。二:點到面的訊息傳送。管理員給使用者(指定滿足某一條件的使用者群)**訊息。點到點的訊息傳送很容易實現,本文不再詳述。下面將根據不同的情況,來說說「站內信」的**是如何實現的。

第一種情況,站內的使用者是少量級別的。(幾十到上百)

這種情況,由於使用者的數量非常少,因此,沒有必要過多的考慮資料庫的優化,採用簡單的**,對系統的設計也來的簡單,後期也比較容易維護,是典型的用空間換時間的做法。

資料庫的設計如下:表名:message

id:編號;sendid:傳送者編號;recid:接受者編號(如為0,則接受者為所有人);message:站內信內容;statue:站內信的檢視狀態;pdate:站內信傳送時間;

如果,某乙個管理員要給所有人發站內信,則先遍歷使用者表,再按照使用者表中的所有使用者依次將站內信插入到message表中。這樣,如果有56個使用者,則**一條站內信要執行56個插入操作。這個理解上比較簡單,比較耗損空間。

某乙個使用者登陸後,檢視站內信的語句則為:

select * from message where recid=『id』 or recid=0

第二種情況,站內的使用者中量級別的(上千到上萬)。

如果還是按照第一種情況的思路。那發一條站內信的後果基本上就是後台崩潰了。因為,發一條站內信,得重複上千個插入記錄,這還不是最主要的,關鍵是上千乃至上萬條記錄,message欄位的內容是一樣的,而message有大量的占用儲存空間。比方說,message欄位有100個漢字,占用200個位元組,那麼5萬條,就占用200×50000=10000000個位元組=10m。簡單的乙份站內信,就占用10m,這還讓不讓人活了。

因此,將原先的**拆分為兩個表,將message的主體放在乙個表內,節省空間的占用

資料庫的設計如下:

表名:message

id:編號;sendid:傳送者編號;recid:接受者編號(如為0,則接受者為所有人);messageid:站內信編號;statue:站內信的檢視狀態;

表名:messagetext 

id:編號;message:站內信的內容;pdate:站內信傳送時間;

在管理員發一封站內信的時候,執行兩步操作。先在messagetext表中,插入站內信的內容。然後在message表中給所有的使用者插入一條記錄,標識有一封站內信。

這樣的設計,將重複的站內信的主體資訊(站內信的內容,傳送時間)放在乙個表內,大量的節省儲存空間。不過,在查詢的時候,要比第一種情況來的複雜。

第三種情況,站內的使用者是大量級的(上百萬),並且活躍的使用者只佔其中的一部分。

大家都有這樣的經歷,某日看乙個**比較好,一時心情澎湃,就註冊了乙個使用者。過了一段時間,由於種種原因,就忘記了註冊時的使用者名稱和密碼,也就不再登陸了。那麼這個使用者就稱為不活躍的。從實際來看,不活躍的使用者佔著不小的比例。

我們以註冊使用者2百萬,其中活躍使用者只佔其中的10%。

就算是按照第二種的情況,發一封「站內信」,那得執行2百萬個插入操作。但是其中的有效操作只有10%,因為另外的90%的使用者可能永遠都不會再登陸了。

在這種情況下,我們還得把思路換換。

資料庫的設計和第二種情況一樣:

表名:message

id:編號;sendid:傳送者編號;recid:接受者編號(如為0,則接受者為所有人);messageid:站內信編號;statue:站內信的檢視狀態;

表名:messagetext 

id:編號;message:站內信的內容;pdate:站內信傳送時間;

管理員發站內信的時候,只在messagetext插入站內信的主體內容。message裡不插入記錄。

那麼,使用者在登入以後,首先查詢messagetext中的那些沒有在message中有記錄的記錄,表示是未讀的站內信。在查閱站內信的內容時,再將相關的記錄插入到message中。

這個方法和第二種的比較起來。如果,活躍使用者是100%。兩者效率是一樣的。而活躍使用者的比例越低,越能體現第三種的優越來。只插入有效的記錄,那些不活躍的,就不再占用空間了。

站內信設計

站內信設計 1 message表 欄位名 型別 是否null id int 自增長 否 messageid int 否 sendid int 否 reclid int 否 readstatus int 否 sendstatus int 否 id 編號 messageid 訊息id sendid 傳送...

站內信設計

一 網上站內信技術方案 站內信 不同於電子郵件,電子郵件通過專門的郵件伺服器傳送 儲存。而 站內信 是系統內的訊息,說白了,站內信 的實現,就是通過資料庫插入記錄來實現的。站內信 有兩個基本功能。第一,點到點的訊息傳送。使用者給使用者傳送站內信 管理員給使用者傳送站內信。第二,點到面的訊息傳送。管理...

站內信設計

公司的電商平台要做個站內信。主要功能是給供貨商 經銷商 分銷員這些身份的人傳送訊息。比如供貨商修改了商品的 上架了商品等操作。需要通知到經銷商。經銷商可以在自己的站內信裡搜尋到訊息。照例都是先去網上找下成熟的站內信方案。大概找了幾種方案如下 以下是原文章 位址 一 網上站內信技術方案 站內信 不同於...