java - 如何根据 FirstName 和 LastName 生成唯一的 Id?

标签 java mysql algorithm uniqueidentifier unique-id

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

我的思路:

<强>1。名字 + 姓氏 + mysql-auto-generated-id
在创建用户之前,API 无法知道自动生成的 ID。

<强>2。 Concat FirstName & LastName 并将其作为唯一 ID,如果数据库失败 并返回 id 违规错误,然后从 0 开始追加数字,直到找到有效的 Id。
它增加了数据库往返次数。

<强>3。名字 + 姓氏 + [随机整数]
它还增加了数据库往返。

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

<强>5。将当前时间戳与 FirstName + LastName 连接起来。
但是那个值也相当长。

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

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

最佳答案

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

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

    • 开始新的交易
    • 在此表上发出select for update
    • 如果没有行,则 count = 1 & insert;否则增加计数器并更新
    • promise

关于java - 如何根据 FirstName 和 LastName 生成唯一的 Id?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52615604/

相关文章:

algorithm - 给定两个未排序的数组,找到 A[i] > X 和 B[i] > Y 的对数

c - C中弹出中间元素

c++ - 在 [a,b] 间隔之间找到相同的数字

java - 如何影响反射中方法的顺序

java - 尝试获取具有相同扩展名的所有文件后 Activity 卡住

mysql - MySQL 中 SUM() 和 COUNT() 的区别

mysql - C# 插入所有行还是不插入?

java - 在扩展类上,我可以使用实现多个接口(interface)的类的 getter 和 setter

java - 如何将数组值随机放入另一个数组?

mysql - Rails 统计记录而无需再次查询