<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                [toc] ## :-: **需求** &emsp;&emsp;公司的電商平臺要做個站內信。主要功能是給供貨商、經銷商、分銷員這些身份的人發送消息。比如供貨商修改了商品的價格、上架了商品等操作。需要通知到經銷商。經銷商可以在自己的站內信里搜尋到消息。 ## :-: **站內信技術方案** &emsp;&emsp; 站內信”不同于電子郵件,電子郵件通過專門的郵件服務器發送、保存。而“站內信”是系統內的消息,說白了,“站內信”的實現,就是通過數據庫插入記錄來實現的。 - “站內信”有兩個基本功能。 - 1、點到點的消息傳送。用戶給用戶發送站內信;管理員給用戶發送站內信。 - 2、點到面的消息傳送。管理員給用戶(指定滿足某一 條件的用戶群)群發消息。點到點的消息傳送很容易實現,本文不再詳述。下面將根據不同的情況,來說說“站內信”的群發是如何實現的。 ### :-: **第一種情況:站內的用戶是少量級別的。(幾十到上百)** &emsp;&emsp; 這種情況,由于用戶的數量非常少,因此,沒有必要過多的考慮數據庫的優化,采用簡單的表格,對系統的設計也來的簡單,后期也比較容易維護,是典型的用空間換時間的做法。 &emsp;&emsp; 數據庫的設計如下: - 表名:Message - ID:編號; - SendID:發送者編號; - RecID:接受者編號(如為0,則接受者為所有人); - Message:站內信內容; - Statue:站內信的查看狀態; - PDate:站內信發送時間; &emsp;&emsp; 如果,某一個管理員要給所有人發站內信,則先遍歷用戶表,再按照用戶表中的所有用戶依次將站內信插入到Message表中。這樣,如果有56個用戶,則群發一條站內信要執行56個插入操作。這個理解上比較簡單,比較耗損空間。 &emsp;&emsp; 某一個用戶登陸后,查看站內信的語句則為: ``` sql   Select * FROM Message Where RecID=‘ID' OR RecID=0 ``` ### :-: **第二種情況:站內的用戶中量級別的(上千到上萬)** &emsp;&emsp; 如果還是按照第一種情況的思路。那發一條站內信的后果基本上就是后臺崩潰了。因為,發一條站內信,得重復上千個插入記錄,這還不是最主要的,關鍵是上千 乃至上萬條記錄,Message字段的內容是一樣的,而Message有大量的占用存儲空間。比方說,Message字段有100個漢字,占用200個字 節,那么5萬條,就占用200×50000=10000000個字節=10M。簡單的一份站內信,就占用10M,這還讓不讓人活了。 &emsp;&emsp; 因此,將原先的表格拆分為兩個表,將Message的主體放在一個表內,節省空間的占用 &emsp;&emsp; 數據庫的設計如下: - 表名:Message - ID:編號; - SendID:發送者編號; - RecID:接受者編號(如為0,則接受者為所有人); - MessageID:站內信編號; - Statue:站內信的查看狀態; - 表名:MessageText  - ID:編號; - Message:站內信的內容; - PDate:站內信發送時間; &emsp;&emsp; 在管理員發一封站內信的時候,執行兩步操作。先在MessageText表中,插入站內信的內容。然后在Message表中給所有的用戶插入一條記錄,標識有一封站內信。 &emsp;&emsp; 這樣的設計,將重復的站內信的主體信息(站內信的內容,發送時間)放在一個表內,大量的節省存儲空間。不過,在查詢的時候,要比第一種情況來的復雜。 ### :-: **第三種情況:站內的用戶是大量級的(上百萬),并且活躍的用戶只占其中的一部分** &emsp;&emsp; 大家都有這樣的經歷,某日看一個網站比較好,一時心情澎湃,就注冊了一個用戶。過了一段時間,由于種種原因,就忘記了注冊時的用戶名和密碼,也就不再登陸了。那么這個用戶就稱為不活躍的。從實際來看,不活躍的用戶占著不小的比例。 &emsp;&emsp; 我們以注冊用戶2百萬,其中活躍用戶只占其中的10%。 &emsp;&emsp; 就算是按照第二種的情況,發一封“站內信”,那得執行2百萬個插入操作。但是其中的有效操作只有10%,因為另外的90%的用戶可能永遠都不會再登陸了。 &emsp;&emsp; 在這種情況下,我們還得把思路換換。 &emsp;&emsp; 數據庫的設計和第二種情況一樣: - 表名:Message - ID:編號; - SendID:發送者編號; - RecID:接受者編號(如為0,則接受者為所有人); - MessageID:站內信編號; - Statue:站內信的查看狀態; - 表名:MessageText  - ID:編號; - Message:站內信的內容; - PDate:站內信發送時間; &emsp;&emsp; 管理員發站內信的時候,只在MessageText插入站內信的主體內容。Message里不插入記錄。 &emsp;&emsp; 那么,用戶在登錄以后,首先查詢MessageText中的那些沒有在Message中有記錄的記錄,表示是未讀的站內信。在查閱站內信的內容時,再將相關的記錄插入到Message中。 &emsp;&emsp; 這個方法和第二種的比較起來。如果,活躍用戶是100%。兩者效率是一樣的。而活躍用戶的比例越低,越能體現第三種的優越來。只插入有效的記錄,那些不活躍的,就不再占用空間了。 &emsp;&emsp; 以上,是我對群發“站內信”的實現的想法。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看