【问题标题】:Chat schema Design for deleting messages用于删除消息的聊天模式设计
【发布时间】:2021-11-27 17:48:42
【问题描述】:

我正在为约会应用程序制作聊天服务,我需要为此设计架构。我的堆栈很卑鄙。使用 socket.js 进行实时通信。我必须设计我的聊天应用程序,比如 whatsapp。就像我需要whatsapp临时(一侧删除)和永久删除(双方都删除,然后它也会从内存中删除)。问题是我应该如何实现这个?

因为我的应用始终是一对一聊天。我想像使用键“动作”来删除功能,默认为空。

如果一个用户(假设 user1)从其一侧删除一条消息,那么我会将其标记为“DELETED/user1”。然后在获取消息时。我不会将此消息发送给该用户。 如果该消息也被其他用户删除或删除为“DELETE FOR ALL”(如 uuser1 的 whatsapp),那么我会将字段标记为“DELETED/ALL”。

我的另一个想法是维护两个事实来源。 就像为每个用户维护两个相同对话的记录。

如果 user1 删除,那么它会从 user1 的对话中删除 msg。

如果 user2 删除,那么它会从 user2 的对话中删除 msg。

如果 user1 删除为“DELETE FOR ALL”,那么它将从两个对话中删除 msg。 这种方法的问题在于,将来我必须执行两次操作,例如喜欢 msg、编辑 msg 等。

你对这个问题有什么建议?

提前致谢!

【问题讨论】:

    标签: mongodb schema chat system whatsapp


    【解决方案1】:

    由于您的聊天是一对一而不是群聊,因此建议在这种情况下使用多字段

    如果 user1 是 from 并且他删除了消息,那么数据会是这样的

    fromDelete: true
    toDelete: false
    

    如果 user2 是 to 并且他删除消息,则数据将是这样的

    fromDelete: false
    toDelete: true
    

    如果 user1 是 to 并且他删除 all 消息,则数据会像

    fromDelete: true
    toDelete: true
    

    这样做,您可以更轻松地修改查询数据。

    以后想加edit或者like也可以用这个方法

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-18
      • 2016-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多