我的应用程序是一个游戏,我需要每个用户都能够创建一个唯一的自然数字 ID 代码,该代码可以像 url 缩短器的工作方式一样双射转换为“短字符串”。“短弦”部分对于游戏来说非常重要。
我考虑过创建一个带有自动 id 键的子节点,该子节点存储自然数索引和短字符串,以及另一个包含自然数作为键和前一个自动 id 键的子节点。
我担心万一两个用户同时创建新 ID 时会出现竞争情况。理想情况下,我希望能够从 1000 开始递增 ID,以保持短字符串非常短。
有谁知道使用 firebase-database 解决此类问题的好方法?
我想将“短字符串”的长度保持在 6 个字符以下,并且仅使用数字、大写字母和连字符。(所以 34 个字符的字母表,为了清晰起见省略了 1、ls、Os 和 0)
也许这是不可能的,我将不得不使用 50 个字符的字母表来生成随机数并将其添加到每个键中。
一种想法是检查当前的最高密钥并生成一个随机数以添加到该随机数,但仍然不能保证两个用户不会获得相同的数字。
到目前为止,如果两个用户尝试同时生成新密钥,我必须防止竞争条件的唯一其他想法是保留在线用户的内部列表,并在每个用户的子节点中创建密钥并具有在发布到数据库之前有延迟......要求用户检查所有其他用户请求的密钥。
最后一个想法似乎很复杂并且容易出错,每次用户重新连接时都需要代码来检查列表,以防他们上次在线时丢失连接。
algorithm race-condition firebase firebase-realtime-database