首页 > 解决方案 > 如何根据 FirstName 和 LastName 生成唯一 ID?

问题描述

已经提出了类似的问题,但是我的问题与对其进行的一些研究完全不同。
在注册网站时,我提供
FirstName : Ajay, LastName : Kumar
现在后端 API 需要从这两个文本创建一个唯一 ID。为什么?
是的,我使用了自动增量整数列来存储用户 ID,但这是将显示在用户个人资料页面的 URL 中的唯一 ID,大多数网站(fb、twitter、quora)都是这样做的。我认为它有助于 SEO 搜索人们的个人资料。

我心目中的做法:

1. FirstName + LastName + mysql-auto-generated-id
API 在创建用户之前无法知道自动生成的ID。

2. Concat FirstName & LastName 并将其作为唯一 id,如果 DB 失败并返回 id 违规错误,则开始从 0 开始附加数字,直到找到有效的 Id。
它增加了数据库往返。

3. FirstName + LastName + [随机整数]
它还增加了数据库往返。

4. 使用连接到 FirstName + LastName 的 UUID。
由于 UUID 是 128 位的,这很长,我需要对其进行子串化。这可能再次导致重复的 ID

5. 将当前时间戳与 FirstName + LastName 连接起来。
但是这个值也很长。

我最有效的方法是使用 UUID 和子字符串 4-5 个起始字符。如果唯一 ID 已被占用,请尝试使用另一个 UUID。我认为这也是减少数据库往返次数的最佳选择。

我很想知道网站如何处理这个问题(除了这个数据库递归调用,直到找到一个有效的唯一 ID)?unique-id 中有正确的数字分配(例如在Quora中)。例如tim-cook-1time-cook-2

标签: javamysqlalgorithmuniqueidentifierunique-id

解决方案


我假设您使用的是 MySQL。这是处理并发请求的可能解决方案:

  1. 创建表(first_name, last_name, count)
  2. 当您收到新的用户注册请求时:

    • 开始新的交易
    • select for update在这张桌子上发出 a
    • 如果没有行,则 count = 1 & insert; 否则递增计数器和更新
    • 犯罪

推荐阅读