已经提出了类似的问题,但是我的问题与对此进行的一些研究完全不同。
注册网站时,我会提供
名字: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-1
,time-cook-2
。
答案 0 :(得分:1)
我假设您正在使用MySQL。这是处理并发请求的可能解决方案:
(first_name, last_name, count)
收到新的用户注册请求时:
select for update
答案 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]
上。如果您对数据库中的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。 创建一个提到的表,执行函数并尝试。