字符串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更新行,因为哈希中可能存在冲突。但是如果我不使用哈希,我不知道如何在其上创建索引。我该如何设计这样的数据库?谢谢!
答案 0 :(得分:0)
实际上,您可以安全地忽略SHA256哈希值为4096字节数据的冲突风险。
有关碰撞风险的完整讨论,请参阅Is it safe to ignore the possibility of SHA collisions in practice?。