3

我想做私人聊天服务。现在我有一个关系数据库(PostgreSQL)来存储我的消息和线程(线程 - 用户之间的私人房间)。

我有以下表格:

1) 消息:idtextdatetimesender_idthread_idis_read

2)线程:id

3) Thread_Participants: thread_id , user_id

Message 表通过 Thread_Participants 表通过 Many_to_Many 关系与 Thread 连接。

在我的架构中,用户通过 WebSocets 和 Redis 数据库的 Pub/Sub 交换消息。

但在我看来,我需要将消息存储在关系数据库中,这样更安全。也许我错了。

但是我在获取用户线程的历史记录时遇到了问题。我想请求(关系数据库)以下字段:

线程 ID ,

last_message_in_this_thread ,

count_of_messages_in_this_thread

datetime_of_last_message_in_this_thread

username_of_last_message_in_this_thread

但是这样的请求意味着相当艰难和缓慢的请求......我怎样才能用快速的方式得到它?或者也许还有另一种消息方式或架构?

4

1 回答 1

0
last_message_in_this_thread
count_of_messages_in_this_thread
datetime_of_last_message_in_this_thread
username_of_last_message_in_this_thread

所有这些都可以缓存在线程表中。此查询将非常快,因为您不必加入/查询消息或用户表。唯一的缺点是:在每条新消息上,您现在必须进行两次写入而不是一次。

INSERT INTO messages(...) values (...);
UPDATE threads SET datetime_of_last_message = now(), count_of_messages = count_of_messages + 1 where id = 123;
于 2015-12-25T11:14:34.357 回答