在很多**系統(如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 傳送...
站內信設計
一 網上站內信技術方案 站內信 不同於電子郵件,電子郵件通過專門的郵件伺服器傳送 儲存。而 站內信 是系統內的訊息,說白了,站內信 的實現,就是通過資料庫插入記錄來實現的。站內信 有兩個基本功能。第一,點到點的訊息傳送。使用者給使用者傳送站內信 管理員給使用者傳送站內信。第二,點到面的訊息傳送。管理...
站內信設計
公司的電商平台要做個站內信。主要功能是給供貨商 經銷商 分銷員這些身份的人傳送訊息。比如供貨商修改了商品的 上架了商品等操作。需要通知到經銷商。經銷商可以在自己的站內信裡搜尋到訊息。照例都是先去網上找下成熟的站內信方案。大概找了幾種方案如下 以下是原文章 位址 一 網上站內信技術方案 站內信 不同於...