【发布时间】:2020-01-29 17:10:11
【问题描述】:
我正在尝试在我的应用中构建即时消息功能,作为更大项目的一部分。
- 聊天可以有超过 2 个参与者(群聊)
- 如果参与者 A 删除了一条消息,参与者 B 仍然应该可以看到它(这就是我使用 Message Participants 表的原因)
- 同样适用于对话。
- 按照相同的逻辑,如果所有参与者都删除了对话/消息,则应将其从 DB 中删除。
问题:
恐怕这个架构太麻烦了,这意味着一旦应用获得一定的流量标记(1k 活跃用户?我猜),查询就会太慢
消息参与者将有每条消息的多条记录 - 聊天中的每个参与者都有一条记录。即时消息意味着它将涉及那些时间非常紧迫的写入。那不是问题吗?
是否应该添加一层 Redis DB 来管理聊天的活动会话的消息传递?它将存储最近的消息,并主动将 PostgreSQL 数据库与这些消息同步(也许与 postgresql 具有的异步事务功能?)
更新架构:
- 我也很乐意听到有关“读取”状态功能的想法。我假设群组聊天要复杂得多,所以至少为 1:1 聊天提供这个功能会很好。
【问题讨论】:
-
您使用什么工具制作这些图表?我真的很喜欢美学
标签: postgresql database-design schema chat instant-messaging