选择一种方法而不是另一种方法从Mysql中获取数据的复杂性

OM *_*ity 7 mysql triggers join database-performance

我正在开发一个基于PHP,Mysql,Apache的项目.

我有一个名为notification的模块,就像FACEBOOK中的Notification一样,为此我有3种方法

或者我将每个更新插入一个表,在需要通知这些更新的用户数中,即如果假设类别B有一些更新,并且此类别B包含100个用户,那么我将为相应的用户插入100行一个说法,通知表.

第二种方式

我可以做的只是在表中插入一个特定的类别条目,然后在每个这些Caregory ID上提交一个重的JOIN查询来获取多个表中的所有记录以获取记录.

第三种方式

我在每次更新时使用触发器,以便它可以用于通知用户.

我相信这三种方式在某些方面都存在问题.

现在任何人都可以建议任何更好的想法或哪一个是更好的选择?

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

谢谢

Sto*_*ojg 0

这比我最初想到的要棘手一些:)

\n\n

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

\n\n

我必须对最常见的操作做出假设。我认为获取数据会更常见一些,因为许多用户会看到未读消息的通知,但只有一个新消息的“插入”?

\n\n

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

\n\n

但我认为模型需要在任何优化之前设置,这更重要。稍后可以通过使用非规范化、调度等来管理优化。我不会真正接触触发器,恕我直言,它们有点时髦。

\n\n

我还将采取另一种方法。

\n\n

用户写一条新消息

\n\n
    \n
  • 插入消息
  • \n
  • 更新当时更新的 user_category (有很多)类别

    \n\n

    UPDATE user_category SET last_changed = \'NOW()\' 其中category_id = ?;

  • \n
\n\n

如何查找用户未读消息

\n\n
    \n
  • 选择自上次用户查看以来已更新的类别(脏?)。
  • \n
  • 从这些类别中选择不在“user_message_noticed”中的所有消息(见下文)。
  • \n
\n\n

用户已阅读消息

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

在从该类别读取的所有消息上\n - 使用用户阅读所有消息的日期更新 *user_category\xe2\x84\xa2 (有很多)。

\n\n

但有时,你无法真正摆脱实际工作。

\n