我正在设置谷歌云消息传递机制的服务器端,使用 MySQL 存储移动应用程序提供的注册 ID。鉴于 Google 最多可以发布 4k 个注册 ID,我不得不将它们存储在 TEXT 字段中。到目前为止一切都很好,问题是我必须处理这样的情况:
- 用户登录应用程序
- 该应用程序向谷歌请求注册 ID
- 应用将新的注册 id 发送到应用服务器
- 服务器存储该注册 ID 并将其链接到当前登录的用户
- 该用户注销并且新用户登录
- 应用程序向服务器发送与以前相同的注册 ID
- 服务器必须能够看到注册 id 已经在数据库中但链接到另一个用户
- 服务器将注册 id 与前一个用户取消链接,并将其链接到新登录的用户
所以问题是我必须确保数据库中注册 ID 的唯一性,但我无法为该 TEXT 字段添加唯一索引。
我能想到的可能解决方案:
- 计算注册 id 的哈希并强制该哈希是唯一的,但可能存在冲突。
- 我可以将唯一的设备 ID 与注册 ID 一起存储,并强制该设备 ID 是唯一的。我看到的问题是我不知道 android 设备 id 可以多长时间,而且我认为在某些情况下它不可用。
- 每次收到新的注册 ID 时,我都可以执行搜索,但我认为这最终会导致性能非常差的操作。
我确信我不是唯一面临这个问题的人,但我找不到好的解决方案。关于如何解决这个问题的任何想法?