我正在基于PHP,Mysql和Apache的项目上工作。

我有一个称为通知的模块,就像FACEBOOK中可用的通知一样,为此,我有3种方法

任何一个
我将每个更新插入到一个表中,其中包含需要通知这些更新的用户数量,即如果假设类别B有一些更新,并且此类别B包含100个用户,则我将为每个用户插入100行例如,通知表。

第二路

我所能做的就是在表中插入一个特定类别条目,然后对每个护理ID进行繁重的JOIN查询,以从多个表中获取所有记录以获取记录。

第三路

我在每次更新时都使用触发器,以便可以将其用于通知用户。

我相信这三种方式在某些时候都是有问题的。

现在,有谁能提出更好的主意,或者是更好的选择之一?

我担心网站的性能,因为它将有大量条目

谢谢

最佳答案

那有点棘手,然后我首先想到了:)

应用程序/用户行为如何?我们什么时候应该做大部分工作?是在插入数据时还是在获取数据时。

我将对最常见的操作进行假设。我认为获取数据会更加普遍,因为许多用户会看到未读消息的通知,但是只有一次“插入”一条新消息?

因此,我会把工作放在插入新的通知上,但是当用户开始涌向您的应用时,它仍然可能以糟糕的结果结束。

但是我认为必须在进行任何优化之前设置模型,这一点更为重要。以后可以使用denormalisation,调度等来管理优化。我不会真正接触触发器,它们有点时髦,恕我直言。

我还将提出另一种方法。

用户写了一条新消息:

  • 插入消息
  • 更新user_category(有很多)类别,当时已更新

    更新user_category SET last_changed ='NOW()'其中category_id =?;

  • 如何查找用户未读邮件:
  • 选择自上次用户查看以来已更新的类别(脏?)。
  • 从那些类别中选择所有不在“user_message_noticed”中的消息(请参阅下文)。

  • 在用户已读消息
  • 在耦合消息和用户的* user_message_noticed *模式中插入一行。类别ID在那里,因此我们可以更快地进行上述操作而无需额外的联接。

  • 在从该类别中读取的所有邮件中
    -用用户已阅读所有消息的日期更新* user_category™(有很多)。

    但是有时候,您无法真正摆脱实际工作。

    关于mysql - 选择一种方法而不是另一种方法从Mysql提取数据的复杂性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7006471/

    10-15 11:00