2015-05-26 63 views
1

我的Android应用程序与对话MySQL后端使用PHP API。该应用程序允许读者关注不同的作者,并在他们关注的作者之一收到通知后提交文章。使用MYSQL和PHP的通知系统

现在我正在通过为每个作者的每个追随者存储一条新记录来做到这一点。即:如果具有1000个关注者的作者提交了一篇文章,则会添加1000个新行,其中seen列设置为FALSE

现在,当移动应用程序请求看不见的通知时,我只能显示那些记录,将seen设置为TRUE

但是,这有些困难。例如,一群拥有300k +追随者的作者将创建大量的行。

这仅仅是这样的系统的成本?还是有更高效的方式来处理这个,也许是从应用程序的一方?

Table : posts (Only the relevant columns) 
------------- 
id : INT(10) PK,NN,AI 
author_id : INT(10) NN,UN 


Table : followers 
----------------- 
id : INT(10) PK,NN,AI 
author_id : INT(10) NN,UN 
user_id : INT(10) NN,UN 

Table : notifications 
--------------------- 
id : INT(10) PK,NN,AI 
user_id : INT(10) NN,UN 
author_id : INT(10) NN,UN 
seen : VARCHAR(1) NN 

几个表格注释:

  1. 每一个用户跟随作者的时候,一个新行的followers表与读者的user_id创建的,而人的author_id所预订至。任何点的总行数将等于所有用户的跟随者总数。
  2. 当作者提交帖子时,会为notifications表中的每个关注者创建一个新行,其中seen列设置为FALSE。该应用程序然后发送另一个电话,以标记他们看到。这项工作是否会持续增加大量的数据?
  3. 当应用程序请求通知时,将检索notifications表中与当前用户有关的所有不可见行。

回答

2

有很多方法可以做得更好。这里有一个简单的方法 - 你可以使用时间戳。跟踪用户上次请求通知的时间。然后,当他们接下来请求通知时,查询时间晚于该时间的所有文章。那是他的通知。每个用户需要1行,或者每个用户需要1列,具体取决于您是否创建了新表格,或者是最后一次检查时间的新列。

+0

这是我尝试的第一件事,但我试图避免宣布在我上次检查之前所做的所有帖子都被读取。它造成了一个值得解决的问题,因为上述解决方案的额外开销。有什么办法可以克服吗? –

+0

当然,但他们还有很多工作 - 他们基本上是两者的混合体。这里的折衷是准确性,数据量和代码的复杂性。您也可以回到原来的解决方案,但基本上可以扭转局面 - 只有在用户访问文章时才添加一行。所以没有行=新的,行存在=看到。这将需要更少的行,但它们将根据需要添加。您也可以考虑通过在过去一周内仅通知通知文章来保存数据,因此可以删除超过1周的所有行。 –

+1

如果您决定采用混合路由来减少复杂性所使用的数据,请查看TCP如何使用滑动窗口跟踪哪些数据包已被查看以及哪些数据包正在处理。如果你忽略重发部分,它基本上是同样的问题。 –