组消息传递的数据库设计

时间:2015-06-01 22:18:29

标签: php mysql database-design

关于向群组发送消息的最佳方式的问题(如whatsapp群组消息)。

我将每个组的成员保存到一个单独的数据库表中,一旦用户向该组发送消息,它就会从该表中检索用户。我有点卡在第二部分:

我认为会有三种方法。

  1. 将邮件插入整个组的数据库中。根据他们所属的群组将消息发回给不同的用户。
  2. 按组的每个用户在数据库中插入消息。因此,循环成员并插入每个成员。这比第一种方法具有优势,可以跟踪下载,读取和删除状态。
  3. 为消息创建一个表,为消息收件人链接创建一个表。但我不确定如何以最佳方式查询以检索一组用户的所有数据(下载,读取等)。这可能在一个查询中吗?
  4. 有谁知道最好的方法是什么?我可以想象方法2会很快填满数据库,但方法1无法跟踪消息的状态。

    目前我正在使用方法1,但我遇到了用户删除邮件时遇到的问题。它仍将在其他设备上返回,因为没有简单的方法为组消息设置某个已删除的标志。

    有谁知道电报,whatsapp等应用程序是如何做到这一点的?当数百万条消息被发送时,方法2会不会出现问题?

    此致

    罗恩

1 个答案:

答案 0 :(得分:2)

我会这样分开。

讯息

id,message,owner_id,已删除

<强>组

id,name

<强> Message_Group

message_id,group_id

<强> USER_GROUP

user_id,group_id

然后,您无需向该群组中的所有用户添加消息。当您插入新消息时,首先将其插入Messages,捕获ID并将其插入Message_Group,并带有消息ID和组ID。要获取组的消息,只需加入Message_Group和Messages,即可完成。当然,您还需要加入用户表来捕获谁编写了该消息。