【问题标题】:Messaging system. Question about database design消息系统。关于数据库设计的问题
【发布时间】:2011-09-06 07:48:42
【问题描述】:

我正在设计一个必须支持大量消息和用户的消息传递系统。

我在考虑两种解决方案。

Usertable -> id, username ....
Messagetable -> id, from_id, to_id, message ...

或者:

Usertable -> id, username ....
Messagetable -> id, message ...
HasMessagetable -> id, from_id, to_id...

我想知道解决这个问题的最佳方法是什么以及为什么。

另外,是否有关于大型数据库设计和最佳实践的优秀出版物(免费或免费)?

谢谢

【问题讨论】:

  • 请不要将数据库用作消息队列。请使用消息队列作为消息队列。有许多强大、可靠的消息队列解决方案可以直接开箱即用,无需您构建任何东西。
  • 您提出的问题相当基本,所以我认为您最好使用像 ActiveMQ 这样的即用型消息传递系统。
  • 无论如何我都需要将它们存储在数据库中以供将来参考,这不是聊天,它更类似于邮件系统。如果我遗漏了什么,您可以提供一个示例链接你的意思是什么?

标签: php mysql database database-design


【解决方案1】:

不久前我也做了同样的事情,并从方法 1 开始。但是用户应该能够向多个用户发送消息。如果 n 个收件人被寻址,方法 1 突然将每条消息保存 n 次。因此,如果这是可能的,我认为 2 更好。

【讨论】:

    【解决方案2】:

    您的第二个架构更加规范化。两者都可以接受。适当规范化的数据库设计更简洁,但出于性能原因,许多 DBA 求助于denormalisation。我会使用第二种模式,直到你遇到性能问题,在我非常拙见的情况下,这将是更好的方法。

    请注意,正如其他人所发布的那样,许多人通常认为标准化到这种程度是矫枉过正的。我是从 12 年前学习的习惯和旧的(现已过时的)DB 理论课程中这样做的。

    快乐编码

    【讨论】:

      【解决方案3】:

      一般来说,您需要做的连接越少,您的查询就会越好。因此,第一个选项可能是更好的选择,因为您将拥有一个非常大的数据库。

      基本上,您需要忽略一些数据库规范化技术才能获得所需的性能。但是,也尽量不要限制自己。例如,如果您的消息发送给多个人,您将需要选择选项 2 或找出不同的处理方式。

      关于大型数据库设计的资源,这里是 Microsoft SQL Server 的资源,但它讨论的很多内容都适用:

      http://sqlcat.com/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-26
        • 1970-01-01
        • 2011-10-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多