通知系统 - 读取与写入

时间:2014-09-07 16:56:17

标签: php sql

我考虑过两种类型的用户通知系统。

他们都有订阅表,用户订阅特定频道 下面的模式用于存储事件的表。

1。昂贵的写作

当新事物发生时:

|id| |type| |uid| |read| |created|  
 1    2       2      0     1234

当该频道发生新事件时,此系统会为订阅频道的每个用户插入一个新行。

缺点:

  • 如果有100万用户订阅了频道,则必须为频道中发生的每件新事物插入100万行。
  • 如果没有正确规范化,浪费空间,重复内容

优点:

  • 快速阅读时间
  • 简单实施

2。昂贵的阅读

当新事物发生时:

|id| |type| |created|
 1     2     1234

在这个系统中,它只为一个事件插入一行,即它不是特定于用户的。 然后,用户读取该表并检查该事件是否发生在他的订阅频道中,然后还比较创建的时间是否大于上次读取时间。

缺点:

  • 读取费用昂贵,因为用户必须进行大量过滤。
  • 用户特定事件无法轻易处理[例如。回复你的评论]
  • 图片中出现用户特定事件时的复杂实施。

优点:

  • 所需空间更少
  • 一对一插入事件,即插入时间较短。

您认为哪种情况更适合以下条件:

  1. 事件可以在一天内发生5到10次(即写作)。
  2. 每个用户每分钟检查一次新事件(即阅读)。

1 个答案:

答案 0 :(得分:1)

我建议结合你的方法。

有一个包含邮件的表,然后是另一个表,用于将这些邮件的每用户状态与用户相关联。例如,您的消息表可能非常简单:

  • ID
  • message(varchar / text)

你的另一张桌子可能有:

  • ID
  • MESSAGE_ID
  • USER_ID
  • 读(布尔)

然后,如果您有该用户的任何其他特定信息,您可以在原始邮件之外跟踪它。如果您更新该原始邮件,则仍会为所有用户更新。