如何根据FirstName和LastName生成唯一ID?

问题描述 投票:0回答:5

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

我心中的方法:

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

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

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

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

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

我最有效的方法是使用UUID和子串4-5开始字符。如果已经使用了unique-id,请尝试使用其他UUID。我认为这也是减少数据库往返的最佳选择。

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

java mysql algorithm uniqueidentifier unique-id
5个回答
1
投票

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

  1. 创建一个表(first_name, last_name, count)
  2. 当您收到新的用户注册请求时: 开始新的交易 在这张桌子上发一个select for update 如果没有行,则count = 1&insert;否则增加计数器和更新 承诺

0
投票

您可以从数据库中获取记录的计数+ 1,其中Firstname为'Arjun',Lastname为'Kumar',然后只需添加到您的用户名

它将在此模式中创建用户名

阿朱库马尔-1

阿朱库马尔-2

阿朱库马尔-3

...


0
投票

UUID是一个很好的工具。您还可以在使用node.js时尝试使用Crypto module


0
投票

我在这里看不到问题。保存该对象,然后从名称和已存在的ID创建URL并将其返回给客户端。您甚至不必单独存储该唯一ID,因为您可以随时从其他三个字段轻松构建它。


0
投票

您可以使用以下生成器并选择您附加到firstname-surname- [uniquenumber]的唯一字符串的长度

https://alex7kom.github.io/nano-nanoid-cc/?alphabet=0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ&size=8&speed=1000&speedUnit=second

如果对数据库中的firstname-surname- [uniquenumber]字段进行唯一约束,则可以检测到碰撞,然后再次重新生成单序列。

© www.soinside.com 2019 - 2024. All rights reserved.