假设我们有一个热门网站。我们需要在用户之间实现类似邮件的消息传递。 典型的解决方案是使用2个表:
用户(user_id)
消息(message_id,sender_id(引用user_id),receiver_id(引用user_id),主题,正文)。
此方法有两个显着的局限性
另一个解决方案使用3个表:
用户(USER_ID)
已发送消息(sent_id,sender_id(引用user_id),主题,正文)
Received_messages (sent_id,receiver_id(引用user_id),主题,正文)
received_messages的主题和正文从sent_messages的相应字段中复制。
此方法导致
所以在这里提出问题:
谢谢!
P.S。我知道在解决这些可扩展性问题之前,网站必须非常成功,但我想知道如果需要该怎么做。
更新
目前,对于第一个版本,我将使用Daniel Vassallo提出的设计。但如果将来一切正常,设计将改为第二个。感谢Evert减轻了我的担忧。
答案 0 :(得分:3)
在向多个收件人发送邮件的情况下,您可能希望避免多次复制邮件正文。这是您可能需要考虑的另一个选项:
用户(user_id)
消息(message_id,sender_id,subject, 体)
received_messages (message_id,user_id,address_mode,已删除)
这种模式可能比电子邮件更像推特,但它可能带来一些优势。
规则是:
这些是一些优点:
对于大多数应用程序,如果对上述模型使用乐观隔离级别,即使您希望以每秒几个的速率交换消息,也不会出现性能问题。另一方面,如果您期望每秒有数百或数千条消息,那么考虑其他选项可能就是这种情况。
答案 1 :(得分:1)
一般来说,数据库大小不会太大。速度更重要。
因此,我很想去选项二。就像你提到的那样,它使得删除消息变得更容易,而且我很确定这是一种非常常见的方法。