用于存储Android注册ID的数据库模式?

时间:2015-04-07 05:32:45

标签: android database schema google-cloud-messaging

字符串GCM注册ID的有效数据库架构应该与用户ID的链接有什么关系?我看过this question。它表明:

  
      
  • 为了存储注册ID本身,最好使用   VARBINARY(4096)专栏。如果编码,它比TEXT更有效   具有高效字符集的注册ID(例如UTF-8)。

  •   
  • 为了实现高效搜索,您还应该有一个额外的索引
      hash列(BINARY(32)) - 我们使用SHA-256摘要算法来获取   注册ID中的32字节哈希。哈希列不是   必须是独一无二的。碰撞应该是非常罕见的,即使他们是   发生时,您的查询将为您提供少量注册ID   它共享相同的哈希值,因此在测试中不会影响性能   你的Java代码,其中一个(如果有的话)实际匹配   您正在寻找的注册ID。

  •   
  • 如果您选择存储唯一的设备ID并根据它进行搜索,我会   建议您为每个设备分配自己的标识符。这
      标识符可以是(例如)BIGINT(java中的long)。你可以
      要求应用程序调用您的服务器以获得唯一的   首次启动时的标识符。您可以将其存储在外部   存储设备,以便卸载应用程序的设备   然后重新安装仍将具有相同的标识符。

  •   

但是,如果我遵循此设计,如果用户从设备注销并使用该帐户登录,则可能无法使用更新的user_id更新行,因为哈希中可能存在冲突。但是如果我不使用哈希,我不知道如何在其上创建索引。我该如何设计这样的数据库?谢谢!

1 个答案:

答案 0 :(得分:0)

实际上,您可以安全地忽略SHA256哈希值为4096字节数据的冲突风险。

有关碰撞风险的完整讨论,请参阅Is it safe to ignore the possibility of SHA collisions in practice?