java - 如何根据 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-1
,time-cook-2
。
解决方案
我假设您使用的是 MySQL。这是处理并发请求的可能解决方案:
- 创建表
(first_name, last_name, count)
当您收到新的用户注册请求时:
- 开始新的交易
select for update
在这张桌子上发出 a- 如果没有行,则 count = 1 & insert; 否则递增计数器和更新
- 犯罪
推荐阅读
- sql-server - SQL Server 收盘股票值到下个月的开盘股票
- c# - 来自 C# 中生成的电子邮件的链接资源图像未显示在 Android 电子邮件上
- ms-access - MS 访问 SwitchBoard 表单 DCount 错误上的多个计数器
- java - Java 9 模块如何解决与传递依赖相关的问题?
- javascript - 如何使用 javascript 创建具有多个 var 的 var 名称?
- reactjs - JSS 设置 RGB 背景颜色
- vba - 如何使用来自两个不同列的数据填充组合框下拉列表?
- go - golang连接池优化
- python - 除非我单击关闭(pygame),否则不会执行我的要求
- scala - 如何在交叉编译期间根据 Scala 版本包含或不包含?