2015-06-01 35 views
2

只是一個關於向羣組發送消息的最佳方式的問題(如WhatsApp羣組消息)。針對羣組消息的數據庫設計

我將每個組的成員保存到一個單獨的數據庫表中,一旦用戶向該組發送消息,它將從該表中檢索用戶。我有點卡在第二部分:

正如我看到它會有三種方法。

  1. 將消息插入到整個組的數據庫中。根據他們所屬的組將消息發回給不同的用戶。
  2. 將消息插入組中的每個用戶的數據庫中。因此循環成員併爲每個成員插入。這比第一種方法的優點是可以跟蹤下載,讀取和刪除狀態。
  3. 爲消息創建一個表,併爲消息收件人鏈接創建一個表。但我不確定如何以最優方式查詢爲一組用戶檢索所有數據(下載,讀取等)。這可能在一個單一的查詢?

有人會知道最好的方法是什麼嗎?我可以想象,方法2將很快填滿數據庫,但方法1不具備跟蹤消息狀態的能力。

此刻我正在使用方法1,但遇到了用戶刪除消息時的問題。它仍然會在其他設備上返回,因爲沒有簡單的方法爲羣組消息設置特定的已刪除標誌。

有誰知道電報,whatsapp等應用程序如何做到這一點?方法2會在數百萬條消息被髮送後給出問題嗎?

問候,

羅恩

回答

2

我會單獨像這樣。

消息

ID,消息,owner_id,刪除

ID,名稱

Message_Group

MESSAGE_ID,GROUP_ ID

USER_GROUP

USER_ID,GROUP_ID

然後,你可以不需要一個消息組中添加的所有用戶。當您插入新消息時,首先將其插入Messages,獲取該ID並使用消息ID和組ID將其插入Message_Group。要獲取組的消息只需加入Message_Group和Messages,並且您已完成大部分工作。當然你也需要加入用戶表來捕捉誰寫了這些消息。