gpt4 book ai didi

mysql - GCM速度和DB设计冲突

转载 作者:行者123 更新时间:2023-11-29 12:32:48 26 4
gpt4 key购买 nike

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

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

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

就数据库设计而言,我相信这是正确的方法。然而,在通知发送中,如果我希望一百万用户在发送后几秒钟内收到通知,速度是一个主要问题。浏览 2 个表会显着增加处理时间(我测量 100 万用户浏览这两个表时需要 47 秒,而浏览 1 个表时需要 17 秒)。

问题是,将 GCM 注册 ID 也存储在 UNT 中是否正确,这样我就不必通过 UT 了?再说一遍... DB 设计方面它是不正确的,但 GCM 方面,它可能是最好的解决方案。如果您知道解决此问题的其他方法,我将很高兴听到。

谢谢

最佳答案

您始终可以决定冗余保存数据。是的,这意味着对数据进行非规范化,但当您需要快速访问许多数据(例如数据仓库中的数据)时,通常会这样做。

dbms 甚至通过 ON UPDATE CASCADE 来支持这一点。但GCM注册ID在表中必须是唯一的。

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

关于mysql - GCM速度和DB设计冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27226634/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com