我希望生成一个随机数,并将其发布到数据库中的表中,以用于特定的user_id.问题是,相同的数字不能使用两次.有一百万种方法可以做到这一点,但我希望非常热衷于算法的人能够在一个优雅的解决方案中巧妙地解决问题,因为满足以下条件:
1)对数据库的查询量最少.
2)在内存中进行数据结构爬行的次数最少.
基本上这个想法是做以下事情
1)创建一个0到9999999的随机数
2)检查数据库以查看该号码是否存在
要么
2)在数据库中查询所有数字
3)查看返回的结果是否与来自db的任何内容相匹配
4)如果匹配,重复步骤1,否则问题解决.
谢谢.
没有你的算法不可扩展.我以前做过的是串行发送数字(每次1个),然后通过XOR操作传递它们混杂位,从而给我一个看似随机的数字.当然它们并不是随机的,但它们看起来对用户来说是如此.
原文链接:https://www.f2er.com/php/136772.html[编辑]其他信息
这个算法的逻辑是这样的,你使用一个已知的序列
生成唯一数字,然后确定性地操纵它们,
所以他们不再看起来连续了.一般的解决方案是使用
某种形式的加密,在我的例子中是一个XOR触发器,因为
它尽可能快,并且它满足了数字的保证
绝不会碰撞.
但是,如果您想要更多,则可以使用其他形式的加密
随机查看数字,超速(说你不需要生成很多
ids一次).现在是选择加密算法的重点
是“数字绝不会碰撞的保证”.并且一种证明加密算法是否能够实现的方法
这个保证是检查原始数字和结果
加密具有相同的位数,并且算法是
可逆的(双射).
[感谢Adam Liss& CesarB用于解决方案]