存储线程化对话的优化方式?

问题描述:

我们设计一个架构中存储的谈话(一对多)...存储线程化对话的优化方式?

我们使用下表(和列)

  1. messages_table - MESSAGE_ID,SENDER_ID(USER_ID),时间戳,REFERENCE_ID
  2. 收件人 - MESSAGE_ID,recipient_id(USER_ID)
  3. unread_status_table - MESSAGE_ID邀请,USER_ID

我们stori ng消息放入消息表中,并且reference_id存储启动线程的消息ID。

未读状态表仅保存未读的消息。

我不确定我们是否应该为未读消息使用单独的表,好处是,如果读取了所有消息,表是空的。

请帮我:)

+1

空表如何成为优势?收件人表上的“状态”标志有什么问题? –

我不认为这是一个单一的答案,这样的问题。这一切取决于多少用户,多少对话,您拥有的硬件,系统对用户的响应要求等等。如果通过没有第二张未读邮件表获得足够的表现,那么这可能是更好的路线。尽可能简化。

我的想法是,如果我有第二个表,它可能不会用于未读消息。相反,在非常高并发的情况下,该表除了主键之外没有索引,并且新消息将被推入其中。即使有大量新消息进入时,它也应该允许非常快速的操作。然后,可以定期运行作业以读取少量记录,并将它们推入操作较慢的主表中,然后从第二个表中删除它们表。这意味着用户可以继续创建新邮件并且系统保持响应,但是可能会有一段时间,直到收件人看到邮件。

但是,只有当您看到性能需要时才需要此方法。