我们无法序列化注册,因为有数百万人同时注册。需要并行注册。
假设数据库不包含用户名“ user1”。当两个用户尝试同时使用“ user1”注册时,它将接受它。但是以后会引起问题。这不应该发生。
我正在寻找一个合理的解决方案。没有什么特别的。解决这个问题的一个想法。
我们无法序列化注册,因为有数百万人同时注册。需要并行注册。
假设数据库不包含用户名“ user1”。当两个用户尝试同时使用“ user1”注册时,它将接受它。但是以后会引起问题。这不应该发生。
我正在寻找一个合理的解决方案。没有什么特别的。解决这个问题的一个想法。
Answers:
假设数据库不包含用户名“ user1”。当两个用户尝试同时使用“ user1”注册时,它将接受它。
为什么会接受呢?应用唯一约束,使用用户名作为主键或在事务内部运行签入应用程序代码很简单。
您绝对应该能够使用数据库事务来使用数据库来防止这种情况的发生。否则,任何应用程序都将无法维护数据库数据中的不变性。
在扩展方面,数据库已经发明了您需要的技术,例如各种锁定模式(具体取决于所需的一致性类型),用于多个数据库服务器的分布式数据库等。
这是个问题吗 ?
如果使用用户名(而不是用户电子邮件)登录,则不允许两个用户使用非唯一的用户名完成注册。
如果未使用用户名进行身份验证,则可以使用一些后台过程来识别并标记双打(例如基于时间戳),并强制用户在下次登录时更改其用户名
是的,这是一个问题
如您所问,我想用户名应该是唯一的ID。可以使用以下方法:
重新考虑您认为用户的唯一标识符。每个用户已经有一个唯一的电子邮件地址,因此该问题已经为您解决。当然,这意味着多个用户将能够注册相同的名称,例如“ Mike Nakis”。这有问题吗?你确定吗?例如,对于Facebook来说这不是问题。存在多个名为“ Mike Nakis”的facebook用户。查看facebook登录页面:它要求输入“电子邮件或电话”和“密码”。
随着数百万个用户同时注册,您仅使用26 x 26个注册服务器,其中一个用于aa开头的用户,一个用于ab开头的用户,依此类推。结果,只有数千个用户同时在每个服务器上注册。如果仍然无法解决问题,请使用26 x 26 x 26台服务器。