这个过程非常简单。
用户填写注册字段后,mysql数据库表中的一列即'activation_key'保持随机生成的长字符串,另一列即activated
保持值为0。
激活电子邮件将发送到注册人的电子邮件,其中包含该列的随机键值的激活链接activation_key
。单击该链接后,该 url 会在数据库中搜索包含长字符串的activation_key'
列。如果有任何此类值,则“activation_key”设置为空白,“激活”列设置为 1。.
当生成激活密钥字符串时,会进行搜索以查看正在生成的密钥是否已经存在,如果存在,则生成另一个随机值以获得唯一的。
因此,当一些潜在成员的注册待定时,实际上会在表中的行上执行类似的字符串搜索。
至此,一切正常。
但是想想一个新成员获得了一个激活字符串,该字符串之前是为另一个完成注册的成员生成的。
万一已经注册的会员点击了旧邮箱中的激活链接,那么其他新会员即使实际上没有完成注册,也会完成注册。
所以我决定不将“activation_key”表设置为空白,因此对所有已经或可能成为成员的成员进行了类似的字符串搜索。
那也行。但是如果用户数量很大,即超过 1 lac,那么发送激活电子邮件的注册过程将花费很多时间。
1)任何其他方式来最小化数据库探索成本?
2) 在这种情况下,像 facebook 这样的大型网站采取什么政策?