Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于存储Android注册ID的数据库模式?_Android_Database_Schema_Google Cloud Messaging - Fatal编程技术网

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

用于存储Android注册ID的数据库模式?,android,database,schema,google-cloud-messaging,Android,Database,Schema,Google Cloud Messaging,对于与用户ID链接的字符串GCM注册ID,有效的数据库模式应该是什么?我读过。它建议: 为了存储注册ID本身,最好使用 VARBINARY(4096)列。如果你编码,它比文本更有效 具有有效字符集(如UTF-8)的注册ID 为了高效搜索,您还应该有一个附加的索引 哈希列(二进制(32))-我们使用SHA-256摘要算法来获取 来自注册ID的32字节哈希。哈希列不 必须是独一无二的。碰撞应该非常罕见,即使它们 如果发生这种情况,您的查询将为您提供少量注册ID 它们共享相同的哈希,因此在 您的Ja

对于与用户ID链接的字符串GCM注册ID,有效的数据库模式应该是什么?我读过。它建议:

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

  • 为了高效搜索,您还应该有一个附加的索引
    哈希列(二进制(32))-我们使用SHA-256摘要算法来获取 来自注册ID的32字节哈希。哈希列不
    必须是独一无二的。碰撞应该非常罕见,即使它们
    如果发生这种情况,您的查询将为您提供少量注册ID
    它们共享相同的哈希,因此在
    您的Java代码中哪一个(如果有的话)与 您正在寻找的注册ID

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


但是如果我遵循这种设计,如果用户从设备注销并使用该帐户登录,我可能不会使用更新的用户id更新行,因为哈希中可能存在冲突。但是如果我不使用散列,我不知道如何在上面创建索引。我应该如何设计这样一个数据库?谢谢

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

有关碰撞风险的完整讨论,请参阅