如何根据firstname和lastname生成唯一的id?

z8dt9xmd  于 2021-06-20  发布在  Mysql
关注(0)|答案(5)|浏览(589)

类似的问题已经被问过了,但是我的问题和一些研究结果有很大的不同。
在注册网站时,我提供
名字:ajay,姓氏:kumar
现在后端api需要从这两个文本中创建一个惟一的id。为什么?
是的,我使用了autoincrement integer列来存储用户id,但是这是唯一的\u id,它将显示在用户配置文件页面的url中,就像大多数网站(fb、twitter、quora)所做的那样。我认为它有助于搜索引擎优化的人的个人资料。
在我的脑海里:
1firstname+lastname+mysql自动生成id
在创建用户之前,api无法知道自动生成的id。
2concat firstname&lastname并将其作为唯一id,如果db失败并返回id冲突错误,则开始追加从0开始的数字,直到找到有效的id。
它增加了数据库的往返次数。
三。名字+姓氏+[随机整数]
它还增加了数据库的往返次数。
4使用连接到firstname+lastname的uuid。
因为uuid是128位的,所以它相当长,我需要对它进行子串。这可能再次导致重复的ID
5将当前时间戳与firstname+lastname串联。
但这个值也相当长。
最有效的方法是使用uuid和子字符串4-5个起始字符。如果已获取唯一标识,请尝试使用另一个uuid。我认为这是最好的情况下,减少数据库往返以及。
我很想知道网站是如何处理的(除了数据库递归调用,直到找到一个有效的唯一id)?在唯一id中有适当的数字分配(例如在quora中)。例如 tim-cook-1 , time-cook-2 .

7lrncoxx

7lrncoxx1#

您可以使用以下生成器并选择您的唯一字符串必须附加到firstname姓氏-[uniquenumber]的长度
https://alex7kom.github.io/nano-nanoid-cc/?alphabet=0123456789defghijklmnopqrstuvwxyz&size=8&speed=1000&speedunit=second
如果您对数据库中的firstname姓氏-[uniquenumber]字段进行唯一约束,则可以检测到冲突,然后重新生成uniquenumber。

4smxwvx5

4smxwvx52#

uuid是一个很好的工具。您也可以在使用node.js时尝试加密模块

exdqitrt

exdqitrt3#

我假设您使用的是mysql。以下是处理并发请求的可能解决方案:
创建表 (first_name, last_name, count) 当您收到新的用户注册请求时:
开始新事务
问题a select for update 在这张table上
如果没有行,则count=1&insert;else增量计数器更新(&U)
犯罪

txu3uszq

txu3uszq4#

您只需从数据库中获取记录的count+1,firstname为'arjun',lastname为'kumar',然后添加到您的用户名
它将以这种模式创建用户名
阿琼-库马尔-1
阿琼-库马尔-2
阿琼-库马尔-3
...

enxuqcxy

enxuqcxy5#

我看不出这里有什么问题。保存对象,然后根据名称和已经存在的id创建url并将其返回给客户机。您甚至不必单独存储唯一的id,因为您可以随时从其他三个字段轻松地构建它。

相关问题