postgresql 在Rails + Postgres中优化聊天排序- last_message_at与分组查询

093gszye  于 2023-06-22  发布在  PostgreSQL
关注(0)|答案(1)|浏览(134)

我目前正在为一个网络应用程序开发一个聊天功能。我们的技术堆栈包括后端的Ruby on Rails,API层的GraphQL和前端的Next.js。
我们的数据库中有两个相关的表:
|聊天|
| - -----|
| id|
| 创建者ID|
| 创建于|
| 更新_at|
| 标题|
| 最后消息|
|聊天_消息|
| - -----|
| id|
| 聊天ID|
| 用户id|
| 正文|
| 创建于|
| 更新_at|
我的目标是按照最近的活动**(即每个聊天中的最新消息)确定的顺序获取客户端的聊天记录。
我目前的方法是向Chats表添加一个last_message_at字段,每次发送新消息时都会更新该字段。这样,我们就可以按此字段对聊天进行排序,并获得所需的排序。
我的同事反对增加一个专栏。他建议在两个表之间使用分组查询来获得相同的结果。
我很想听听你对这些方法的看法。添加last_message_at列并在每个新消息上更新它是否更有效,或者我们应该使用分组查询来按最新消息对聊天进行排序?
潜在的性能影响是什么,特别是在可伸缩性方面
谢谢你!

pzfprimi

pzfprimi1#

为什么不检查给定聊天的created_at列?该列描述消息被发送并保存到DB(或相反)。例如,您与id: 1聊天,您只需查询所有包含chat_id: 1的聊天消息并命令它们created_at desc:ChatMessage.where(chat_id: 1).order(created_at: :desc)。如果要在SQL中执行此操作,可以用途:SELECT * FROM "chat_messages" WHERE chat_id = 1 ORDER BY created_at desc
也许我把问题搞错了,chat_message创建后不一定会发送。

相关问题