GCM速度和数据库设计冲突

时间:2014-12-01 10:44:29

标签: mysql database database-design google-cloud-messaging

我很困惑,在这里寻找出路。我将不胜感激任何帮助:

我正在使用GCM从服务器向Android设备发送通知。在Mysql中,我有一个用户表(UT),其中包含用户ID,用户数据和GCM注册ID。我还有一个用户通知表(UNT),其中我存储了每个用户注册的通知类型。该表包括用户ID和通知类型ID。

发送通知时,我需要通过UNT并构建一个包含此类通知注册的所有用户ID的数组。然后我需要通过UT并获取每个用户的GCM注册ID并发送通知。

DB设计方面,我相信这是正确的方法。但是,在通知发送中,如果我希望一百万用户在发送通知后几秒钟收到通知,则速度是一个主要问题。通过2个表显着增加了处理时间(我通过两个表测量了100万用户47秒,而通过1个表时测量了17秒)。

问题是将GCM注册ID也存储在UNT中是否正确,所以我不必通过UT?再次......数据库设计明智不正确,但GCM明智,它可能是最好的解决方案。 如果你知道解决这个问题的其他方法,我会很高兴听到它。

谢谢

1 个答案:

答案 0 :(得分:1)

您始终可以决定冗余地保存数据。是的,这意味着对数据进行反规范化,但这通常是在您需要快速访问许多数据时完成的 - 例如在数据仓库中。

dbms甚至通过ON UPDATE CASCADE支持此功能。但GCM注册ID在表格中必须是唯一的。

  • 因此要么它在UT中是唯一的,那么只需在UNT中添加字段,填充它,并使用级联选项创建外键。
  • 或者它在UT中不是唯一的,那么你需要一个GCM表(无论如何你应该拥有它)然后将这个外键从UNT到GCM。 (但在这种情况下,您必须考虑它是否真的是您需要的用户通知表或GCM通知表或两者。)