Ser*_*iuk 5 mysql sql database database-design scalability
假设我们有一个受欢迎的网站.我们需要在用户之间实现类似邮件的消息传递.典型的解决方案是使用2个表:
用户(user_id)
消息(message_id,sender_id(引用user_id),receiver_id(引用user_id),主题,正文).
该方法有2个显着的局限性
另一个解决方案使用3个表:
用户(user_id)
Sent_messages(sent_id,sender_id(引用user_id),主题,正文)
Received_messages(sent_id,receiver_id(引用user_id),主题,正文)
received_messages的主题和正文从sent_messages的相应字段中复制.
这种方法导致
所以这里提出问题:
谢谢!
PS我明白,在解决这些可伸缩性问题之前,网站必须非常成功,但我想知道如果需要该怎么做.
UPDATE
目前,对于第一个版本,我将使用Daniel Vassallo提出的设计.但如果将来一切正常,设计将改为第二个.感谢Evert减轻了我的担忧.
在将邮件发送给多个收件人的情况下,您可能希望避免多次复制邮件正文。这是您可能需要考虑的另一个选择:
用户(user_id)
消息(message_id、sender_id、主题、正文)
receive_messages(message_id、user_id、address_mode、已删除)
这种模式可能更像 Twitter,而不是电子邮件,但它可能有一些优点。
规则是:
以下是一些优点:
对于大多数应用程序,如果您对上述模型使用乐观隔离级别,即使您期望以每秒几个的速率交换消息,也不应该出现性能问题。另一方面,如果您预计每秒有数百或数千条消息,那么可能确实需要考虑其他选项。
| 归档时间: |
|
| 查看次数: |
300 次 |
| 最近记录: |