我想做私人聊天服务。现在我有一个关系数据库(PostgreSQL)用于存储我的消息和线程(线程 - 用户之间的私人空间)。
我有以下表格:
1)消息: id ,文字,日期时间, sender_id , thread_id , is_read
2)主题: id
3)Thread_Participants: thread_id , user_id
消息表通过Thread_Participants表与Thread by Many_to_Many关系连接。
根据我的架构,用户通过WebSocets和Pub / Sub of Redis数据库交换消息。
但在我看来,我需要在关系数据库中存储消息,这对安全性更好。也许我错了。
但是我在获取用户线程的历史方面遇到了问题。我想请求(关系数据库)以下字段:
的thread_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
但是这样的要求意味着相当艰难和缓慢的要求......我怎样才能以快捷的方式获得它?或者可能还有另一种消息方式或架构?
答案 0 :(得分: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;