【问题标题】:Database design for group messaging群组消息的数据库设计
【发布时间】:2015-06-01 22:18:29
【问题描述】:

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

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

在我看来会有三种方法。

  1. 将消息插入整个组的数据库。根据用户所属的组将消息发回给不同的用户。
  2. 将消息插入数据库中的每个组用户。所以循环成员并为每个成员插入。与第一种方法相比,这具有可以跟踪下载、读取和删除状态的优势。
  3. 为消息创建一个表,并为消息接收者链接创建一个表。但我不确定如何以最优化的方式查询一组用户的所有数据(下载、读取等)。这可以在单个查询中实现吗?

有人知道最好的方法是什么吗?我可以想象方法 2 会很快填满数据库,但方法 1 没有跟踪消息状态的能力。

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

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

问候,

罗恩

【问题讨论】:

    标签: php mysql database-design


    【解决方案1】:

    我会这样分开。

    消息

    id,消息,owner_id,已删除

    群组

    身份证,姓名

    Message_Group

    message_id, group_id

    用户组

    user_id, group_id

    那么您就不需要向该组中的所有用户添加消息。当您插入一条新消息时,您首先将其插入Messages,捕获 id 并将其插入Message_Group,并带有消息 id 和组 id。要获取组的消息,只需加入 Message_Group 和 Messages 即可。当然,您还需要加入用户表来捕捉谁写了该消息。

    【讨论】:

      猜你喜欢
      • 2011-04-19
      • 2019-05-28
      • 2011-08-25
      • 1970-01-01
      • 1970-01-01
      • 2016-05-25
      • 1970-01-01
      • 2018-02-20
      • 2011-01-18
      相关资源
      最近更新 更多