【发布时间】:2016-04-02 20:56:21
【问题描述】:
我正在编写消息聊天系统,类似于 FB 消息。我没有找到方法,如何有效地存储对话列表(每行不同的用户,最后发送的消息最近在顶部)。如果我列出此表中的对话:
CREATE TABLE "conversation_list" (
"user_id" int,
"partner_user_id" int,
"last_message_time" time,
"last_message_text" text,
PRIMARY KEY ("user_id", "partner_user_id")
)
我可以从此表中为任何 user_id 选择对话。当发送新消息时,我们可以简单地更新行:
UPDATE conversation_list SET last_message_time = '...', last_message_text='...' WHERE user_id = '...' AND partner_user_id = '...'
但它当然是按聚类键排序的。我的问题:如何创建对话列表,按 last_message_time 排序,但 partner_user_id 对于给定的 user_id 是唯一的?
如果 last_message_time 是集群键并且我们删除该行并插入新行(以保持 partner_user_id 唯一),我将在表中有很多拇指石。
谢谢。
【问题讨论】: