如何根据名字和姓氏生成唯一的ID?

时间:2018-10-02 20:03:42

标签: java mysql algorithm uniqueidentifier unique-id

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

我脑海中的方法

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

2。如果数据库失败,则使用Concat FirstName和LastName并将其作为唯一ID     并返回ID违规错误,然后开始附加从0开始的数字,直到找到有效的ID为止。
它增加了数据库往返次数。

3。名字+姓氏+ [随机整数]
这也会增加数据库往返次数。

4。使用串联到名字+姓氏的UUID。
 由于UUID是128位的,所以很长,我需要对其进行子字符串化。这可能再次导致ID重复

5。将当前时间戳与名字+姓氏串联在一起。
 但是这个值也很长。

我拥有的最有效的方法是使用UUID和子字符串4-5从中开始的字符。如果已经使用了唯一ID,请尝试使用另一个UUID。我认为这在减少数据库往返次数的情况下也是最好的。

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

6 个答案:

答案 0 :(得分:1)

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

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

    • 开始新交易
    • 在此表上发出select for update
    • 如果没有行,则计数= 1并插入;其他增量计数器并更新
    • 提交

答案 1 :(得分:0)

您只需从具有以下内容的数据库中获取记录的count + 1 然后将名字添加为“ Arjun”,然后将姓氏添加为“ Kumar”

它将以此模式创建用户名

Arjun-Kumar-1

Arjun-Kumar-2

Arjun-Kumar-3

...

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

上。

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

如果您对数据库中的firstname-surname- [uniquenumber]字段进行唯一约束,则可以检测到冲突,然后再次重新生成一个唯一编号。

答案 5 :(得分:0)

----
CREATE TABLE name_card
(id INT(10) AUTO_INCREMENT,
name_card VARCHAR(200),
value_card VARCHAR(200),
PRIMARY KEY(id));
----

----
DELIMITER $$     
DROP FUNCTION IF EXISTS unicode_function$$   
CREATE FUNCTION unicode_function (name_ VARCHAR(200)) 
RETURNS VARCHAR(200)    
BEGIN 
DECLARE var INT(10);    
DECLARE nam VARCHAR(100);    
SET var=500;    
IF EXISTS(SELECT name_card FROM name_card WHERE name_card=name_) THEN     
SELECT value_card INTO nam FROM name_card WHERE name_card=name_;  
RETURN nam; 
ELSE 
INSERT INTO name_card(name_card,value_card)
SELECT name_,(SELECT IFNULL((MAX(value_card)+1),var) value_card FROM name_card); 
SELECT value_card INTO nam FROM name_card WHERE name_card=name_; 
RETURN nam; 
END IF; 
END$$ 
DELIMITER ; 
----

基于给定的名称下面的函数生成唯一的 id。 创建一个提到的表,执行函数并尝试。

Create table and Function Script